survery-lib 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,11 @@
1
1
  import { Component, EventEmitter, Output } from '@angular/core';
2
2
  import { QuestionTypeEnum } from '../shared/enums/question-type.enum';
3
3
  import { of } from 'rxjs';
4
- import { LogicPropertyEnum } from '../shared/enums/Logic-Property.enum';
5
- import { OperatorEnum } from '../shared/enums/operator.enum';
6
4
  import { LogicActionEnum } from '../shared/enums/logic-action.enum';
7
5
  import * as i0 from "@angular/core";
8
6
  import * as i1 from "./services/survey-lib.service";
9
7
  import * as i2 from "@ng-stack/forms";
10
- import * as i3 from "./services/shared-data.service";
8
+ import * as i3 from "./usecases/check-rule-exps.usecase";
11
9
  import * as i4 from "@angular/common";
12
10
  import * as i5 from "./components/question-text-template/question-text-template.component";
13
11
  import * as i6 from "./components/question-radio-button-template/question-radio-button-template.component";
@@ -26,10 +24,10 @@ export class SurveryLibComponent {
26
24
  get isLastPage() {
27
25
  return this.fCtrls.currentPageIndex.value == (this.surveyData?.surveyPages.length - 1);
28
26
  }
29
- constructor(_surveyLibService, _formBuilder, _sharedDataService) {
27
+ constructor(_surveyLibService, _formBuilder, _checkRuleExpsUsecase) {
30
28
  this._surveyLibService = _surveyLibService;
31
29
  this._formBuilder = _formBuilder;
32
- this._sharedDataService = _sharedDataService;
30
+ this._checkRuleExpsUsecase = _checkRuleExpsUsecase;
33
31
  this.surveyResultEmit = new EventEmitter();
34
32
  this.rForm = this._formBuilder.group({
35
33
  currentPageIndex: [0],
@@ -58,7 +56,8 @@ export class SurveryLibComponent {
58
56
  return of(null);
59
57
  }
60
58
  else {
61
- return of(this.fCtrls.questionArray.value);
59
+ var questionArr = this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true);
60
+ return of(questionArr);
62
61
  }
63
62
  }
64
63
  else {
@@ -162,7 +161,8 @@ export class SurveryLibComponent {
162
161
  }
163
162
  haveInValidateQuestions() {
164
163
  const currentPageIndex = this.fCtrls.currentPageIndex.value;
165
- var invalidRecords = this.rForm.value.questionArray.filter(x => x.surveyPageIndex == currentPageIndex && x.isValid != true && x.isMatrixGroup != true);
164
+ var invalidRecords = this.fCtrls.questionArray.value.filter(x => x.surveyPageIndex == currentPageIndex && x.isValid != true
165
+ && x.isDisabled == false && x.isShow == true && x.isMatrixGroup != true);
166
166
  if (invalidRecords.length > 0) {
167
167
  $(`#survey-page_${currentPageIndex}`).addClass('survey-page_submitted');
168
168
  }
@@ -170,170 +170,51 @@ export class SurveryLibComponent {
170
170
  }
171
171
  checkRules() {
172
172
  this.surveyData.surveyRules.forEach(rule => {
173
- var exprestionResultArr = [];
174
- rule.ruleExps.forEach(ruleExp => {
175
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == ruleExp.questionId);
176
- var questionGroup = this.fCtrls.questionArray.at(index);
177
- var result;
178
- if (questionGroup.value.questionType == this.questionTypeEnum.TextInput) {
179
- result = this.checkRuleExpForAnswerText(ruleExp, questionGroup.value.answerText);
180
- }
181
- else if (questionGroup.value.questionType == this.questionTypeEnum.CheckBox) {
182
- result = this.checkRuleExpForAnswerIdArr(ruleExp, questionGroup.value.answerIdArr);
173
+ this._checkRuleExpsUsecase.execute({
174
+ ruleExps: rule.ruleExps,
175
+ questions: this.fCtrls.questionArray.value
176
+ }).subscribe(result => {
177
+ var isPassed = result.exprestionResultArr.filter(x => x == false).length == 0;
178
+ if (isPassed) {
179
+ rule.ruleResultQuestions.forEach(resultQuestion => {
180
+ const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
181
+ var questionGroup = this.fCtrls.questionArray.at(index);
182
+ if (rule.logicActionId == LogicActionEnum.Show) {
183
+ questionGroup.controls.isShow.setValue(true);
184
+ }
185
+ else if (rule.logicActionId == LogicActionEnum.Hide) {
186
+ questionGroup.controls.isShow.setValue(false);
187
+ }
188
+ else if (rule.logicActionId == LogicActionEnum.Enable) {
189
+ questionGroup.controls.isDisabled.setValue(false);
190
+ }
191
+ else if (rule.logicActionId == LogicActionEnum.Disable) {
192
+ questionGroup.controls.isDisabled.setValue(true);
193
+ }
194
+ else if (rule.logicActionId == LogicActionEnum.SetAnswer) {
195
+ }
196
+ });
183
197
  }
184
198
  else {
185
- result = this.checkRuleExpForAnswerId(ruleExp, questionGroup.value.answerId);
186
- }
187
- exprestionResultArr.push(result);
188
- });
189
- var isPassed = exprestionResultArr.filter(x => x == false).length == 0;
190
- if (isPassed) {
191
- rule.ruleResultQuestions.forEach(resultQuestion => {
192
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
193
- var questionGroup = this.fCtrls.questionArray.at(index);
194
- if (rule.logicActionId == LogicActionEnum.Show) {
195
- questionGroup.controls.isShow.setValue(true);
196
- }
197
- else if (rule.logicActionId == LogicActionEnum.Hide) {
198
- questionGroup.controls.isShow.setValue(false);
199
- }
200
- else if (rule.logicActionId == LogicActionEnum.Enable) {
201
- questionGroup.controls.isDisabled.setValue(false);
202
- }
203
- else if (rule.logicActionId == LogicActionEnum.Disable) {
204
- questionGroup.controls.isDisabled.setValue(true);
205
- }
206
- else if (rule.logicActionId == LogicActionEnum.SetAnswer) {
207
- }
208
- });
209
- }
210
- else {
211
- rule.ruleResultQuestions.forEach(resultQuestion => {
212
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
213
- var questionGroup = this.fCtrls.questionArray.at(index);
214
- questionGroup.patchValue({
215
- isShow: questionGroup.value.isShow_default,
216
- isDisabled: questionGroup.value.isDisabled_default
199
+ rule.ruleResultQuestions.forEach(resultQuestion => {
200
+ const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
201
+ var questionGroup = this.fCtrls.questionArray.at(index);
202
+ questionGroup.patchValue({
203
+ isShow: questionGroup.value.isShow_default,
204
+ isDisabled: questionGroup.value.isDisabled_default
205
+ });
217
206
  });
218
- });
219
- }
220
- });
221
- }
222
- checkRuleExpForAnswerId(ruleExp, answerId) {
223
- var ruleExpResultArr = [];
224
- if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThan) {
225
- ruleExp.ruleExpAnswers.forEach(answer => {
226
- var result = answerId > answer.answerId;
227
- ruleExpResultArr.push(result);
228
- });
229
- }
230
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThanOrEqual) {
231
- ruleExp.ruleExpAnswers.forEach(answer => {
232
- var result = answerId >= answer.answerId;
233
- ruleExpResultArr.push(result);
234
- });
235
- }
236
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThan) {
237
- ruleExp.ruleExpAnswers.forEach(answer => {
238
- var result = answerId < answer.answerId;
239
- ruleExpResultArr.push(result);
240
- });
241
- }
242
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThanOrEqual) {
243
- ruleExp.ruleExpAnswers.forEach(answer => {
244
- var result = answerId <= answer.answerId;
245
- ruleExpResultArr.push(result);
246
- });
247
- }
248
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.Equal) {
249
- ruleExp.ruleExpAnswers.forEach(answer => {
250
- var result = answerId == answer.answerId;
251
- ruleExpResultArr.push(result);
252
- });
253
- }
254
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.NotEqual) {
255
- ruleExp.ruleExpAnswers.forEach(answer => {
256
- var result = answerId != answer.answerId;
257
- ruleExpResultArr.push(result);
207
+ }
258
208
  });
259
- }
260
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
261
- var result = answerId == null;
262
- ruleExpResultArr.push(result);
263
- }
264
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
265
- var result = answerId != null;
266
- ruleExpResultArr.push(result);
267
- }
268
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.AnyOf) {
269
- var answerIdArr = ruleExp.ruleExpAnswers.map(x => x.answerId);
270
- var result = answerIdArr.findIndex(x => x == answerId) > -1;
271
- ruleExpResultArr.push(result);
272
- }
273
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.Then) {
274
- var answerIdArr = ruleExp.ruleExpAnswers.map(x => x.answerId);
275
- var result = answerIdArr.findIndex(x => x == answerId) == -1;
276
- ruleExpResultArr.push(result);
277
- }
278
- if (ruleExpResultArr.length == 0) {
279
- return false;
280
- }
281
- else if (ruleExp.ruleExpAnswers.length == 1) {
282
- return ruleExpResultArr.filter(x => x == true).length > 0;
283
- }
284
- else if (ruleExp.opporator == OperatorEnum.Or) {
285
- return ruleExpResultArr.filter(x => x == true).length > 0;
286
- }
287
- else {
288
- return ruleExpResultArr.filter(x => x == false).length == 0;
289
- }
290
- }
291
- checkRuleExpForAnswerIdArr(ruleExp, answerIdArr) {
292
- var ruleExpResultArr = [];
293
- answerIdArr?.forEach(answer => {
294
- var isResult = this.checkRuleExpForAnswerId(ruleExp, answer);
295
- ruleExpResultArr.push(isResult);
296
209
  });
297
- if (ruleExpResultArr.length == 0) {
298
- return false;
299
- }
300
- else if (ruleExp.ruleExpAnswers.length == 1) {
301
- return ruleExpResultArr.filter(x => x == true).length > 0;
302
- }
303
- else if (ruleExp.opporator == OperatorEnum.Or) {
304
- return ruleExpResultArr.filter(x => x == true).length > 0;
305
- }
306
- else {
307
- return ruleExpResultArr.filter(x => x == false).length == 0;
308
- }
309
- }
310
- checkRuleExpForAnswerText(ruleExp, answer) {
311
- var ruleExpResultArr = [];
312
- if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
313
- var result = answer == null || answer == '';
314
- ruleExpResultArr.push(result);
315
- }
316
- else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
317
- var result = answer != null && answer != '';
318
- ruleExpResultArr.push(result);
319
- }
320
- if (ruleExp.ruleExpAnswers.length == 1) {
321
- return ruleExpResultArr.filter(x => x == true).length > 0;
322
- }
323
- else if (ruleExp.opporator == OperatorEnum.Or) {
324
- return ruleExpResultArr.filter(x => x == true).length > 0;
325
- }
326
- else {
327
- return ruleExpResultArr.filter(x => x == false).length == 0;
328
- }
329
210
  }
330
- 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.SharedDataService }], target: i0.ɵɵFactoryTarget.Component }); }
211
+ 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 }); }
331
212
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SurveryLibComponent, selector: "lib-survery-lib", outputs: { surveyResultEmit: "surveyResultEmit" }, ngImport: i0, template: "<div 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\">\r\n {{item.questionGroupName}}\r\n </h2>\r\n <span class=\"group-sub-title \">\r\n {{item.questionGroupDescription}}\r\n </span>\r\n </div>\r\n <ng-container *ngFor=\"let question of item.surveyQuestions\">\r\n <lib-question-boolean-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Boolean\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-boolean-template>\r\n\r\n <lib-question-text-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.TextInput\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"\r\n [isTextArea]=\"question.isAdvanceTextArea\"></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.RadioButton\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDown\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-dropdown-template>\r\n\r\n <lib-question-check-box-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.CheckBox\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswers($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Matrix\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-matrix-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\">\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item previous-page-item \">\r\n <a class=\"page-link\" href=\"javascript:void(0)\" (click)=\"onPaggingBack()\"\r\n [ngClass]=\"{'disable__btn':fCtrls.currentPageIndex.value == 0}\">\u0627\u0644\u0633\u0627\u0628\u0642</a>\r\n </li>\r\n <li class=\"page-item active\" *ngFor=\"let item of surveyData?.surveyPages;let i = index\"\r\n [ngClass]=\"{'active': i == fCtrls.currentPageIndex.value}\">\r\n <a class=\"page-link\" href=\"javascript:void(0)\">{{i + 1}}</a>\r\n </li>\r\n <li class=\"page-item next-page-item\">\r\n <a class=\"page-link\" href=\"javascript:void(0)\" (click)=\"onPaggingNext()\"\r\n [ngClass]=\"{'disable__btn':fCtrls.currentPageIndex.value == (surveyData.surveyPages.length - 1)}\">\u0627\u0644\u062A\u0627\u0644\u064A</a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}\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: ["isShow", "isTextArea", "setQuestion", "isDisabled"], outputs: ["emitter"] }, { kind: "component", type: i6.QuestionRadioButtonTemplateComponent, selector: "lib-question-radio-button-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i7.QuestionCheckBoxTemplateComponent, selector: "lib-question-check-box-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i8.QuestionDropdownTemplateComponent, selector: "lib-question-dropdown-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i9.QuestionMatrixTemplateComponent, selector: "lib-question-matrix-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i10.QuestionBooleanTemplateComponent, selector: "lib-question-boolean-template", inputs: ["isShow", "isDisabled", "setQuestion"], outputs: ["emitter"] }, { kind: "pipe", type: i11.FilterQuestionPipe, name: "filterQuestion" }] }); }
332
213
  }
333
214
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibComponent, decorators: [{
334
215
  type: Component,
335
216
  args: [{ selector: 'lib-survery-lib', template: "<div 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\">\r\n {{item.questionGroupName}}\r\n </h2>\r\n <span class=\"group-sub-title \">\r\n {{item.questionGroupDescription}}\r\n </span>\r\n </div>\r\n <ng-container *ngFor=\"let question of item.surveyQuestions\">\r\n <lib-question-boolean-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Boolean\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-boolean-template>\r\n\r\n <lib-question-text-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.TextInput\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"\r\n [isTextArea]=\"question.isAdvanceTextArea\"></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.RadioButton\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDown\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-dropdown-template>\r\n\r\n <lib-question-check-box-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.CheckBox\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswers($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.Matrix\"\r\n [isShow]=\" (question|filterQuestion : fCtrls.questionArray.value).isShow\"\r\n [isDisabled]=\"(question|filterQuestion : fCtrls.questionArray.value).isDisabled\"></lib-question-matrix-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\">\r\n <nav aria-label=\"Page navigation example\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item previous-page-item \">\r\n <a class=\"page-link\" href=\"javascript:void(0)\" (click)=\"onPaggingBack()\"\r\n [ngClass]=\"{'disable__btn':fCtrls.currentPageIndex.value == 0}\">\u0627\u0644\u0633\u0627\u0628\u0642</a>\r\n </li>\r\n <li class=\"page-item active\" *ngFor=\"let item of surveyData?.surveyPages;let i = index\"\r\n [ngClass]=\"{'active': i == fCtrls.currentPageIndex.value}\">\r\n <a class=\"page-link\" href=\"javascript:void(0)\">{{i + 1}}</a>\r\n </li>\r\n <li class=\"page-item next-page-item\">\r\n <a class=\"page-link\" href=\"javascript:void(0)\" (click)=\"onPaggingNext()\"\r\n [ngClass]=\"{'disable__btn':fCtrls.currentPageIndex.value == (surveyData.surveyPages.length - 1)}\">\u0627\u0644\u062A\u0627\u0644\u064A</a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}\n"] }]
336
- }], ctorParameters: function () { return [{ type: i1.SurveyLibService }, { type: i2.FormBuilder }, { type: i3.SharedDataService }]; }, propDecorators: { surveyResultEmit: [{
217
+ }], ctorParameters: function () { return [{ type: i1.SurveyLibService }, { type: i2.FormBuilder }, { type: i3.CheckRuleExpsUsecase }]; }, propDecorators: { surveyResultEmit: [{
337
218
  type: Output
338
219
  }] } });
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmVyeS1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VydmVyeS1saWIvc3JjL2xpYi9zdXJ2ZXJ5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBSXRFLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFwRSxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUlELFlBQW9CLGlCQUFtQyxFQUMzQyxZQUF5QixFQUFVLGtCQUFxQztRQURoRSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQzNDLGlCQUFZLEdBQVosWUFBWSxD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QUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO2dCQUN2QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FFSjthQUFNLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFFdkUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFBO2dCQUN4QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FFSjthQUFNLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7WUFFN0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFBO2dCQUN4QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FFSjthQUFNLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7WUFFaEUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksTUFBTSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFBO2dCQUN4QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FFSjthQUFNLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7WUFFL0QsSUFBSSxN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SSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQzFEO2FBQU07WUFDTCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO1NBQzVEO0lBQ0gsQ0FBQzs4R0FoV1UsbUJBQW1CO2tHQUFuQixtQkFBbUIsMEdDckJoQyx3d0pBMEVNOzsyRkRyRE8sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjtpS0FxQmpCLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3VydmV5TGliU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc3VydmV5LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cnZleUR0byB9IGZyb20gJy4uL3NoYXJlZC9kdG9zL3N1cnZleS5kdG8nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0BuZy1zdGFjay9mb3Jtcyc7XG5pbXBvcnQgeyBRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZSwgUnVsZVF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlLCBTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZSB9IGZyb20gJy4uL3NoYXJlZC9mb3JtLWludGVyZmFjZXMvc3VydmVyeS1saWIuZm9ybS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25UeXBlRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgdjQgYXMgZ3VpZEdlbmVyYXRvciB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgU2hhcmVkRGF0YVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVlc3Rpb25BbnN3ZXJNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvcXVlc3Rpb24tYW5zd2VyLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2dpY1Byb3BlcnR5RW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9Mb2dpYy1Qcm9wZXJ0eS5lbnVtJztcbmltcG9ydCB7IFJ1bGVFeHBEdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9ydWxlLWV4cC5kdG8nO1xuaW1wb3J0IHsgT3BlcmF0b3JFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL29wZXJhdG9yLmVudW0nO1xuaW1wb3J0IHsgTG9naWNBY3Rpb25FbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL2xvZ2ljLWFjdGlvbi5lbnVtJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1cnZlcnktbGliJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdXJ2ZXktbGliLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3VydmVyeUxpYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgc3VydmV5RGF0YTogU3VydmV5RHRvO1xuICByRm9ybTogRm9ybUdyb3VwPFN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPjtcblxuICBnZXQgZkN0cmxzKCkge1xuICAgIHJldHVybiB0aGlzLnJGb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHF1ZXN0aW9uVHlwZUVudW0oKSB7XG4gICAgcmV0dXJuIFF1ZXN0aW9uVHlwZUVudW07XG4gIH1cblxuICBnZXQgaXNMYXN0UGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZSA9PSAodGhpcy5zdXJ2ZXlEYXRhPy5zdXJ2ZXlQYWdlcy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBzdXJ2ZXlSZXN1bHRFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZVtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N1cnZleUxpYlNlcnZpY2U6IFN1cnZleUxpYlNlcnZpY2VcbiAgICAsIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfc2hhcmVkRGF0YVNlcnZpY2U6IFNoYXJlZERhdGFTZXJ2aWNlKSB7XG5cbiAgICB0aGlzLnJGb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXA8U3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KHtcbiAgICAgIGN1cnJlbnRQYWdlSW5kZXg6IFswXSxcbiAgICAgIHF1ZXN0aW9uQXJyYXk6IHRoaXMuX2Zvcm1CdWlsZGVyLmFycmF5PFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPihbXSksXG4gICAgICBydWxlUXVlc3Rpb25BcnJheTogdGhpcy5fZm9ybUJ1aWxkZXIuYXJyYXk8UnVsZVF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPihbXSlcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc3VydmV5RGF0YU9ic3J2LnN1YnNjcmliZShzdXJ2ZXkgPT4ge1xuICAgICAgdGhpcy5zdXJ2ZXlEYXRhID0gc3VydmV5O1xuICAgICAgaWYgKHN1cnZleSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMubG9hZFF1ZXN0aW9ucyhzdXJ2ZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5jbGVhcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25QYWdnaW5nTmV4dCgpOiBPYnNlcnZhYmxlPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlW10+IHtcbiAgICB2YXIgaXNIYXZlSW52YWxpZFJlY29yZHMgPSB0aGlzLmhhdmVJblZhbGlkYXRlUXVlc3Rpb25zKCk7XG4gICAgaWYgKGlzSGF2ZUludmFsaWRSZWNvcmRzID09IGZhbHNlKSB7XG5cbiAgICAgIHZhciBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZTtcblxuICAgICAgaWYgKGN1cnJlbnRQYWdlSW5kZXggPCAodGhpcy5zdXJ2ZXlEYXRhLnN1cnZleVBhZ2VzLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgIGN1cnJlbnRQYWdlSW5kZXggPSBOdW1iZXIoY3VycmVudFBhZ2VJbmRleCkgKyAxO1xuICAgICAgICB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnNldFZhbHVlKGN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgICByZXR1cm4gb2YobnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihudWxsKVxuICAgIH1cbiAgfVxuXG4gIG9uUGFnZ2luZ0JhY2soKSB7XG4gICAgdmFyIGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlO1xuICAgIGlmIChjdXJyZW50UGFnZUluZGV4ID4gMCkge1xuICAgICAgY3VycmVudFBhZ2VJbmRleCA9IE51bWJlcihjdXJyZW50UGFnZUluZGV4KSAtIDE7XG4gICAgICB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnNldFZhbHVlKGN1cnJlbnRQYWdlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIG9uVXBkYXRlQW5zd2Vycyhtb2RlbDogUXVlc3Rpb25BbnN3ZXJNb2RlbFtdKSB7XG4gICAgbW9kZWwuZm9yRWFjaChlbGVtID0+IHtcbiAgICAgIHRoaXMub25VcGRhdGVBbnN3ZXIoZWxlbSk7XG4gICAgfSk7XG4gIH1cblxuICBvblVwZGF0ZUFuc3dlcihtb2RlbDogUXVlc3Rpb25BbnN3ZXJNb2RlbCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gbW9kZWwuUXVlc3Rpb25JZCk7XG4gICAgdmFyIHF1ZXN0aW9uR3JvdXAgPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LmNvbnRyb2xzW2luZGV4XTtcbiAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmlzVmFsaWQuc2V0VmFsdWUobW9kZWwuSXNWYWxpZCk7XG5cbiAgICBpZiAocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvblR5cGUgPT0gdGhpcy5xdWVzdGlvblR5cGVFbnVtLlRleHRJbnB1dCkge1xuICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5hbnN3ZXJUZXh0LnNldFZhbHVlKG1vZGVsLkFuc3dlcik7XG4gICAgfSBlbHNlIGlmIChxdWVzdGlvbkdyb3VwLnZhbHVlLnF1ZXN0aW9uVHlwZSA9PSB0aGlzLnF1ZXN0aW9uVHlwZUVudW0uQ2hlY2tCb3gpIHtcbiAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuYW5zd2VySWRBcnIuc2V0VmFsdWUobW9kZWwuQW5zd2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5hbnN3ZXJJZC5zZXRWYWx1ZShtb2RlbC5BbnN3ZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZDdHJscy5ydWxlUXVlc3Rpb25BcnJheS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gbW9kZWwuUXVlc3Rpb25JZCkgPiAtMSkge1xuICAgICAgdGhpcy5jaGVja1J1bGVzKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRRdWVzdGlvbnMoc3VydmV5OiBTdXJ2ZXlEdG8pIHtcbiAgICBzdXJ2ZXkuc3VydmV5UGFnZXMuZm9yRWFjaCgocGFnZSwgcGFnZUluZGV4KSA9PiB7XG4gICAgICBwYWdlLnN1cnZleVF1ZXN0aW9uR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuXG4gICAgICAgIGdyb3VwLnN1cnZleVF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcblxuICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCAhPSA2KSB7XG4gICAgICAgICAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnB1c2godGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXA8UXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KHtcbiAgICAgICAgICAgICAgc3VydmV5UGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IFtxdWVzdGlvbi5xdWVzdGlvbklkXSxcbiAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiBbcXVlc3Rpb24ucXVlc3Rpb25UeXBlSWRdLFxuICAgICAgICAgICAgICBpc01hdHJpeEdyb3VwOiBbZmFsc2VdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZEFycjogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IFtxdWVzdGlvbi5pc1JlcXVpcmVkXSxcbiAgICAgICAgICAgICAgaXNWYWxpZDogW251bGxdLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBbcXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgIGlzU2hvdzogW3F1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWRfZGVmYXVsdDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3F1ZXN0aW9uLmlzVmlzYWJsZV1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgICAgICAgIHN1cnZleVBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBbcXVlc3Rpb24ucXVlc3Rpb25JZF0sXG4gICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogW3F1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkXSxcbiAgICAgICAgICAgICAgaXNNYXRyaXhHcm91cDogW3RydWVdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZDogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJJZEFycjogW251bGxdLFxuICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IFtxdWVzdGlvbi5pc1JlcXVpcmVkXSxcbiAgICAgICAgICAgICAgaXNWYWxpZDogW251bGxdLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBbcXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgIGlzU2hvdzogW3F1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWRfZGVmYXVsdDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3F1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleVN1YlF1ZXN0aW9ucy5mb3JFYWNoKHN1YlF1ZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgICAgICAgICAgc3VydmV5UGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogW3N1YlF1ZXN0aW9uLnF1ZXN0aW9uSWRdLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogW3N1YlF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkXSxcbiAgICAgICAgICAgICAgICBpc01hdHJpeEdyb3VwOiBbZmFsc2VdLFxuICAgICAgICAgICAgICAgIGFuc3dlcklkOiBbbnVsbF0sXG4gICAgICAgICAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZDogW3F1ZXN0aW9uLmlzUmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBbc3ViUXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgICAgaXNTaG93OiBbc3ViUXVlc3Rpb24uaXNWaXNhYmxlXSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtzdWJRdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3N1YlF1ZXN0aW9uLmlzVmlzYWJsZV1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHN1cnZleS5zdXJ2ZXlSdWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgcnVsZS5ydWxlRXhwcy5mb3JFYWNoKHJ1bGVFeHAgPT4ge1xuICAgICAgICB0aGlzLmZDdHJscy5ydWxlUXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFJ1bGVRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgICAgIHF1ZXN0aW9uSWQ6IHJ1bGVFeHAucXVlc3Rpb25JZFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBoYXZlSW5WYWxpZGF0ZVF1ZXN0aW9ucygpIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZTtcbiAgICB2YXIgaW52YWxpZFJlY29yZHMgPSB0aGlzLnJGb3JtLnZhbHVlLnF1ZXN0aW9uQXJyYXkuZmlsdGVyKHggPT4geC5zdXJ2ZXlQYWdlSW5kZXggPT0gY3VycmVudFBhZ2VJbmRleCAmJiB4LmlzVmFsaWQgIT0gdHJ1ZSAmJiB4LmlzTWF0cml4R3JvdXAgIT0gdHJ1ZSk7XG4gICAgaWYgKGludmFsaWRSZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICQoYCNzdXJ2ZXktcGFnZV8ke2N1cnJlbnRQYWdlSW5kZXh9YCkuYWRkQ2xhc3MoJ3N1cnZleS1wYWdlX3N1Ym1pdHRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnZhbGlkUmVjb3Jkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1J1bGVzKCkge1xuXG4gICAgdGhpcy5zdXJ2ZXlEYXRhLnN1cnZleVJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICB2YXIgZXhwcmVzdGlvblJlc3VsdEFycjogYm9vbGVhbltdID0gW107XG5cbiAgICAgIHJ1bGUucnVsZUV4cHMuZm9yRWFjaChydWxlRXhwID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbmRJbmRleCh4ID0+IHgucXVlc3Rpb25JZCA9PSBydWxlRXhwLnF1ZXN0aW9uSWQpO1xuICAgICAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuYXQoaW5kZXgpO1xuXG4gICAgICAgIHZhciByZXN1bHQ6IGJvb2xlYW47XG5cbiAgICAgICAgaWYgKHF1ZXN0aW9uR3JvdXAudmFsdWUucXVlc3Rpb25UeXBlID09IHRoaXMucXVlc3Rpb25UeXBlRW51bS5UZXh0SW5wdXQpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmNoZWNrUnVsZUV4cEZvckFuc3dlclRleHQocnVsZUV4cCwgcXVlc3Rpb25Hcm91cC52YWx1ZS5hbnN3ZXJUZXh0KVxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uR3JvdXAudmFsdWUucXVlc3Rpb25UeXBlID09IHRoaXMucXVlc3Rpb25UeXBlRW51bS5DaGVja0JveCkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuY2hlY2tSdWxlRXhwRm9yQW5zd2VySWRBcnIocnVsZUV4cCwgcXVlc3Rpb25Hcm91cC52YWx1ZS5hbnN3ZXJJZEFycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5jaGVja1J1bGVFeHBGb3JBbnN3ZXJJZChydWxlRXhwLCBxdWVzdGlvbkdyb3VwLnZhbHVlLmFuc3dlcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHJlc3Rpb25SZXN1bHRBcnIucHVzaChyZXN1bHQpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBpc1Bhc3NlZCA9IGV4cHJlc3Rpb25SZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSBmYWxzZSkubGVuZ3RoID09IDA7XG4gICAgICBpZiAoaXNQYXNzZWQpIHtcblxuICAgICAgICBydWxlLnJ1bGVSZXN1bHRRdWVzdGlvbnMuZm9yRWFjaChyZXN1bHRRdWVzdGlvbiA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbmRJbmRleCh4ID0+IHgucXVlc3Rpb25JZCA9PSByZXN1bHRRdWVzdGlvbi5xdWVzdGlvbklkKTtcbiAgICAgICAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuYXQoaW5kZXgpO1xuICAgICAgICAgIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLlNob3cpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuaXNTaG93LnNldFZhbHVlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5IaWRlKSB7XG4gICAgICAgICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmlzU2hvdy5zZXRWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLkVuYWJsZSkge1xuICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc0Rpc2FibGVkLnNldFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUubG9naWNBY3Rpb25JZCA9PSBMb2dpY0FjdGlvbkVudW0uRGlzYWJsZSkge1xuICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc0Rpc2FibGVkLnNldFZhbHVlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5TZXRBbnN3ZXIpIHtcblxuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBydWxlLnJ1bGVSZXN1bHRRdWVzdGlvbnMuZm9yRWFjaChyZXN1bHRRdWVzdGlvbiA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbmRJbmRleCh4ID0+IHgucXVlc3Rpb25JZCA9PSByZXN1bHRRdWVzdGlvbi5xdWVzdGlvbklkKTtcbiAgICAgICAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuYXQoaW5kZXgpO1xuICAgICAgICAgIHF1ZXN0aW9uR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICBpc1Nob3c6IHF1ZXN0aW9uR3JvdXAudmFsdWUuaXNTaG93X2RlZmF1bHQsXG4gICAgICAgICAgICBpc0Rpc2FibGVkOiBxdWVzdGlvbkdyb3VwLnZhbHVlLmlzRGlzYWJsZWRfZGVmYXVsdFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1J1bGVFeHBGb3JBbnN3ZXJJZChydWxlRXhwOiBSdWxlRXhwRHRvLCBhbnN3ZXJJZDogbnVtYmVyKSB7XG4gICAgdmFyIHJ1bGVFeHBSZXN1bHRBcnI6IGJvb2xlYW5bXSA9IFtdO1xuICAgIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5HcmVhdGVyVGhhbikge1xuXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkID4gYW5zd2VyLmFuc3dlcklkXG4gICAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkdyZWF0ZXJUaGFuT3JFcXVhbCkge1xuXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkID49IGFuc3dlci5hbnN3ZXJJZFxuICAgICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5MZXNzVGhhbikge1xuXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkIDwgYW5zd2VyLmFuc3dlcklkXG4gICAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkxlc3NUaGFuT3JFcXVhbCkge1xuXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkIDw9IGFuc3dlci5hbnN3ZXJJZFxuICAgICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5FcXVhbCkge1xuXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkID09IGFuc3dlci5hbnN3ZXJJZFxuICAgICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5Ob3RFcXVhbCkge1xuXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkICE9IGFuc3dlci5hbnN3ZXJJZFxuICAgICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5Jc0VtcHR5KSB7XG5cbiAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCA9PSBudWxsXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcblxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uSXNOb3RFbXB0eSkge1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgIT0gbnVsbFxuICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XG5cbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkFueU9mKSB7XG5cbiAgICAgIHZhciBhbnN3ZXJJZEFycjogbnVtYmVyW10gPSBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLm1hcCh4ID0+IHguYW5zd2VySWQpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkQXJyLmZpbmRJbmRleCh4ID0+IHggPT0gYW5zd2VySWQpID4gLTFcbiAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xuXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5UaGVuKSB7XG5cbiAgICAgIHZhciBhbnN3ZXJJZEFycjogbnVtYmVyW10gPSBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLm1hcCh4ID0+IHguYW5zd2VySWQpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkQXJyLmZpbmRJbmRleCh4ID0+IHggPT0gYW5zd2VySWQpID09IC0xXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcblxuICAgIH1cblxuICAgIGlmIChydWxlRXhwUmVzdWx0QXJyLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gdHJ1ZSkubGVuZ3RoID4gMFxuICAgIH1cbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gdHJ1ZSkubGVuZ3RoID4gMFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSdWxlRXhwRm9yQW5zd2VySWRBcnIocnVsZUV4cDogUnVsZUV4cER0bywgYW5zd2VySWRBcnI6IG51bWJlcltdKSB7XG4gICAgdmFyIHJ1bGVFeHBSZXN1bHRBcnI6IGJvb2xlYW5bXSA9IFtdO1xuXG4gICAgYW5zd2VySWRBcnI/LmZvckVhY2goYW5zd2VyID0+IHtcbiAgICAgIHZhciBpc1Jlc3VsdCA9IHRoaXMuY2hlY2tSdWxlRXhwRm9yQW5zd2VySWQocnVsZUV4cCwgYW5zd2VyKTtcbiAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChpc1Jlc3VsdCk7XG4gICAgfSlcblxuICAgIGlmIChydWxlRXhwUmVzdWx0QXJyLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gdHJ1ZSkubGVuZ3RoID4gMFxuICAgIH1cbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gdHJ1ZSkubGVuZ3RoID4gMFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSdWxlRXhwRm9yQW5zd2VyVGV4dChydWxlRXhwOiBSdWxlRXhwRHRvLCBhbnN3ZXI6IHN0cmluZykge1xuICAgIHZhciBydWxlRXhwUmVzdWx0QXJyOiBib29sZWFuW10gPSBbXTtcbiAgICBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uSXNFbXB0eSkge1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VyID09IG51bGwgfHwgYW5zd2VyID09ICcnXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcblxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uSXNOb3RFbXB0eSkge1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VyICE9IG51bGwgJiYgYW5zd2VyICE9ICcnXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcblxuICAgIH1cblxuXG4gICAgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gdHJ1ZSkubGVuZ3RoID4gMFxuICAgIH1cbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gdHJ1ZSkubGVuZ3RoID4gMFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwic3VydmF5LWNhcmRcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdXJ2ZXlQYWdlIG9mIHN1cnZleURhdGE/LnN1cnZleVBhZ2VzOyBsZXQgc3VydmV5UGFnZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgW2F0dHIuaWRdPVwiJ3N1cnZleS1wYWdlXycrc3VydmV5UGFnZUluZGV4XCIgW25nQ2xhc3NdPVwieydkLW5vbmUnOiBzdXJ2ZXlQYWdlSW5kZXggIT0gZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWV9XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1cnZleVBhZ2Uuc3VydmV5UXVlc3Rpb25Hcm91cHNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2YXktZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7aXRlbS5xdWVzdGlvbkdyb3VwTmFtZX19XHJcbiAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLXN1Yi10aXRsZSBcIj5cclxuICAgICAgICAgICAgICAgIHt7aXRlbS5xdWVzdGlvbkdyb3VwRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGl0ZW0uc3VydmV5UXVlc3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLkJvb2xlYW5cIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiPjwvbGliLXF1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5UZXh0SW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbaXNUZXh0QXJlYV09XCJxdWVzdGlvbi5pc0FkdmFuY2VUZXh0QXJlYVwiPjwvbGliLXF1ZXN0aW9uLXRleHQtdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLlJhZGlvQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIj48L2xpYi1xdWVzdGlvbi1yYWRpby1idXR0b24tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tZHJvcGRvd24tdGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uRHJvcERvd25cIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiPjwvbGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5DaGVja0JveFwiXHJcbiAgICAgICAgICAgICAgICBbaXNTaG93XT1cIiAocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNTaG93XCJcclxuICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cIihxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc0Rpc2FibGVkXCI+PC9saWItcXVlc3Rpb24tY2hlY2stYm94LXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLW1hdHJpeC10ZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uTWF0cml4XCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIj48L2xpYi1xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkLWZvb3RyXCIgKm5nSWY9XCJzdXJ2ZXlEYXRhICE9IG51bGxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cIiBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmF5LXBhZ2luYXRpb25cIj5cclxuICAgICAgICA8bmF2IGFyaWEtbGFiZWw9XCJQYWdlIG5hdmlnYXRpb24gZXhhbXBsZVwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gcHJldmlvdXMtcGFnZS1pdGVtIFwiPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJvblBhZ2dpbmdCYWNrKClcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlX19idG4nOmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlID09IDB9XCI+2KfZhNiz2KfYqNmCPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gYWN0aXZlXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VydmV5RGF0YT8uc3VydmV5UGFnZXM7bGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpID09IGZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlfVwiPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPnt7aSArIDF9fTwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG5leHQtcGFnZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cIm9uUGFnZ2luZ05leHQoKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVfX2J0bic6ZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWUgPT0gKHN1cnZleURhdGEuc3VydmV5UGFnZXMubGVuZ3RoIC0gMSl9XCI+2KfZhNiq2KfZhNmKPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmVyeS1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VydmVyeS1saWIvc3JjL2xpYi9zdXJ2ZXJ5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBSXRFLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3BFLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUIsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBSUQsWUFBb0IsaUJBQW1DLEVBQzNDLFlBQXlCLEVBQVUscUJBQTJDO1FBRHRFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDM0MsaUJBQVksR0FBWixZQUFZLENBQWE7UUFBVSwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBSGhGLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUE0QyxDQUFDO1FBS3hGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQTBCO1lBQzVELGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBeUMsRUFBRSxDQUFDO1lBQ2xGLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUE2QyxFQUFFLENBQUM7U0FDM0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4RCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN6QixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbkM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLG9CQUFvQixJQUFJLEtBQUssRUFBRTtZQUVqQyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBRTFELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9ELGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDaEI7aUJBQU07Z0JBQ0wsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLENBQUM7Z0JBQ3ZGLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2FBQ3ZCO1NBRUY7YUFBTTtZQUNMLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQzFELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUE0QjtRQUMxQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQTBCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7WUFDdkUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxRDthQUFNLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUM3RSxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDTCxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUM3RixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7U0FDbEI7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQWlCO1FBQ3JDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBRXhDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUV2QyxJQUFJLFFBQVEsQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFO3dCQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQXlDOzRCQUM3RixlQUFlLEVBQUUsU0FBUzs0QkFDMUIsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDakMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQzs0QkFDdkMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDOzRCQUN0QixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDbkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUNsQixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ2YsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDakMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQzs0QkFDNUIsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUN6QyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO3lCQUNyQyxDQUFDLENBQUMsQ0FBQztxQkFDTDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQXlDOzRCQUM3RixlQUFlLEVBQUUsU0FBUzs0QkFDMUIsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDakMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQzs0QkFDdkMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUNyQixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDbkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUNsQixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ2YsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDakMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQzs0QkFDNUIsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUN6QyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO3lCQUNyQyxDQUFDLENBQUMsQ0FBQzt3QkFFSixRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFOzRCQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQXlDO2dDQUM3RixlQUFlLEVBQUUsU0FBUztnQ0FDMUIsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQ0FDcEMsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztnQ0FDMUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDO2dDQUN0QixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0NBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQztnQ0FDbkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDO2dDQUNsQixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2dDQUNqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0NBQ2YsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQ0FDcEMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztnQ0FDL0Isa0JBQWtCLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dDQUM1QyxjQUFjLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDOzZCQUN4QyxDQUFDLENBQUMsQ0FBQzt3QkFDTixDQUFDLENBQUMsQ0FBQTtxQkFDSDtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUVMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQTZDO29CQUNyRyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7aUJBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUM1RCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7ZUFDckgsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM1RSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLENBQUMsQ0FBQyxnQkFBZ0IsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsT0FBTyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sVUFBVTtRQUVoQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQztnQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSzthQUMzQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUVwQixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQzlFLElBQUksUUFBUSxFQUFFO29CQUVaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDeEcsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLElBQUksRUFBRTs0QkFDOUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUM5Qzs2QkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLElBQUksRUFBRTs0QkFDckQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUMvQzs2QkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTs0QkFDdkQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUNuRDs2QkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRTs0QkFDeEQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNsRDs2QkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRTt5QkFFM0Q7b0JBRUgsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTt3QkFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN4RyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3hELGFBQWEsQ0FBQyxVQUFVLENBQUM7NEJBQ3ZCLE1BQU0sRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWM7NEJBQzFDLFVBQVUsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLGtCQUFrQjt5QkFDbkQsQ0FBQyxDQUFBO29CQUNKLENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdk5VLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDBHQ3RCaEMsd3dKQTBFTTs7MkZEcERPLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7b0tBcUJqQixnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1cnZleUxpYlNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3N1cnZleS1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBTdXJ2ZXlEdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9zdXJ2ZXkuZHRvJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAbmctc3RhY2svZm9ybXMnO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2UsIFJ1bGVRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZSwgU3VydmVyeUxpYkZvcm1JbnRlcmZhY2UgfSBmcm9tICcuLi9zaGFyZWQvZm9ybS1pbnRlcmZhY2VzL3N1cnZlcnktbGliLmZvcm0taW50ZXJmYWNlJztcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZUVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvcXVlc3Rpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IHY0IGFzIGd1aWRHZW5lcmF0b3IgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFNoYXJlZERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zaGFyZWQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9uQW5zd2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3F1ZXN0aW9uLWFuc3dlci5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9naWNQcm9wZXJ0eUVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvTG9naWMtUHJvcGVydHkuZW51bSc7XG5pbXBvcnQgeyBSdWxlRXhwRHRvIH0gZnJvbSAnLi4vc2hhcmVkL2R0b3MvcnVsZS1leHAuZHRvJztcbmltcG9ydCB7IE9wZXJhdG9yRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9vcGVyYXRvci5lbnVtJztcbmltcG9ydCB7IExvZ2ljQWN0aW9uRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9sb2dpYy1hY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBDaGVja1J1bGVFeHBzVXNlY2FzZSB9IGZyb20gJy4vdXNlY2FzZXMvY2hlY2stcnVsZS1leHBzLnVzZWNhc2UnO1xuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VydmVyeS1saWInLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VydmV5LWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N1cnZleS1saWIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdXJ2ZXJ5TGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBzdXJ2ZXlEYXRhOiBTdXJ2ZXlEdG87XG4gIHJGb3JtOiBGb3JtR3JvdXA8U3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+O1xuXG4gIGdldCBmQ3RybHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuckZvcm0uY29udHJvbHM7XG4gIH1cblxuICBnZXQgcXVlc3Rpb25UeXBlRW51bSgpIHtcbiAgICByZXR1cm4gUXVlc3Rpb25UeXBlRW51bTtcbiAgfVxuXG4gIGdldCBpc0xhc3RQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlID09ICh0aGlzLnN1cnZleURhdGE/LnN1cnZleVBhZ2VzLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgQE91dHB1dCgpIHN1cnZleVJlc3VsdEVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlW10+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3VydmV5TGliU2VydmljZTogU3VydmV5TGliU2VydmljZVxuICAgICwgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9jaGVja1J1bGVFeHBzVXNlY2FzZTogQ2hlY2tSdWxlRXhwc1VzZWNhc2UpIHtcblxuICAgIHRoaXMuckZvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgY3VycmVudFBhZ2VJbmRleDogWzBdLFxuICAgICAgcXVlc3Rpb25BcnJheTogdGhpcy5fZm9ybUJ1aWxkZXIuYXJyYXk8UXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KFtdKSxcbiAgICAgIHJ1bGVRdWVzdGlvbkFycmF5OiB0aGlzLl9mb3JtQnVpbGRlci5hcnJheTxSdWxlUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KFtdKVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zdXJ2ZXlEYXRhT2JzcnYuc3Vic2NyaWJlKHN1cnZleSA9PiB7XG4gICAgICB0aGlzLnN1cnZleURhdGEgPSBzdXJ2ZXk7XG4gICAgICBpZiAoc3VydmV5ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5sb2FkUXVlc3Rpb25zKHN1cnZleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LmNsZWFyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblBhZ2dpbmdOZXh0KCk6IE9ic2VydmFibGU8UXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2VbXT4ge1xuICAgIHZhciBpc0hhdmVJbnZhbGlkUmVjb3JkcyA9IHRoaXMuaGF2ZUluVmFsaWRhdGVRdWVzdGlvbnMoKTtcbiAgICBpZiAoaXNIYXZlSW52YWxpZFJlY29yZHMgPT0gZmFsc2UpIHtcblxuICAgICAgdmFyIGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlO1xuXG4gICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA8ICh0aGlzLnN1cnZleURhdGEuc3VydmV5UGFnZXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgY3VycmVudFBhZ2VJbmRleCA9IE51bWJlcihjdXJyZW50UGFnZUluZGV4KSArIDE7XG4gICAgICAgIHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXguc2V0VmFsdWUoY3VycmVudFBhZ2VJbmRleCk7XG4gICAgICAgIHJldHVybiBvZihudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uQXJyID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maWx0ZXIoeCA9PiB4LmlzTWF0cml4R3JvdXAgIT0gdHJ1ZSk7XG4gICAgICAgIHJldHVybiBvZihxdWVzdGlvbkFycilcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YobnVsbClcbiAgICB9XG4gIH1cblxuICBvblBhZ2dpbmdCYWNrKCkge1xuICAgIHZhciBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZTtcbiAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA+IDApIHtcbiAgICAgIGN1cnJlbnRQYWdlSW5kZXggPSBOdW1iZXIoY3VycmVudFBhZ2VJbmRleCkgLSAxO1xuICAgICAgdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC5zZXRWYWx1ZShjdXJyZW50UGFnZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBvblVwZGF0ZUFuc3dlcnMobW9kZWw6IFF1ZXN0aW9uQW5zd2VyTW9kZWxbXSkge1xuICAgIG1vZGVsLmZvckVhY2goZWxlbSA9PiB7XG4gICAgICB0aGlzLm9uVXBkYXRlQW5zd2VyKGVsZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25VcGRhdGVBbnN3ZXIobW9kZWw6IFF1ZXN0aW9uQW5zd2VyTW9kZWwpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IG1vZGVsLlF1ZXN0aW9uSWQpO1xuICAgIHZhciBxdWVzdGlvbkdyb3VwID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5jb250cm9sc1tpbmRleF07XG4gICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc1ZhbGlkLnNldFZhbHVlKG1vZGVsLklzVmFsaWQpO1xuXG4gICAgaWYgKHF1ZXN0aW9uR3JvdXAudmFsdWUucXVlc3Rpb25UeXBlID09IHRoaXMucXVlc3Rpb25UeXBlRW51bS5UZXh0SW5wdXQpIHtcbiAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuYW5zd2VyVGV4dC5zZXRWYWx1ZShtb2RlbC5BbnN3ZXIpO1xuICAgIH0gZWxzZSBpZiAocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvblR5cGUgPT0gdGhpcy5xdWVzdGlvblR5cGVFbnVtLkNoZWNrQm94KSB7XG4gICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmFuc3dlcklkQXJyLnNldFZhbHVlKG1vZGVsLkFuc3dlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuYW5zd2VySWQuc2V0VmFsdWUobW9kZWwuQW5zd2VyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mQ3RybHMucnVsZVF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IG1vZGVsLlF1ZXN0aW9uSWQpID4gLTEpIHtcbiAgICAgIHRoaXMuY2hlY2tSdWxlcygpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUXVlc3Rpb25zKHN1cnZleTogU3VydmV5RHRvKSB7XG4gICAgc3VydmV5LnN1cnZleVBhZ2VzLmZvckVhY2goKHBhZ2UsIHBhZ2VJbmRleCkgPT4ge1xuICAgICAgcGFnZS5zdXJ2ZXlRdWVzdGlvbkdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcblxuICAgICAgICBncm91cC5zdXJ2ZXlRdWVzdGlvbnMuZm9yRWFjaChxdWVzdGlvbiA9PiB7XG5cbiAgICAgICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgIT0gNikge1xuICAgICAgICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgICAgICAgIHN1cnZleVBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAgICAgICBxdWVzdGlvbklkOiBbcXVlc3Rpb24ucXVlc3Rpb25JZF0sXG4gICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogW3F1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkXSxcbiAgICAgICAgICAgICAgaXNNYXRyaXhHcm91cDogW2ZhbHNlXSxcbiAgICAgICAgICAgICAgYW5zd2VySWQ6IFtudWxsXSxcbiAgICAgICAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgICAgICAgYW5zd2VyVGV4dDogW251bGxdLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBbcXVlc3Rpb24uaXNSZXF1aXJlZF0sXG4gICAgICAgICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICBpc1Nob3c6IFtxdWVzdGlvbi5pc1Zpc2FibGVdLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgICAgICAgaXNTaG93X2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1Zpc2FibGVdXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgICAgICAgICBzdXJ2ZXlQYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogW3F1ZXN0aW9uLnF1ZXN0aW9uSWRdLFxuICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6IFtxdWVzdGlvbi5xdWVzdGlvblR5cGVJZF0sXG4gICAgICAgICAgICAgIGlzTWF0cml4R3JvdXA6IFt0cnVlXSxcbiAgICAgICAgICAgICAgYW5zd2VySWQ6IFtudWxsXSxcbiAgICAgICAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgICAgICAgYW5zd2VyVGV4dDogW251bGxdLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBbcXVlc3Rpb24uaXNSZXF1aXJlZF0sXG4gICAgICAgICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICBpc1Nob3c6IFtxdWVzdGlvbi5pc1Zpc2FibGVdLFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgICAgICAgaXNTaG93X2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1Zpc2FibGVdLFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXlTdWJRdWVzdGlvbnMuZm9yRWFjaChzdWJRdWVzdGlvbiA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgICAgICAgICAgIHN1cnZleVBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IFtzdWJRdWVzdGlvbi5xdWVzdGlvbklkXSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6IFtzdWJRdWVzdGlvbi5xdWVzdGlvblR5cGVJZF0sXG4gICAgICAgICAgICAgICAgaXNNYXRyaXhHcm91cDogW2ZhbHNlXSxcbiAgICAgICAgICAgICAgICBhbnN3ZXJJZDogW251bGxdLFxuICAgICAgICAgICAgICAgIGFuc3dlcklkQXJyOiBbbnVsbF0sXG4gICAgICAgICAgICAgICAgYW5zd2VyVGV4dDogW251bGxdLFxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ6IFtxdWVzdGlvbi5pc1JlcXVpcmVkXSxcbiAgICAgICAgICAgICAgICBpc1ZhbGlkOiBbbnVsbF0sXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogW3N1YlF1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICAgICAgICAgIGlzU2hvdzogW3N1YlF1ZXN0aW9uLmlzVmlzYWJsZV0sXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZF9kZWZhdWx0OiBbc3ViUXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgICAgICAgaXNTaG93X2RlZmF1bHQ6IFtzdWJRdWVzdGlvbi5pc1Zpc2FibGVdXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzdXJ2ZXkuc3VydmV5UnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgIHJ1bGUucnVsZUV4cHMuZm9yRWFjaChydWxlRXhwID0+IHtcbiAgICAgICAgdGhpcy5mQ3RybHMucnVsZVF1ZXN0aW9uQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxSdWxlUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KHtcbiAgICAgICAgICBxdWVzdGlvbklkOiBydWxlRXhwLnF1ZXN0aW9uSWRcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaGF2ZUluVmFsaWRhdGVRdWVzdGlvbnMoKSB7XG4gICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWU7XG4gICAgdmFyIGludmFsaWRSZWNvcmRzID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maWx0ZXIoeCA9PiB4LnN1cnZleVBhZ2VJbmRleCA9PSBjdXJyZW50UGFnZUluZGV4ICYmIHguaXNWYWxpZCAhPSB0cnVlXG4gICAgICAgJiYgeC5pc0Rpc2FibGVkID09IGZhbHNlICYmIHguaXNTaG93ID09IHRydWUgJiYgeC5pc01hdHJpeEdyb3VwICE9IHRydWUpO1xuICAgIGlmIChpbnZhbGlkUmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAkKGAjc3VydmV5LXBhZ2VfJHtjdXJyZW50UGFnZUluZGV4fWApLmFkZENsYXNzKCdzdXJ2ZXktcGFnZV9zdWJtaXR0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW52YWxpZFJlY29yZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSdWxlcygpIHtcblxuICAgIHRoaXMuc3VydmV5RGF0YS5zdXJ2ZXlSdWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgdGhpcy5fY2hlY2tSdWxlRXhwc1VzZWNhc2UuZXhlY3V0ZSh7XG4gICAgICAgIHJ1bGVFeHBzOiBydWxlLnJ1bGVFeHBzLFxuICAgICAgICBxdWVzdGlvbnM6IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWVcbiAgICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuXG4gICAgICAgIHZhciBpc1Bhc3NlZCA9IHJlc3VsdC5leHByZXN0aW9uUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gZmFsc2UpLmxlbmd0aCA9PSAwO1xuICAgICAgICBpZiAoaXNQYXNzZWQpIHtcblxuICAgICAgICAgIHJ1bGUucnVsZVJlc3VsdFF1ZXN0aW9ucy5mb3JFYWNoKHJlc3VsdFF1ZXN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gcmVzdWx0UXVlc3Rpb24ucXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuYXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHJ1bGUubG9naWNBY3Rpb25JZCA9PSBMb2dpY0FjdGlvbkVudW0uU2hvdykge1xuICAgICAgICAgICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmlzU2hvdy5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5IaWRlKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuaXNTaG93LnNldFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5FbmFibGUpIHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc0Rpc2FibGVkLnNldFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5EaXNhYmxlKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuaXNEaXNhYmxlZC5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5TZXRBbnN3ZXIpIHtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcnVsZS5ydWxlUmVzdWx0UXVlc3Rpb25zLmZvckVhY2gocmVzdWx0UXVlc3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbmRJbmRleCh4ID0+IHgucXVlc3Rpb25JZCA9PSByZXN1bHRRdWVzdGlvbi5xdWVzdGlvbklkKTtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvbkdyb3VwID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5hdChpbmRleCk7XG4gICAgICAgICAgICBxdWVzdGlvbkdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICBpc1Nob3c6IHF1ZXN0aW9uR3JvdXAudmFsdWUuaXNTaG93X2RlZmF1bHQsXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IHF1ZXN0aW9uR3JvdXAudmFsdWUuaXNEaXNhYmxlZF9kZWZhdWx0XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH0pO1xuICB9XG5cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwic3VydmF5LWNhcmRcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdXJ2ZXlQYWdlIG9mIHN1cnZleURhdGE/LnN1cnZleVBhZ2VzOyBsZXQgc3VydmV5UGFnZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgW2F0dHIuaWRdPVwiJ3N1cnZleS1wYWdlXycrc3VydmV5UGFnZUluZGV4XCIgW25nQ2xhc3NdPVwieydkLW5vbmUnOiBzdXJ2ZXlQYWdlSW5kZXggIT0gZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWV9XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1cnZleVBhZ2Uuc3VydmV5UXVlc3Rpb25Hcm91cHNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2YXktZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIHt7aXRlbS5xdWVzdGlvbkdyb3VwTmFtZX19XHJcbiAgICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLXN1Yi10aXRsZSBcIj5cclxuICAgICAgICAgICAgICAgIHt7aXRlbS5xdWVzdGlvbkdyb3VwRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGl0ZW0uc3VydmV5UXVlc3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLkJvb2xlYW5cIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiPjwvbGliLXF1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5UZXh0SW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbaXNUZXh0QXJlYV09XCJxdWVzdGlvbi5pc0FkdmFuY2VUZXh0QXJlYVwiPjwvbGliLXF1ZXN0aW9uLXRleHQtdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLlJhZGlvQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIj48L2xpYi1xdWVzdGlvbi1yYWRpby1idXR0b24tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tZHJvcGRvd24tdGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uRHJvcERvd25cIlxyXG4gICAgICAgICAgICAgICAgW2lzU2hvd109XCIgKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzU2hvd1wiXHJcbiAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCIocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNEaXNhYmxlZFwiPjwvbGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5DaGVja0JveFwiXHJcbiAgICAgICAgICAgICAgICBbaXNTaG93XT1cIiAocXVlc3Rpb258ZmlsdGVyUXVlc3Rpb24gOiBmQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZSkuaXNTaG93XCJcclxuICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cIihxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc0Rpc2FibGVkXCI+PC9saWItcXVlc3Rpb24tY2hlY2stYm94LXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLW1hdHJpeC10ZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIiAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcnMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uTWF0cml4XCJcclxuICAgICAgICAgICAgICAgIFtpc1Nob3ddPVwiIChxdWVzdGlvbnxmaWx0ZXJRdWVzdGlvbiA6IGZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlKS5pc1Nob3dcIlxyXG4gICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiKHF1ZXN0aW9ufGZpbHRlclF1ZXN0aW9uIDogZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUpLmlzRGlzYWJsZWRcIj48L2xpYi1xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkLWZvb3RyXCIgKm5nSWY9XCJzdXJ2ZXlEYXRhICE9IG51bGxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBzdHlsZT1cIiBqdXN0aWZ5LWNvbnRlbnQ6IHN0YXJ0O1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmF5LXBhZ2luYXRpb25cIj5cclxuICAgICAgICA8bmF2IGFyaWEtbGFiZWw9XCJQYWdlIG5hdmlnYXRpb24gZXhhbXBsZVwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gcHJldmlvdXMtcGFnZS1pdGVtIFwiPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJvblBhZ2dpbmdCYWNrKClcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlX19idG4nOmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlID09IDB9XCI+2KfZhNiz2KfYqNmCPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gYWN0aXZlXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VydmV5RGF0YT8uc3VydmV5UGFnZXM7bGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpID09IGZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlfVwiPlxyXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPnt7aSArIDF9fTwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG5leHQtcGFnZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cIm9uUGFnZ2luZ05leHQoKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVfX2J0bic6ZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWUgPT0gKHN1cnZleURhdGEuc3VydmV5UGFnZXMubGVuZ3RoIC0gMSl9XCI+2KfZhNiq2KfZhNmKPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3VzZWNhc2VzL2Jhc2UvdXNlLWNhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ2FzZTxTLCBUPiB7XHJcbiAgZXhlY3V0ZShwYXJhbXM6IFMpOiBPYnNlcnZhYmxlPFQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNhc2VXaXRob3V0T2JzZXJ2PFMsIFQ+IHtcclxuICBleGVjdXRlKHBhcmFtczogUyk6IFQ7XHJcbn0iXX0=