@bnsights/bbsf-controls 1.0.194-beta.9 → 1.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 (159) hide show
  1. package/README.md +1315 -1245
  2. package/fesm2022/bnsights-bbsf-controls.mjs +375 -345
  3. package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
  4. package/lib/Shared/Models/DropdownOptions.d.ts +3 -0
  5. package/lib/Shared/Models/RepeaterOptions.d.ts +2 -0
  6. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +0 -1
  7. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +0 -1
  8. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +1 -1
  9. package/lib/controls/Repeater/repeater/repeater.component.d.ts +7 -0
  10. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +7 -0
  11. package/lib/modules/bbsf-editors.module.d.ts +6 -7
  12. package/package.json +34 -37
  13. package/src/lib/assets/Style.scss +2 -0
  14. package/src/lib/assets/ace-builds/ace.js +1 -1
  15. package/src/lib/assets/ace-builds/mode-markdown.js +1 -1
  16. package/esm2022/bnsights-bbsf-controls.mjs +0 -5
  17. package/esm2022/lib/Shared/Components/app-base-component.mjs +0 -226
  18. package/esm2022/lib/Shared/Components/ng-tag-input.mjs +0 -336
  19. package/esm2022/lib/Shared/Directives/appPreventDoubleClick.directive.mjs +0 -39
  20. package/esm2022/lib/Shared/Directives/template-name.directive.mjs +0 -19
  21. package/esm2022/lib/Shared/Enums/CalendarView.mjs +0 -8
  22. package/esm2022/lib/Shared/Enums/ControlLayout.mjs +0 -6
  23. package/esm2022/lib/Shared/Enums/Countries.mjs +0 -247
  24. package/esm2022/lib/Shared/Enums/Enums.mjs +0 -36
  25. package/esm2022/lib/Shared/Enums/FileType.mjs +0 -29
  26. package/esm2022/lib/Shared/Enums/FilterType.mjs +0 -11
  27. package/esm2022/lib/Shared/Enums/FontSize.mjs +0 -7
  28. package/esm2022/lib/Shared/Enums/ForceDirection.mjs +0 -6
  29. package/esm2022/lib/Shared/Enums/IconPosition.mjs +0 -6
  30. package/esm2022/lib/Shared/Enums/ImageType.mjs +0 -10
  31. package/esm2022/lib/Shared/Enums/InputType.mjs +0 -10
  32. package/esm2022/lib/Shared/Enums/Insert.mjs +0 -9
  33. package/esm2022/lib/Shared/Enums/LanguageMode.mjs +0 -11
  34. package/esm2022/lib/Shared/Enums/LanguageValidation.mjs +0 -6
  35. package/esm2022/lib/Shared/Enums/Markdown.mjs +0 -20
  36. package/esm2022/lib/Shared/Enums/Misc.mjs +0 -7
  37. package/esm2022/lib/Shared/Enums/PagingActionMode.mjs +0 -6
  38. package/esm2022/lib/Shared/Enums/Para.mjs +0 -9
  39. package/esm2022/lib/Shared/Enums/PickerType.mjs +0 -7
  40. package/esm2022/lib/Shared/Enums/SelectMode.mjs +0 -6
  41. package/esm2022/lib/Shared/Enums/StartView.mjs +0 -7
  42. package/esm2022/lib/Shared/Enums/Style.mjs +0 -8
  43. package/esm2022/lib/Shared/Enums/StyleConfirmationMode.mjs +0 -7
  44. package/esm2022/lib/Shared/Enums/TagInputView.mjs +0 -7
  45. package/esm2022/lib/Shared/Enums/ToolbarButtons.mjs +0 -33
  46. package/esm2022/lib/Shared/Enums/map-enums.mjs +0 -15
  47. package/esm2022/lib/Shared/Enums/menu-list-enum.mjs +0 -6
  48. package/esm2022/lib/Shared/Models/Attribute.mjs +0 -3
  49. package/esm2022/lib/Shared/Models/AutocompleteDTO.mjs +0 -8
  50. package/esm2022/lib/Shared/Models/AutocompleteOptions.mjs +0 -39
  51. package/esm2022/lib/Shared/Models/CalendarDTO.mjs +0 -3
  52. package/esm2022/lib/Shared/Models/CalendarEventDTO.mjs +0 -3
  53. package/esm2022/lib/Shared/Models/CalendarOptions.mjs +0 -19
  54. package/esm2022/lib/Shared/Models/CancelDTO.mjs +0 -7
  55. package/esm2022/lib/Shared/Models/CaptchaStyle.mjs +0 -3
  56. package/esm2022/lib/Shared/Models/CheckBoxOptions.mjs +0 -11
  57. package/esm2022/lib/Shared/Models/ConfirmationModalOptions.mjs +0 -39
  58. package/esm2022/lib/Shared/Models/ControlOptionsBase.mjs +0 -17
  59. package/esm2022/lib/Shared/Models/CustomValidation.mjs +0 -14
  60. package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +0 -40
  61. package/esm2022/lib/Shared/Models/DropdownListItem.mjs +0 -3
  62. package/esm2022/lib/Shared/Models/DropdownOptions.mjs +0 -38
  63. package/esm2022/lib/Shared/Models/EditPersonalImage.mjs +0 -7
  64. package/esm2022/lib/Shared/Models/EnglishArabicDTO.mjs +0 -10
  65. package/esm2022/lib/Shared/Models/FileDTO.mjs +0 -24
  66. package/esm2022/lib/Shared/Models/FileOptions.mjs +0 -15
  67. package/esm2022/lib/Shared/Models/FileUploadModel.mjs +0 -3
  68. package/esm2022/lib/Shared/Models/FileUploadOptions.mjs +0 -13
  69. package/esm2022/lib/Shared/Models/FilterItem.mjs +0 -8
  70. package/esm2022/lib/Shared/Models/FormOptions.mjs +0 -32
  71. package/esm2022/lib/Shared/Models/HtmlEditorOptions.mjs +0 -12
  72. package/esm2022/lib/Shared/Models/ImageUploadOptions.mjs +0 -14
  73. package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +0 -12
  74. package/esm2022/lib/Shared/Models/MapAutocompleteDTO.mjs +0 -6
  75. package/esm2022/lib/Shared/Models/MarkdownEditorOptions.mjs +0 -24
  76. package/esm2022/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +0 -9
  77. package/esm2022/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +0 -9
  78. package/esm2022/lib/Shared/Models/MultiLingualTextBoxOptions.mjs +0 -17
  79. package/esm2022/lib/Shared/Models/MultilingualControlOptionsBase.mjs +0 -21
  80. package/esm2022/lib/Shared/Models/MultipleFileUploadModel.mjs +0 -9
  81. package/esm2022/lib/Shared/Models/PagingDTO.mjs +0 -13
  82. package/esm2022/lib/Shared/Models/PagingOptions.mjs +0 -49
  83. package/esm2022/lib/Shared/Models/PagingPayload.mjs +0 -3
  84. package/esm2022/lib/Shared/Models/PhoneOptions.mjs +0 -16
  85. package/esm2022/lib/Shared/Models/ProfileImageUploadOptions.mjs +0 -11
  86. package/esm2022/lib/Shared/Models/ProfilePictureDTO.mjs +0 -3
  87. package/esm2022/lib/Shared/Models/RadioButtonItem.mjs +0 -3
  88. package/esm2022/lib/Shared/Models/RadioButtonOptions.mjs +0 -7
  89. package/esm2022/lib/Shared/Models/RangeNumber.mjs +0 -3
  90. package/esm2022/lib/Shared/Models/Recaptcha.mjs +0 -6
  91. package/esm2022/lib/Shared/Models/RecaptchaOptions.mjs +0 -22
  92. package/esm2022/lib/Shared/Models/RepeaterField.mjs +0 -3
  93. package/esm2022/lib/Shared/Models/RepeaterOptions.mjs +0 -14
  94. package/esm2022/lib/Shared/Models/SaveDTO.mjs +0 -7
  95. package/esm2022/lib/Shared/Models/TagsInputDTO.mjs +0 -3
  96. package/esm2022/lib/Shared/Models/TagsInputOptions.mjs +0 -56
  97. package/esm2022/lib/Shared/Models/TextAreaOptions.mjs +0 -19
  98. package/esm2022/lib/Shared/Models/TextBoxOptions.mjs +0 -27
  99. package/esm2022/lib/Shared/Models/ToggleSlideOptions.mjs +0 -9
  100. package/esm2022/lib/Shared/Models/UploadPersonalImage.mjs +0 -7
  101. package/esm2022/lib/Shared/Models/bread-crumb.mjs +0 -8
  102. package/esm2022/lib/Shared/Models/control-filter-Item.mjs +0 -6
  103. package/esm2022/lib/Shared/Models/filter-options.mjs +0 -9
  104. package/esm2022/lib/Shared/Models/index.mjs +0 -58
  105. package/esm2022/lib/Shared/Models/page-header-options.mjs +0 -78
  106. package/esm2022/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +0 -22
  107. package/esm2022/lib/Shared/Pipes/bbsf-date.pipe.mjs +0 -22
  108. package/esm2022/lib/Shared/config/environment.mjs +0 -12
  109. package/esm2022/lib/Shared/default_intl.mjs +0 -29
  110. package/esm2022/lib/Shared/services/ControlUtility.mjs +0 -162
  111. package/esm2022/lib/Shared/services/GlobalSettings.service.mjs +0 -30
  112. package/esm2022/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
  113. package/esm2022/lib/Shared/services/file-upload.service.mjs +0 -29
  114. package/esm2022/lib/Shared/services/index.mjs +0 -7
  115. package/esm2022/lib/Shared/services/render-component-service.service.mjs +0 -32
  116. package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +0 -125
  117. package/esm2022/lib/Shared/utils/date-formatter.mjs +0 -48
  118. package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -299
  119. package/esm2022/lib/controls/Calendar/Calendar.component.mjs +0 -179
  120. package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +0 -121
  121. package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +0 -143
  122. package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -240
  123. package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +0 -296
  124. package/esm2022/lib/controls/FileUpload/FileUpload.component.mjs +0 -741
  125. package/esm2022/lib/controls/Form/Form.component.mjs +0 -117
  126. package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -185
  127. package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -360
  128. package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -502
  129. package/esm2022/lib/controls/MarkdownEditor/markdown-editor.component.mjs +0 -243
  130. package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -456
  131. package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -441
  132. package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -500
  133. package/esm2022/lib/controls/Paging/JwPagination.component.mjs +0 -160
  134. package/esm2022/lib/controls/Paging/Paging.component.mjs +0 -626
  135. package/esm2022/lib/controls/Phone/Phone.component.mjs +0 -134
  136. package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -390
  137. package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +0 -113
  138. package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +0 -134
  139. package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +0 -135
  140. package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +0 -1291
  141. package/esm2022/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +0 -22
  142. package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +0 -118
  143. package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +0 -308
  144. package/esm2022/lib/controls/TextArea/TextArea.component.mjs +0 -581
  145. package/esm2022/lib/controls/TextBox/TextBox.component.mjs +0 -357
  146. package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +0 -96
  147. package/esm2022/lib/controls/bbsf-controls.module.mjs +0 -92
  148. package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +0 -42
  149. package/esm2022/lib/modules/bbsf-core.module.mjs +0 -210
  150. package/esm2022/lib/modules/bbsf-datetime.module.mjs +0 -90
  151. package/esm2022/lib/modules/bbsf-dropdown.module.mjs +0 -57
  152. package/esm2022/lib/modules/bbsf-editors.module.mjs +0 -97
  153. package/esm2022/lib/modules/bbsf-forms-basic.module.mjs +0 -79
  154. package/esm2022/lib/modules/bbsf-multilingual.module.mjs +0 -60
  155. package/esm2022/lib/modules/bbsf-phone.module.mjs +0 -57
  156. package/esm2022/lib/modules/bbsf-specialized.module.mjs +0 -160
  157. package/esm2022/lib/modules/bbsf-uploads.module.mjs +0 -106
  158. package/esm2022/lib/modules/bbsf-utility.module.mjs +0 -103
  159. package/esm2022/public-api.mjs +0 -169
@@ -1,1291 +0,0 @@
1
- import { Component, Input, ViewChild, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
- import { DataType } from '../../../Shared/Enums/Enums';
5
- import { InputType } from '../../../Shared/Enums/InputType';
6
- import { PickerType } from '../../../Shared/Enums/PickerType';
7
- import { SelectMode } from '../../../Shared/Enums/SelectMode';
8
- import { StartView } from '../../../Shared/Enums/StartView';
9
- import { DatePickerOptions } from '../../../Shared/Models/DatePickerOptions';
10
- import { DropdownOptions } from '../../../Shared/Models/DropdownOptions';
11
- import { FileUploadOptions } from '../../../Shared/Models/FileUploadOptions';
12
- import { HtmlEditorOptions } from '../../../Shared/Models/HtmlEditorOptions';
13
- import { ImageUploadOptions } from '../../../Shared/Models/ImageUploadOptions';
14
- import { MapAutoCompleteOptions } from '../../../Shared/Models/MapAutoCompleteOptions';
15
- import { PhoneOptions } from '../../../Shared/Models/PhoneOptions';
16
- import { RangeNumber } from '../../../Shared/Models/RangeNumber';
17
- import { TextAreaOptions } from '../../../Shared/Models/TextAreaOptions';
18
- import { TextBoxOptions } from '../../../Shared/Models/TextBoxOptions';
19
- import { ToggleSlideOptions } from '../../../Shared/Models/ToggleSlideOptions';
20
- import { DateInputComponent } from '../../DateTimePicker/DateTimePicker.component';
21
- import { DropdownListComponent } from '../../DropdownList/DropdownList.component';
22
- import { FileUploadComponent } from '../../FileUpload/FileUpload.component';
23
- import { HtmlEditorComponent } from '../../HtmlEditor/HtmlEditor.component';
24
- import { ImageUploaderComponent } from '../../ImageUpload/ImageUpload.component';
25
- import { MapAutoCompleteComponent } from '../../MapAutoComplete/MapAutoComplete.component';
26
- import { PhoneComponent } from '../../Phone/Phone.component';
27
- import { TextAreaComponent } from '../../TextArea/TextArea.component';
28
- import { TextboxComponent } from '../../TextBox/TextBox.component';
29
- import { ToggleslideComponent } from '../../Toggleslide/Toggleslide.component';
30
- import { CheckBoxOptions } from '../../../Shared/Models/CheckBoxOptions';
31
- import { CheckBoxComponent } from '../../CheckBox/CheckBox.component';
32
- import * as i0 from "@angular/core";
33
- import * as i1 from "../../../Shared/services/render-component-service.service";
34
- import * as i2 from "@angular/forms";
35
- export class RepeaterFieldBuilderComponent {
36
- constructor(renderComponentService, textControlHost) {
37
- this.renderComponentService = renderComponentService;
38
- this.textControlHost = textControlHost;
39
- this.itemsValue = [];
40
- this.itemValue = null;
41
- }
42
- ngOnInit() { }
43
- ngAfterViewInit() {
44
- setTimeout(() => {
45
- if (this.itemsValue.length > 0)
46
- this.itemValue = this.itemsValue[this.itemNumber];
47
- if (this.itemValue) {
48
- for (const key in this.itemValue) {
49
- if (Object.prototype.hasOwnProperty.call(this.itemValue, key) &&
50
- key == this.repeaterField.controlOptions.name) {
51
- const element = this.itemValue[key];
52
- this.value = element;
53
- }
54
- }
55
- }
56
- this.item.clear();
57
- switch (this.repeaterField?.controlType) {
58
- //#region TextBox
59
- case DataType.Text:
60
- let Text = new TextBoxOptions();
61
- Text.name =
62
- this.repeaterField.controlOptions.name +
63
- '.' +
64
- this.itemNumber.toString() +
65
- '.' +
66
- this.controlNumber.toString();
67
- Text.hideLabel = this.repeaterField.controlOptions.hideLabel;
68
- Text.labelKey = this.repeaterField.controlOptions.labelKey;
69
- Text.isRequired = this.repeaterField.controlOptions.isRequired;
70
- Text.viewType = this.repeaterField.controlOptions.viewType;
71
- Text.labelDescription = this.repeaterField.controlOptions.labelDescription
72
- ? this.repeaterField.controlOptions.labelDescription
73
- : '';
74
- Text.type = InputType.Text;
75
- Text.languageValidation = this.repeaterField.controlOptions.languageValidation;
76
- if (this.repeaterField.controlOptions.maxLength)
77
- Text.maxLength = this.repeaterField.controlOptions.maxLength;
78
- if (this.repeaterField.controlOptions.minLength)
79
- Text.minLength = this.repeaterField.controlOptions.minLength;
80
- Text.value = this.value;
81
- Text.isReadonly = this.repeaterField.controlOptions.isReadonly;
82
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
83
- Text.customValidation = this.repeaterField.controlOptions.customValidation;
84
- }
85
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, Text);
86
- break;
87
- case DataType.Name:
88
- let name = new TextBoxOptions();
89
- name.name =
90
- this.repeaterField.controlOptions.name +
91
- '.' +
92
- this.itemNumber.toString() +
93
- '.' +
94
- this.controlNumber.toString();
95
- name.hideLabel = this.repeaterField.controlOptions.hideLabel;
96
- name.labelKey = this.repeaterField.controlOptions.labelKey;
97
- name.isRequired = this.repeaterField.controlOptions.isRequired;
98
- name.viewType = this.repeaterField.controlOptions.viewType;
99
- name.languageValidation = this.repeaterField.controlOptions.languageValidation;
100
- name.labelDescription = this.repeaterField.controlOptions.labelDescription
101
- ? this.repeaterField.controlOptions.labelDescription
102
- : '';
103
- if (this.repeaterField.controlOptions.maxLength)
104
- name.maxLength = this.repeaterField.controlOptions.maxLength;
105
- if (this.repeaterField.controlOptions.minLength)
106
- name.minLength = this.repeaterField.controlOptions.minLength;
107
- name.type = InputType.Text;
108
- name.value = this.value;
109
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
110
- name.customValidation = this.repeaterField.controlOptions.customValidation;
111
- }
112
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, name);
113
- break;
114
- case DataType.Email:
115
- let email = new TextBoxOptions();
116
- email.name =
117
- this.repeaterField.controlOptions.name +
118
- '.' +
119
- this.itemNumber.toString() +
120
- '.' +
121
- this.controlNumber.toString();
122
- email.hideLabel = this.repeaterField.controlOptions.hideLabel;
123
- email.labelKey = this.repeaterField.controlOptions.labelKey;
124
- email.isRequired = this.repeaterField.controlOptions.isRequired;
125
- email.viewType = this.repeaterField.controlOptions.viewType;
126
- email.languageValidation = this.repeaterField.controlOptions.languageValidation;
127
- email.labelDescription = this.repeaterField.controlOptions.labelDescription
128
- ? this.repeaterField.controlOptions.labelDescription
129
- : '';
130
- email.type = InputType.Email;
131
- email.value = this.value;
132
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
133
- email.customValidation = this.repeaterField.controlOptions.customValidation;
134
- }
135
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, email);
136
- break;
137
- case DataType.Number:
138
- let number = new TextBoxOptions();
139
- number.name =
140
- this.repeaterField.controlOptions.name +
141
- '.' +
142
- this.itemNumber.toString() +
143
- '.' +
144
- this.controlNumber.toString();
145
- number.hideLabel = this.repeaterField.controlOptions.hideLabel;
146
- number.labelKey = this.repeaterField.controlOptions.labelKey;
147
- number.isRequired = this.repeaterField.controlOptions.isRequired;
148
- number.viewType = this.repeaterField.controlOptions.viewType;
149
- number.languageValidation = this.repeaterField.controlOptions.languageValidation;
150
- number.labelDescription = this.repeaterField.controlOptions.labelDescription
151
- ? this.repeaterField.controlOptions.labelDescription
152
- : '';
153
- number.type = InputType.Number;
154
- let rangeNumber = new RangeNumber();
155
- if (this.repeaterField.controlOptions.numberRange) {
156
- rangeNumber.to = this.repeaterField.controlOptions.numberRange.to;
157
- rangeNumber.from = this.repeaterField.controlOptions.numberRange.from;
158
- }
159
- number.numberRange = rangeNumber;
160
- number.value = this.value;
161
- number.isReadonly = this.repeaterField.controlOptions.isReadonly;
162
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
163
- number.customValidation = this.repeaterField.controlOptions.customValidation;
164
- }
165
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, number);
166
- break;
167
- case DataType.URL:
168
- let url = new TextBoxOptions();
169
- url.name = `${this.repeaterField.controlOptions.name}.${this.itemNumber}.${this.controlNumber}`;
170
- url.hideLabel = this.repeaterField.controlOptions.hideLabel;
171
- url.labelKey = this.repeaterField.controlOptions.labelKey;
172
- url.isRequired = this.repeaterField.controlOptions.isRequired;
173
- url.viewType = this.repeaterField.controlOptions.viewType;
174
- url.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : '';
175
- url.type = InputType.URL;
176
- url.value = this.value;
177
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, url);
178
- break;
179
- //#endregion
180
- //#region DateTime
181
- case DataType.Date:
182
- let date = new DatePickerOptions();
183
- date.name =
184
- this.repeaterField.controlOptions.name +
185
- '.' +
186
- this.itemNumber.toString() +
187
- '.' +
188
- this.controlNumber.toString();
189
- date.hideLabel = this.repeaterField.controlOptions.hideLabel;
190
- date.labelKey = this.repeaterField.controlOptions.labelKey;
191
- date.isRequired = this.repeaterField.controlOptions.isRequired;
192
- date.viewType = this.repeaterField.controlOptions.viewType;
193
- date.labelDescription = this.repeaterField.controlOptions.labelDescription
194
- ? this.repeaterField.controlOptions.labelDescription
195
- : '';
196
- date.pickerType = PickerType.Calendar;
197
- date.selectMode = SelectMode.Single;
198
- date.startView = StartView.Month;
199
- date.value = this.value;
200
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
201
- date.customValidation = this.repeaterField.controlOptions.customValidation;
202
- }
203
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, date);
204
- break;
205
- case DataType.DateTime:
206
- let dateTime = new DatePickerOptions();
207
- dateTime.name =
208
- this.repeaterField.controlOptions.name +
209
- '.' +
210
- this.itemNumber.toString() +
211
- '.' +
212
- this.controlNumber.toString();
213
- dateTime.hideLabel = this.repeaterField.controlOptions.hideLabel;
214
- dateTime.labelKey = this.repeaterField.controlOptions.labelKey;
215
- dateTime.isRequired = this.repeaterField.controlOptions.isRequired;
216
- dateTime.viewType = this.repeaterField.controlOptions.viewType;
217
- dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription
218
- ? this.repeaterField.controlOptions.labelDescription
219
- : '';
220
- dateTime.pickerType = PickerType.Both;
221
- dateTime.selectMode = SelectMode.Single;
222
- dateTime.startView = StartView.Month;
223
- dateTime.value = this.value;
224
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
225
- dateTime.customValidation = this.repeaterField.controlOptions.customValidation;
226
- }
227
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, dateTime);
228
- break;
229
- case DataType.Time:
230
- let time = new DatePickerOptions();
231
- time.name =
232
- this.repeaterField.controlOptions.name +
233
- '.' +
234
- this.itemNumber.toString() +
235
- '.' +
236
- this.controlNumber.toString();
237
- time.hideLabel = this.repeaterField.controlOptions.hideLabel;
238
- time.labelKey = this.repeaterField.controlOptions.labelKey;
239
- time.isRequired = this.repeaterField.controlOptions.isRequired;
240
- time.viewType = this.repeaterField.controlOptions.viewType;
241
- time.labelDescription = this.repeaterField.controlOptions.labelDescription
242
- ? this.repeaterField.controlOptions.labelDescription
243
- : '';
244
- time.pickerType = PickerType.Timer;
245
- time.selectMode = SelectMode.Single;
246
- time.startView = StartView.Month;
247
- time.value = this.value;
248
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
249
- time.customValidation = this.repeaterField.controlOptions.customValidation;
250
- }
251
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, time);
252
- break;
253
- //#endregion
254
- //#region Dropdown
255
- case DataType.SingleSelect:
256
- let singleSelect = new DropdownOptions();
257
- singleSelect.name =
258
- this.repeaterField.controlOptions.name +
259
- '.' +
260
- this.itemNumber.toString() +
261
- '.' +
262
- this.controlNumber.toString();
263
- singleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
264
- singleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
265
- singleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
266
- singleSelect.viewType = this.repeaterField.controlOptions.viewType;
267
- singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
268
- ? this.repeaterField.controlOptions.labelDescription
269
- : '';
270
- singleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
271
- singleSelect.singleSelection = true;
272
- singleSelect.showCheckbox = false;
273
- singleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
274
- singleSelect.selectedItems = this.value;
275
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
276
- singleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
277
- }
278
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, singleSelect);
279
- break;
280
- case DataType.MulipleSelect:
281
- let mulipleSelect = new DropdownOptions();
282
- mulipleSelect.name =
283
- this.repeaterField.controlOptions.name +
284
- '.' +
285
- this.itemNumber.toString() +
286
- '.' +
287
- this.controlNumber.toString();
288
- mulipleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
289
- mulipleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
290
- mulipleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
291
- mulipleSelect.viewType = this.repeaterField.controlOptions.viewType;
292
- mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
293
- ? this.repeaterField.controlOptions.labelDescription
294
- : '';
295
- mulipleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
296
- mulipleSelect.singleSelection = false;
297
- mulipleSelect.showCheckbox = false;
298
- mulipleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
299
- mulipleSelect.selectedItems = this.value;
300
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
301
- mulipleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
302
- }
303
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, mulipleSelect);
304
- break;
305
- case DataType.Goal:
306
- let goal = new DropdownOptions();
307
- goal.name =
308
- this.repeaterField.controlOptions.name +
309
- '.' +
310
- this.itemNumber.toString() +
311
- '.' +
312
- this.controlNumber.toString();
313
- goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
314
- goal.labelKey = this.repeaterField.controlOptions.labelKey;
315
- goal.isRequired = this.repeaterField.controlOptions.isRequired;
316
- goal.viewType = this.repeaterField.controlOptions.viewType;
317
- goal.labelDescription = this.repeaterField.controlOptions.labelDescription
318
- ? this.repeaterField.controlOptions.labelDescription
319
- : '';
320
- goal.dataSource = this.repeaterField.controlOptions.dataSource;
321
- goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
322
- goal.showCheckbox = false;
323
- goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
324
- goal.selectedItems = this.value;
325
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
326
- goal.customValidation = this.repeaterField.controlOptions.customValidation;
327
- }
328
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, goal);
329
- break;
330
- case DataType.Challenge:
331
- let challenge = new DropdownOptions();
332
- challenge.name =
333
- this.repeaterField.controlOptions.name +
334
- '.' +
335
- this.itemNumber.toString() +
336
- '.' +
337
- this.controlNumber.toString();
338
- challenge.hideLabel = this.repeaterField.controlOptions.hideLabel;
339
- challenge.labelKey = this.repeaterField.controlOptions.labelKey;
340
- challenge.isRequired = this.repeaterField.controlOptions.isRequired;
341
- challenge.viewType = this.repeaterField.controlOptions.viewType;
342
- challenge.labelDescription = this.repeaterField.controlOptions.labelDescription
343
- ? this.repeaterField.controlOptions.labelDescription
344
- : '';
345
- challenge.dataSource = this.repeaterField.controlOptions.dataSource;
346
- challenge.dataSource = this.repeaterField.controlOptions.dataSource;
347
- challenge.singleSelection = !this.repeaterField.controlOptions.isMultiple;
348
- challenge.showCheckbox = false;
349
- challenge.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
350
- challenge.selectedItems = this.value;
351
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
352
- challenge.customValidation = this.repeaterField.controlOptions.customValidation;
353
- }
354
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, challenge);
355
- break;
356
- case DataType.InnovationLab:
357
- let innovationLab = new DropdownOptions();
358
- innovationLab.name =
359
- this.repeaterField.controlOptions.name +
360
- '.' +
361
- this.itemNumber.toString() +
362
- '.' +
363
- this.controlNumber.toString();
364
- innovationLab.hideLabel = this.repeaterField.controlOptions.hideLabel;
365
- innovationLab.labelKey = this.repeaterField.controlOptions.labelKey;
366
- innovationLab.isRequired = this.repeaterField.controlOptions.isRequired;
367
- innovationLab.viewType = this.repeaterField.controlOptions.viewType;
368
- innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription
369
- ? this.repeaterField.controlOptions.labelDescription
370
- : '';
371
- innovationLab.dataSource = this.repeaterField.controlOptions.dataSource;
372
- innovationLab.singleSelection = !this.repeaterField.controlOptions.isMultiple;
373
- innovationLab.showCheckbox = false;
374
- innovationLab.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
375
- innovationLab.selectedItems = this.value;
376
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
377
- innovationLab.customValidation = this.repeaterField.controlOptions.customValidation;
378
- }
379
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, innovationLab);
380
- break;
381
- case DataType.Country:
382
- let country = new DropdownOptions();
383
- country.name =
384
- this.repeaterField.controlOptions.name +
385
- '.' +
386
- this.itemNumber.toString() +
387
- '.' +
388
- this.controlNumber.toString();
389
- country.hideLabel = this.repeaterField.controlOptions.hideLabel;
390
- country.labelKey = this.repeaterField.controlOptions.labelKey;
391
- country.isRequired = this.repeaterField.controlOptions.isRequired;
392
- country.viewType = this.repeaterField.controlOptions.viewType;
393
- country.labelDescription = this.repeaterField.controlOptions.labelDescription
394
- ? this.repeaterField.controlOptions.labelDescription
395
- : '';
396
- country.dataSource = this.repeaterField.controlOptions.dataSource;
397
- country.singleSelection = !this.repeaterField.controlOptions.isMultiple;
398
- country.showCheckbox = false;
399
- country.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
400
- country.selectedItems = this.value;
401
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
402
- country.customValidation = this.repeaterField.controlOptions.customValidation;
403
- }
404
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, country);
405
- break;
406
- //#endregion
407
- //#region FileUpload
408
- case DataType.File:
409
- let file = new FileUploadOptions();
410
- file.name =
411
- this.repeaterField.controlOptions.name +
412
- '.' +
413
- this.itemNumber.toString() +
414
- '.' +
415
- this.controlNumber.toString();
416
- file.hideLabel = this.repeaterField.controlOptions.hideLabel;
417
- file.labelKey = this.repeaterField.controlOptions.labelKey;
418
- file.isRequired = this.repeaterField.controlOptions.isRequired;
419
- file.viewType = this.repeaterField.controlOptions.viewType;
420
- file.labelDescription = this.repeaterField.controlOptions.labelDescription
421
- ? this.repeaterField.controlOptions.labelDescription
422
- : '';
423
- file.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
424
- file.value = this.value;
425
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
426
- file.customValidation = this.repeaterField.controlOptions.customValidation;
427
- }
428
- this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, file);
429
- break;
430
- case DataType.MultiFile:
431
- let multiFile = new FileUploadOptions();
432
- file.name =
433
- this.repeaterField.controlOptions.name +
434
- '.' +
435
- this.itemNumber.toString() +
436
- '.' +
437
- this.controlNumber.toString();
438
- file.hideLabel = this.repeaterField.controlOptions.hideLabel;
439
- file.labelKey = this.repeaterField.controlOptions.labelKey;
440
- file.isRequired = this.repeaterField.controlOptions.isRequired;
441
- file.viewType = this.repeaterField.controlOptions.viewType;
442
- file.labelDescription = this.repeaterField.controlOptions.labelDescription
443
- ? this.repeaterField.controlOptions.labelDescription
444
- : '';
445
- multiFile.maxSizeForAllFilesInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
446
- multiFile.maxNoOfFiles = this.repeaterField.controlOptions.maxFileCount;
447
- multiFile.isMultipleFile = true;
448
- multiFile.value = this.value;
449
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
450
- multiFile.customValidation = this.repeaterField.controlOptions.customValidation;
451
- }
452
- this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, multiFile);
453
- break;
454
- //#endregion
455
- //#region ImageUpload
456
- case DataType.Image:
457
- let image = new ImageUploadOptions();
458
- image.name =
459
- this.repeaterField.controlOptions.name +
460
- '.' +
461
- this.itemNumber.toString() +
462
- '.' +
463
- this.controlNumber.toString();
464
- image.hideLabel = this.repeaterField.controlOptions.hideLabel;
465
- image.labelKey = this.repeaterField.controlOptions.labelKey;
466
- image.isRequired = this.repeaterField.controlOptions.isRequired;
467
- image.viewType = this.repeaterField.controlOptions.viewType;
468
- image.labelDescription = this.repeaterField.controlOptions.labelDescription
469
- ? this.repeaterField.controlOptions.labelDescription
470
- : '';
471
- if (this.repeaterField.controlOptions.maxFileSizeInMB)
472
- image.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
473
- image.value = this.value;
474
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
475
- image.customValidation = this.repeaterField.controlOptions.customValidation;
476
- }
477
- this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, image);
478
- break;
479
- case DataType.CoverPhoto:
480
- let coverPhoto = new ImageUploadOptions();
481
- coverPhoto.name =
482
- this.repeaterField.controlOptions.name +
483
- '.' +
484
- this.itemNumber.toString() +
485
- '.' +
486
- this.controlNumber.toString();
487
- coverPhoto.hideLabel = this.repeaterField.controlOptions.hideLabel;
488
- coverPhoto.labelKey = this.repeaterField.controlOptions.labelKey;
489
- coverPhoto.isRequired = this.repeaterField.controlOptions.isRequired;
490
- coverPhoto.viewType = this.repeaterField.controlOptions.viewType;
491
- coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription
492
- ? this.repeaterField.controlOptions.labelDescription
493
- : '';
494
- if (this.repeaterField.controlOptions.maxFileSizeInMB)
495
- coverPhoto.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
496
- coverPhoto.value = this.value;
497
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
498
- coverPhoto.customValidation = this.repeaterField.controlOptions.customValidation;
499
- }
500
- this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, coverPhoto);
501
- break;
502
- //#endregion
503
- //#region Mobile
504
- case DataType.Mobile:
505
- let mobile = new PhoneOptions();
506
- mobile.name =
507
- this.repeaterField.controlOptions.name +
508
- '.' +
509
- this.itemNumber.toString() +
510
- '.' +
511
- this.controlNumber.toString();
512
- mobile.hideLabel = this.repeaterField.controlOptions.hideLabel;
513
- mobile.labelKey = this.repeaterField.controlOptions.labelKey;
514
- mobile.isRequired = this.repeaterField.controlOptions.isRequired;
515
- mobile.viewType = this.repeaterField.controlOptions.viewType;
516
- mobile.labelDescription = this.repeaterField.controlOptions.labelDescription
517
- ? this.repeaterField.controlOptions.labelDescription
518
- : '';
519
- mobile.allowSearch = true;
520
- mobile.phoneValidation = true;
521
- mobile.selectFirstCountry = true;
522
- mobile.enablePlaceholder = true;
523
- mobile.value = this.value;
524
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
525
- mobile.customValidation = this.repeaterField.controlOptions.customValidation;
526
- }
527
- this.renderComponentService.renderDynamicComponent(this.item, PhoneComponent, this.group, mobile);
528
- break;
529
- //#endregion
530
- //#region MultilineText
531
- case DataType.MultilineText:
532
- let multilineText = new TextAreaOptions();
533
- multilineText.name =
534
- this.repeaterField.controlOptions.name +
535
- '.' +
536
- this.itemNumber.toString() +
537
- '.' +
538
- this.controlNumber.toString();
539
- multilineText.hideLabel = this.repeaterField.controlOptions.hideLabel;
540
- multilineText.labelKey = this.repeaterField.controlOptions.labelKey;
541
- multilineText.isRequired = this.repeaterField.controlOptions.isRequired;
542
- multilineText.viewType = this.repeaterField.controlOptions.viewType;
543
- multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription
544
- ? this.repeaterField.controlOptions.labelDescription
545
- : '';
546
- if (this.repeaterField.controlOptions.maxLength)
547
- multilineText.maxLength = this.repeaterField.controlOptions.maxLength;
548
- if (this.repeaterField.controlOptions.minLength)
549
- multilineText.minLength = this.repeaterField.controlOptions.minLength;
550
- multilineText.rows = this.repeaterField.controlOptions.rows;
551
- multilineText.forceDirection = this.repeaterField.controlOptions.forceDirection;
552
- multilineText.value = this.value;
553
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
554
- multilineText.customValidation = this.repeaterField.controlOptions.customValidation;
555
- }
556
- this.renderComponentService.renderDynamicComponent(this.item, TextAreaComponent, this.group, multilineText);
557
- break;
558
- //#endregion
559
- //#region HTML
560
- case DataType.HTML:
561
- let html = new HtmlEditorOptions();
562
- html.name =
563
- this.repeaterField.controlOptions.name +
564
- '.' +
565
- this.itemNumber.toString() +
566
- '.' +
567
- this.controlNumber.toString();
568
- html.hideLabel = this.repeaterField.controlOptions.hideLabel;
569
- html.labelKey = this.repeaterField.controlOptions.labelKey;
570
- html.isRequired = this.repeaterField.controlOptions.isRequired;
571
- html.viewType = this.repeaterField.controlOptions.viewType;
572
- html.labelDescription = this.repeaterField.controlOptions.labelDescription
573
- ? this.repeaterField.controlOptions.labelDescription
574
- : '';
575
- if (this.repeaterField.controlOptions.maxLength)
576
- html.maxLength = this.repeaterField.controlOptions.maxLength;
577
- if (this.repeaterField.controlOptions.minLength)
578
- html.minLength = this.repeaterField.controlOptions.minLength;
579
- html.height = this.repeaterField.controlOptions.rows;
580
- html.forceDirection = this.repeaterField.controlOptions.forceDirection;
581
- html.value = this.value;
582
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
583
- html.customValidation = this.repeaterField.controlOptions.customValidation;
584
- }
585
- this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, html);
586
- break;
587
- //#endregion
588
- //#region Boolean
589
- case DataType.Boolean:
590
- let boolean = new ToggleSlideOptions();
591
- boolean.name =
592
- this.repeaterField.controlOptions.name +
593
- '.' +
594
- this.itemNumber.toString() +
595
- '.' +
596
- this.controlNumber.toString();
597
- boolean.hideLabel = this.repeaterField.controlOptions.hideLabel;
598
- boolean.labelKey = this.repeaterField.controlOptions.labelKey;
599
- boolean.viewType = this.repeaterField.controlOptions.viewType;
600
- boolean.value = this.value;
601
- boolean.labelDescription = this.repeaterField.controlOptions.labelDescription
602
- ? this.repeaterField.controlOptions.labelDescription
603
- : '';
604
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
605
- boolean.customValidation = this.repeaterField.controlOptions.customValidation;
606
- }
607
- this.renderComponentService.renderDynamicComponent(this.item, ToggleslideComponent, this.group, boolean);
608
- break;
609
- //#endregion
610
- //#region Location
611
- case DataType.Location:
612
- let location = new MapAutoCompleteOptions();
613
- location.name =
614
- this.repeaterField.controlOptions.name +
615
- '.' +
616
- this.itemNumber.toString() +
617
- '.' +
618
- this.controlNumber.toString();
619
- location.hideLabel = this.repeaterField.controlOptions.hideLabel;
620
- location.labelKey = this.repeaterField.controlOptions.labelKey;
621
- location.isRequired = this.repeaterField.controlOptions.isRequired;
622
- location.viewType = this.repeaterField.controlOptions.viewType;
623
- location.value = this.value;
624
- location.labelDescription = this.repeaterField.controlOptions.labelDescription
625
- ? this.repeaterField.controlOptions.labelDescription
626
- : '';
627
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
628
- location.customValidation = this.repeaterField.controlOptions.customValidation;
629
- }
630
- this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, location);
631
- break;
632
- //#endregion
633
- //#region CheckBox
634
- case DataType.CheckBox:
635
- let checkBox = new CheckBoxOptions();
636
- checkBox.name =
637
- this.repeaterField.controlOptions.name +
638
- '.' +
639
- this.itemNumber.toString() +
640
- '.' +
641
- this.controlNumber.toString();
642
- checkBox.hideLabel = this.repeaterField.controlOptions.hideLabel;
643
- checkBox.labelKey = this.repeaterField.controlOptions.labelKey;
644
- checkBox.viewType = this.repeaterField.controlOptions.viewType;
645
- checkBox.outputFunction = this.repeaterField.controlOptions.outputFunction;
646
- checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription
647
- ? this.repeaterField.controlOptions.labelDescription
648
- : '';
649
- checkBox.value = this.value;
650
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
651
- checkBox.customValidation = this.repeaterField.controlOptions.customValidation;
652
- }
653
- this.renderComponentService.renderDynamicComponent(this.item, CheckBoxComponent, this.group, checkBox);
654
- break;
655
- //#endregion
656
- default:
657
- break;
658
- }
659
- }, 0);
660
- }
661
- ngOnChanges(changes) {
662
- if (changes.itemNumber)
663
- if (changes.itemNumber.previousValue) {
664
- let name = this.repeaterField.controlOptions.name +
665
- '.' +
666
- changes.itemNumber.previousValue.toString() +
667
- '.' +
668
- this.controlNumber.toString();
669
- let value = this.group.controls[name].value;
670
- this.item.clear();
671
- this.group.removeControl(name);
672
- switch (this.repeaterField.controlType) {
673
- //#region TextBox
674
- case DataType.Text:
675
- let text = new TextBoxOptions();
676
- text.name =
677
- this.repeaterField.controlOptions.name +
678
- '.' +
679
- changes.itemNumber.currentValue +
680
- '.' +
681
- this.controlNumber.toString();
682
- text.hideLabel = this.repeaterField.controlOptions.hideLabel;
683
- text.labelKey = this.repeaterField.controlOptions.labelKey;
684
- text.isRequired = this.repeaterField.controlOptions.isRequired;
685
- text.viewType = this.repeaterField.controlOptions.viewType;
686
- text.labelDescription = this.repeaterField.controlOptions.labelDescription
687
- ? this.repeaterField.controlOptions.labelDescription
688
- : '';
689
- text.type = InputType.Text;
690
- if (this.repeaterField.controlOptions.maxLength)
691
- text.maxLength = this.repeaterField.controlOptions.maxLength;
692
- if (this.repeaterField.controlOptions.minLength)
693
- text.minLength = this.repeaterField.controlOptions.minLength;
694
- text.value = value;
695
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
696
- text.customValidation = this.repeaterField.controlOptions.customValidation;
697
- }
698
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, text);
699
- break;
700
- case DataType.Name:
701
- let name = new TextBoxOptions();
702
- name.name =
703
- this.repeaterField.controlOptions.name +
704
- '.' +
705
- changes.itemNumber.currentValue +
706
- '.' +
707
- this.controlNumber.toString();
708
- name.hideLabel = this.repeaterField.controlOptions.hideLabel;
709
- name.labelKey = this.repeaterField.controlOptions.labelKey;
710
- name.isRequired = this.repeaterField.controlOptions.isRequired;
711
- name.viewType = this.repeaterField.controlOptions.viewType;
712
- name.labelDescription = this.repeaterField.controlOptions.labelDescription
713
- ? this.repeaterField.controlOptions.labelDescription
714
- : '';
715
- if (this.repeaterField.controlOptions.maxLength)
716
- name.maxLength = this.repeaterField.controlOptions.maxLength;
717
- if (this.repeaterField.controlOptions.minLength)
718
- name.minLength = this.repeaterField.controlOptions.minLength;
719
- name.type = InputType.Text;
720
- name.value = value;
721
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
722
- name.customValidation = this.repeaterField.controlOptions.customValidation;
723
- }
724
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, name);
725
- break;
726
- case DataType.Email:
727
- let email = new TextBoxOptions();
728
- email.name =
729
- this.repeaterField.controlOptions.name +
730
- '.' +
731
- changes.itemNumber.currentValue +
732
- '.' +
733
- this.controlNumber.toString();
734
- email.hideLabel = this.repeaterField.controlOptions.hideLabel;
735
- email.labelKey = this.repeaterField.controlOptions.labelKey;
736
- email.isRequired = this.repeaterField.controlOptions.isRequired;
737
- email.viewType = this.repeaterField.controlOptions.viewType;
738
- email.labelDescription = this.repeaterField.controlOptions.labelDescription
739
- ? this.repeaterField.controlOptions.labelDescription
740
- : '';
741
- email.type = InputType.Email;
742
- email.value = value;
743
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
744
- email.customValidation = this.repeaterField.controlOptions.customValidation;
745
- }
746
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, email);
747
- break;
748
- case DataType.Number:
749
- let number = new TextBoxOptions();
750
- number.name =
751
- this.repeaterField.controlOptions.name +
752
- '.' +
753
- changes.itemNumber.currentValue +
754
- '.' +
755
- this.controlNumber.toString();
756
- number.hideLabel = this.repeaterField.controlOptions.hideLabel;
757
- number.labelKey = this.repeaterField.controlOptions.labelKey;
758
- number.isRequired = this.repeaterField.controlOptions.isRequired;
759
- number.viewType = this.repeaterField.controlOptions.viewType;
760
- number.labelDescription = this.repeaterField.controlOptions.labelDescription
761
- ? this.repeaterField.controlOptions.labelDescription
762
- : '';
763
- number.type = InputType.Number;
764
- let rangeNumber = new RangeNumber();
765
- rangeNumber.to = this.repeaterField.controlOptions.maxLength;
766
- rangeNumber.from = this.repeaterField.controlOptions.minLength;
767
- number.numberRange = rangeNumber;
768
- number.value = value;
769
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
770
- number.customValidation = this.repeaterField.controlOptions.customValidation;
771
- }
772
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, number);
773
- break;
774
- case DataType.URL:
775
- let url = new TextBoxOptions();
776
- url.name = `${this.repeaterField.controlOptions.name}.${changes.itemNumber.currentValue}.${this.controlNumber}`;
777
- url.hideLabel = this.repeaterField.controlOptions.hideLabel;
778
- url.labelKey = this.repeaterField.controlOptions.labelKey;
779
- url.isRequired = this.repeaterField.controlOptions.isRequired;
780
- url.viewType = this.repeaterField.controlOptions.viewType;
781
- url.labelDescription = this.repeaterField.controlOptions.labelDescription ? this.repeaterField.controlOptions.labelDescription : '';
782
- url.type = InputType.URL;
783
- url.value = value;
784
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
785
- url.customValidation = this.repeaterField.controlOptions.customValidation;
786
- }
787
- this.renderComponentService.renderDynamicComponent(this.item, TextboxComponent, this.group, url);
788
- break;
789
- //#endregion
790
- //#region DateTime
791
- case DataType.Date:
792
- let date = new DatePickerOptions();
793
- date.name =
794
- this.repeaterField.controlOptions.name +
795
- '.' +
796
- changes.itemNumber.currentValue +
797
- '.' +
798
- this.controlNumber.toString();
799
- date.hideLabel = this.repeaterField.controlOptions.hideLabel;
800
- date.labelKey = this.repeaterField.controlOptions.labelKey;
801
- date.isRequired = this.repeaterField.controlOptions.isRequired;
802
- date.viewType = this.repeaterField.controlOptions.viewType;
803
- date.labelDescription = this.repeaterField.controlOptions.labelDescription
804
- ? this.repeaterField.controlOptions.labelDescription
805
- : '';
806
- date.pickerType = PickerType.Calendar;
807
- date.selectMode = SelectMode.Single;
808
- date.startView = StartView.Month;
809
- date.value = value;
810
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
811
- date.customValidation = this.repeaterField.controlOptions.customValidation;
812
- }
813
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, date);
814
- break;
815
- case DataType.DateTime:
816
- let dateTime = new DatePickerOptions();
817
- dateTime.name =
818
- this.repeaterField.controlOptions.name +
819
- '.' +
820
- changes.itemNumber.currentValue +
821
- '.' +
822
- this.controlNumber.toString();
823
- dateTime.hideLabel = this.repeaterField.controlOptions.hideLabel;
824
- dateTime.labelKey = this.repeaterField.controlOptions.labelKey;
825
- dateTime.isRequired = this.repeaterField.controlOptions.isRequired;
826
- dateTime.viewType = this.repeaterField.controlOptions.viewType;
827
- dateTime.labelDescription = this.repeaterField.controlOptions.labelDescription
828
- ? this.repeaterField.controlOptions.labelDescription
829
- : '';
830
- dateTime.pickerType = PickerType.Both;
831
- dateTime.selectMode = SelectMode.Single;
832
- dateTime.startView = StartView.Month;
833
- dateTime.value = value;
834
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
835
- dateTime.customValidation = this.repeaterField.controlOptions.customValidation;
836
- }
837
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, dateTime);
838
- break;
839
- case DataType.Time:
840
- let time = new DatePickerOptions();
841
- time.name =
842
- this.repeaterField.controlOptions.name +
843
- '.' +
844
- changes.itemNumber.currentValue +
845
- '.' +
846
- this.controlNumber.toString();
847
- time.hideLabel = this.repeaterField.controlOptions.hideLabel;
848
- time.labelKey = this.repeaterField.controlOptions.labelKey;
849
- time.isRequired = this.repeaterField.controlOptions.isRequired;
850
- time.viewType = this.repeaterField.controlOptions.viewType;
851
- time.labelDescription = this.repeaterField.controlOptions.labelDescription
852
- ? this.repeaterField.controlOptions.labelDescription
853
- : '';
854
- time.pickerType = PickerType.Timer;
855
- time.selectMode = SelectMode.Single;
856
- time.startView = StartView.Month;
857
- time.value = value;
858
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
859
- time.customValidation = this.repeaterField.controlOptions.customValidation;
860
- }
861
- this.renderComponentService.renderDynamicComponent(this.item, DateInputComponent, this.group, time);
862
- break;
863
- //#endregion
864
- //#region Dropdown
865
- case DataType.SingleSelect:
866
- let singleSelect = new DropdownOptions();
867
- singleSelect.name =
868
- this.repeaterField.controlOptions.name +
869
- '.' +
870
- changes.itemNumber.currentValue +
871
- '.' +
872
- this.controlNumber.toString();
873
- singleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
874
- singleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
875
- singleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
876
- singleSelect.viewType = this.repeaterField.controlOptions.viewType;
877
- singleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
878
- ? this.repeaterField.controlOptions.labelDescription
879
- : '';
880
- singleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
881
- singleSelect.singleSelection = true;
882
- singleSelect.showCheckbox = false;
883
- singleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
884
- singleSelect.selectedItems = value;
885
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
886
- singleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
887
- }
888
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, singleSelect);
889
- break;
890
- case DataType.MulipleSelect:
891
- let mulipleSelect = new DropdownOptions();
892
- mulipleSelect.name =
893
- this.repeaterField.controlOptions.name +
894
- '.' +
895
- changes.itemNumber.currentValue +
896
- '.' +
897
- this.controlNumber.toString();
898
- mulipleSelect.hideLabel = this.repeaterField.controlOptions.hideLabel;
899
- mulipleSelect.labelKey = this.repeaterField.controlOptions.labelKey;
900
- mulipleSelect.isRequired = this.repeaterField.controlOptions.isRequired;
901
- mulipleSelect.viewType = this.repeaterField.controlOptions.viewType;
902
- mulipleSelect.labelDescription = this.repeaterField.controlOptions.labelDescription
903
- ? this.repeaterField.controlOptions.labelDescription
904
- : '';
905
- mulipleSelect.dataSource = this.repeaterField.controlOptions.dataSource;
906
- mulipleSelect.singleSelection = false;
907
- mulipleSelect.showCheckbox = false;
908
- mulipleSelect.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
909
- mulipleSelect.selectedItems = value;
910
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
911
- mulipleSelect.customValidation = this.repeaterField.controlOptions.customValidation;
912
- }
913
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, mulipleSelect);
914
- break;
915
- case DataType.Goal:
916
- let goal = new DropdownOptions();
917
- goal.name =
918
- this.repeaterField.controlOptions.name +
919
- '.' +
920
- changes.itemNumber.currentValue +
921
- '.' +
922
- this.controlNumber.toString();
923
- goal.hideLabel = this.repeaterField.controlOptions.hideLabel;
924
- goal.labelKey = this.repeaterField.controlOptions.labelKey;
925
- goal.isRequired = this.repeaterField.controlOptions.isRequired;
926
- goal.viewType = this.repeaterField.controlOptions.viewType;
927
- goal.labelDescription = this.repeaterField.controlOptions.labelDescription
928
- ? this.repeaterField.controlOptions.labelDescription
929
- : '';
930
- goal.dataSource = this.repeaterField.controlOptions.dataSource;
931
- goal.singleSelection = !this.repeaterField.controlOptions.isMultiple;
932
- goal.showCheckbox = false;
933
- goal.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
934
- goal.selectedItems = value;
935
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
936
- goal.customValidation = this.repeaterField.controlOptions.customValidation;
937
- }
938
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, goal);
939
- break;
940
- case DataType.Challenge:
941
- let challenge = new DropdownOptions();
942
- challenge.name =
943
- this.repeaterField.controlOptions.name +
944
- '.' +
945
- changes.itemNumber.currentValue +
946
- '.' +
947
- this.controlNumber.toString();
948
- challenge.hideLabel = this.repeaterField.controlOptions.hideLabel;
949
- challenge.labelKey = this.repeaterField.controlOptions.labelKey;
950
- challenge.isRequired = this.repeaterField.controlOptions.isRequired;
951
- challenge.viewType = this.repeaterField.controlOptions.viewType;
952
- challenge.labelDescription = this.repeaterField.controlOptions.labelDescription
953
- ? this.repeaterField.controlOptions.labelDescription
954
- : '';
955
- challenge.dataSource = this.repeaterField.controlOptions.dataSource;
956
- challenge.dataSource = this.repeaterField.controlOptions.dataSource;
957
- challenge.singleSelection = !this.repeaterField.controlOptions.isMultiple;
958
- challenge.showCheckbox = false;
959
- challenge.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
960
- challenge.selectedItems = value;
961
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
962
- challenge.customValidation = this.repeaterField.controlOptions.customValidation;
963
- }
964
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, challenge);
965
- break;
966
- case DataType.InnovationLab:
967
- let innovationLab = new DropdownOptions();
968
- innovationLab.name =
969
- this.repeaterField.controlOptions.name +
970
- '.' +
971
- changes.itemNumber.currentValue +
972
- '.' +
973
- this.controlNumber.toString();
974
- innovationLab.hideLabel = this.repeaterField.controlOptions.hideLabel;
975
- innovationLab.labelKey = this.repeaterField.controlOptions.labelKey;
976
- innovationLab.isRequired = this.repeaterField.controlOptions.isRequired;
977
- innovationLab.viewType = this.repeaterField.controlOptions.viewType;
978
- innovationLab.labelDescription = this.repeaterField.controlOptions.labelDescription
979
- ? this.repeaterField.controlOptions.labelDescription
980
- : '';
981
- innovationLab.dataSource = this.repeaterField.controlOptions.dataSource;
982
- innovationLab.singleSelection = !this.repeaterField.controlOptions.isMultiple;
983
- innovationLab.showCheckbox = false;
984
- innovationLab.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
985
- innovationLab.selectedItems = value;
986
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
987
- innovationLab.customValidation = this.repeaterField.controlOptions.customValidation;
988
- }
989
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, innovationLab);
990
- break;
991
- case DataType.Country:
992
- let country = new DropdownOptions();
993
- country.name =
994
- this.repeaterField.controlOptions.name +
995
- '.' +
996
- changes.itemNumber.currentValue +
997
- '.' +
998
- this.controlNumber.toString();
999
- country.hideLabel = this.repeaterField.controlOptions.hideLabel;
1000
- country.labelKey = this.repeaterField.controlOptions.labelKey;
1001
- country.isRequired = this.repeaterField.controlOptions.isRequired;
1002
- country.viewType = this.repeaterField.controlOptions.viewType;
1003
- country.labelDescription = this.repeaterField.controlOptions.labelDescription
1004
- ? this.repeaterField.controlOptions.labelDescription
1005
- : '';
1006
- country.dataSource = this.repeaterField.controlOptions.dataSource;
1007
- country.singleSelection = !this.repeaterField.controlOptions.isMultiple;
1008
- country.showCheckbox = false;
1009
- country.allowSearchFilter = this.repeaterField.controlOptions.hasSearch;
1010
- country.selectedItems = value;
1011
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1012
- country.customValidation = this.repeaterField.controlOptions.customValidation;
1013
- }
1014
- this.renderComponentService.renderDynamicComponent(this.item, DropdownListComponent, this.group, country);
1015
- break;
1016
- //#endregion
1017
- //#region FileUpload
1018
- case DataType.File:
1019
- let file = new FileUploadOptions();
1020
- file.name =
1021
- this.repeaterField.controlOptions.name +
1022
- '.' +
1023
- changes.itemNumber.currentValue +
1024
- '.' +
1025
- this.controlNumber.toString();
1026
- file.hideLabel = this.repeaterField.controlOptions.hideLabel;
1027
- file.labelKey = this.repeaterField.controlOptions.labelKey;
1028
- file.isRequired = this.repeaterField.controlOptions.isRequired;
1029
- file.viewType = this.repeaterField.controlOptions.viewType;
1030
- file.labelDescription = this.repeaterField.controlOptions.labelDescription
1031
- ? this.repeaterField.controlOptions.labelDescription
1032
- : '';
1033
- file.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
1034
- file.value = value;
1035
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1036
- file.customValidation = this.repeaterField.controlOptions.customValidation;
1037
- }
1038
- this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, file);
1039
- break;
1040
- case DataType.MultiFile:
1041
- let multiFile = new FileUploadOptions();
1042
- file.name =
1043
- this.repeaterField.controlOptions.name +
1044
- '.' +
1045
- changes.itemNumber.currentValue +
1046
- '.' +
1047
- this.controlNumber.toString();
1048
- file.hideLabel = this.repeaterField.controlOptions.hideLabel;
1049
- file.labelKey = this.repeaterField.controlOptions.labelKey;
1050
- file.isRequired = this.repeaterField.controlOptions.isRequired;
1051
- file.viewType = this.repeaterField.controlOptions.viewType;
1052
- file.labelDescription = this.repeaterField.controlOptions.labelDescription
1053
- ? this.repeaterField.controlOptions.labelDescription
1054
- : '';
1055
- multiFile.maxSizeForAllFilesInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
1056
- multiFile.maxNoOfFiles = this.repeaterField.controlOptions.maxFileCount;
1057
- multiFile.isMultipleFile = true;
1058
- multiFile.value = value;
1059
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1060
- multiFile.customValidation = this.repeaterField.controlOptions.customValidation;
1061
- }
1062
- this.renderComponentService.renderDynamicComponent(this.item, FileUploadComponent, this.group, multiFile);
1063
- break;
1064
- //#endregion
1065
- //#region ImageUpload
1066
- case DataType.Image:
1067
- let image = new ImageUploadOptions();
1068
- image.name =
1069
- this.repeaterField.controlOptions.name +
1070
- '.' +
1071
- changes.itemNumber.currentValue +
1072
- '.' +
1073
- this.controlNumber.toString();
1074
- image.hideLabel = this.repeaterField.controlOptions.hideLabel;
1075
- image.labelKey = this.repeaterField.controlOptions.labelKey;
1076
- image.isRequired = this.repeaterField.controlOptions.isRequired;
1077
- image.viewType = this.repeaterField.controlOptions.viewType;
1078
- image.labelDescription = this.repeaterField.controlOptions.labelDescription
1079
- ? this.repeaterField.controlOptions.labelDescription
1080
- : '';
1081
- if (this.repeaterField.controlOptions.maxFileSizeInMB)
1082
- image.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
1083
- image.value = value;
1084
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1085
- image.customValidation = this.repeaterField.controlOptions.customValidation;
1086
- }
1087
- this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, image);
1088
- break;
1089
- case DataType.CoverPhoto:
1090
- let coverPhoto = new ImageUploadOptions();
1091
- coverPhoto.name =
1092
- this.repeaterField.controlOptions.name +
1093
- '.' +
1094
- changes.itemNumber.currentValue +
1095
- '.' +
1096
- this.controlNumber.toString();
1097
- coverPhoto.hideLabel = this.repeaterField.controlOptions.hideLabel;
1098
- coverPhoto.labelKey = this.repeaterField.controlOptions.labelKey;
1099
- coverPhoto.isRequired = this.repeaterField.controlOptions.isRequired;
1100
- coverPhoto.viewType = this.repeaterField.controlOptions.viewType;
1101
- coverPhoto.labelDescription = this.repeaterField.controlOptions.labelDescription
1102
- ? this.repeaterField.controlOptions.labelDescription
1103
- : '';
1104
- if (this.repeaterField.controlOptions.maxFileSizeInMB)
1105
- coverPhoto.fileMaxSizeInMB = this.repeaterField.controlOptions.maxFileSizeInMB;
1106
- coverPhoto.value = value;
1107
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1108
- coverPhoto.customValidation = this.repeaterField.controlOptions.customValidation;
1109
- }
1110
- this.renderComponentService.renderDynamicComponent(this.item, ImageUploaderComponent, this.group, coverPhoto);
1111
- break;
1112
- //#endregion
1113
- //#region Mobile
1114
- case DataType.Mobile:
1115
- let mobile = new PhoneOptions();
1116
- mobile.name =
1117
- this.repeaterField.controlOptions.name +
1118
- '.' +
1119
- changes.itemNumber.currentValue +
1120
- '.' +
1121
- this.controlNumber.toString();
1122
- mobile.hideLabel = this.repeaterField.controlOptions.hideLabel;
1123
- mobile.labelKey = this.repeaterField.controlOptions.labelKey;
1124
- mobile.isRequired = this.repeaterField.controlOptions.isRequired;
1125
- mobile.viewType = this.repeaterField.controlOptions.viewType;
1126
- mobile.labelDescription = this.repeaterField.controlOptions.labelDescription
1127
- ? this.repeaterField.controlOptions.labelDescription
1128
- : '';
1129
- mobile.allowSearch = true;
1130
- mobile.phoneValidation = true;
1131
- mobile.selectFirstCountry = true;
1132
- mobile.enablePlaceholder = true;
1133
- mobile.value = value;
1134
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1135
- mobile.customValidation = this.repeaterField.controlOptions.customValidation;
1136
- }
1137
- this.renderComponentService.renderDynamicComponent(this.item, PhoneComponent, this.group, mobile);
1138
- break;
1139
- //#endregion
1140
- //#region MultilineText
1141
- case DataType.MultilineText:
1142
- let multilineText = new TextAreaOptions();
1143
- multilineText.name =
1144
- this.repeaterField.controlOptions.name +
1145
- '.' +
1146
- changes.itemNumber.currentValue +
1147
- '.' +
1148
- this.controlNumber.toString();
1149
- multilineText.hideLabel = this.repeaterField.controlOptions.hideLabel;
1150
- multilineText.labelKey = this.repeaterField.controlOptions.labelKey;
1151
- multilineText.isRequired = this.repeaterField.controlOptions.isRequired;
1152
- multilineText.viewType = this.repeaterField.controlOptions.viewType;
1153
- multilineText.labelDescription = this.repeaterField.controlOptions.labelDescription
1154
- ? this.repeaterField.controlOptions.labelDescription
1155
- : '';
1156
- if (this.repeaterField.controlOptions.maxLength)
1157
- multilineText.maxLength = this.repeaterField.controlOptions.maxLength;
1158
- if (this.repeaterField.controlOptions.minLength)
1159
- multilineText.minLength = this.repeaterField.controlOptions.minLength;
1160
- multilineText.rows = this.repeaterField.controlOptions.rows;
1161
- multilineText.forceDirection = this.repeaterField.controlOptions.forceDirection;
1162
- multilineText.value = value;
1163
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1164
- multilineText.customValidation = this.repeaterField.controlOptions.customValidation;
1165
- }
1166
- this.renderComponentService.renderDynamicComponent(this.item, TextAreaComponent, this.group, multilineText);
1167
- break;
1168
- //#endregion
1169
- //#region HTML
1170
- case DataType.HTML:
1171
- let html = new HtmlEditorOptions();
1172
- html.name =
1173
- this.repeaterField.controlOptions.name +
1174
- '.' +
1175
- changes.itemNumber.currentValue +
1176
- '.' +
1177
- this.controlNumber.toString();
1178
- html.hideLabel = this.repeaterField.controlOptions.hideLabel;
1179
- html.labelKey = this.repeaterField.controlOptions.labelKey;
1180
- html.isRequired = this.repeaterField.controlOptions.isRequired;
1181
- html.viewType = this.repeaterField.controlOptions.viewType;
1182
- html.labelDescription = this.repeaterField.controlOptions.labelDescription
1183
- ? this.repeaterField.controlOptions.labelDescription
1184
- : '';
1185
- if (this.repeaterField.controlOptions.maxLength)
1186
- html.maxLength = this.repeaterField.controlOptions.maxLength;
1187
- if (this.repeaterField.controlOptions.minLength)
1188
- html.minLength = this.repeaterField.controlOptions.minLength;
1189
- html.height = this.repeaterField.controlOptions.rows;
1190
- html.forceDirection = this.repeaterField.controlOptions.forceDirection;
1191
- html.value = value;
1192
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1193
- html.customValidation = this.repeaterField.controlOptions.customValidation;
1194
- }
1195
- this.renderComponentService.renderDynamicComponent(this.item, HtmlEditorComponent, this.group, html);
1196
- break;
1197
- //#endregion
1198
- //#region Boolean
1199
- case DataType.Boolean:
1200
- let boolean = new ToggleSlideOptions();
1201
- boolean.name =
1202
- this.repeaterField.controlOptions.name +
1203
- '.' +
1204
- changes.itemNumber.currentValue +
1205
- '.' +
1206
- this.controlNumber.toString();
1207
- boolean.hideLabel = this.repeaterField.controlOptions.hideLabel;
1208
- boolean.labelKey = this.repeaterField.controlOptions.labelKey;
1209
- boolean.viewType = this.repeaterField.controlOptions.viewType;
1210
- boolean.labelDescription = this.repeaterField.controlOptions.labelDescription
1211
- ? this.repeaterField.controlOptions.labelDescription
1212
- : '';
1213
- boolean.value = value;
1214
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1215
- boolean.customValidation = this.repeaterField.controlOptions.customValidation;
1216
- }
1217
- this.renderComponentService.renderDynamicComponent(this.item, ToggleslideComponent, this.group, boolean);
1218
- break;
1219
- //#endregion
1220
- //#region Location
1221
- case DataType.Location:
1222
- let location = new MapAutoCompleteOptions();
1223
- location.name =
1224
- this.repeaterField.controlOptions.name +
1225
- '.' +
1226
- changes.itemNumber.currentValue +
1227
- '.' +
1228
- this.controlNumber.toString();
1229
- location.hideLabel = this.repeaterField.controlOptions.hideLabel;
1230
- location.labelKey = this.repeaterField.controlOptions.labelKey;
1231
- location.isRequired = this.repeaterField.controlOptions.isRequired;
1232
- location.viewType = this.repeaterField.controlOptions.viewType;
1233
- location.labelDescription = this.repeaterField.controlOptions.labelDescription
1234
- ? this.repeaterField.controlOptions.labelDescription
1235
- : '';
1236
- location.value = value;
1237
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1238
- location.customValidation = this.repeaterField.controlOptions.customValidation;
1239
- }
1240
- this.renderComponentService.renderDynamicComponent(this.item, MapAutoCompleteComponent, this.group, location);
1241
- break;
1242
- //#endregion
1243
- //#region CheckBox
1244
- case DataType.CheckBox:
1245
- let checkBox = new CheckBoxOptions();
1246
- checkBox.name =
1247
- this.repeaterField.controlOptions.name +
1248
- '.' +
1249
- changes.itemNumber.currentValue +
1250
- '.' +
1251
- this.controlNumber.toString();
1252
- checkBox.hideLabel = this.repeaterField.controlOptions.hideLabel;
1253
- checkBox.labelKey = this.repeaterField.controlOptions.labelKey;
1254
- checkBox.viewType = this.repeaterField.controlOptions.viewType;
1255
- checkBox.labelDescription = this.repeaterField.controlOptions.labelDescription
1256
- ? this.repeaterField.controlOptions.labelDescription
1257
- : '';
1258
- checkBox.outputFunction = this.repeaterField.controlOptions.outputFunction;
1259
- checkBox.value = value;
1260
- if (this.repeaterField.controlOptions.customValidation.length > 0) {
1261
- checkBox.customValidation = this.repeaterField.controlOptions.customValidation;
1262
- }
1263
- this.renderComponentService.renderDynamicComponent(this.item, CheckBoxComponent, this.group, checkBox);
1264
- break;
1265
- //#endregion
1266
- default:
1267
- break;
1268
- }
1269
- }
1270
- }
1271
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RepeaterFieldBuilderComponent, deps: [{ token: i1.RenderComponentService }, { token: i2.FormGroupDirective }], target: i0.ɵɵFactoryTarget.Component }); }
1272
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RepeaterFieldBuilderComponent, isStandalone: true, selector: "repeater-field-builder", inputs: { group: "group", itemNumber: "itemNumber", controlNumber: "controlNumber", repeaterField: "repeaterField", itemsValue: "itemsValue" }, viewQueries: [{ propertyName: "item", first: true, predicate: ["Item"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<ng-container #Item></ng-container>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
1273
- }
1274
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RepeaterFieldBuilderComponent, decorators: [{
1275
- type: Component,
1276
- args: [{ selector: 'repeater-field-builder', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], template: "<ng-container #Item></ng-container>\r\n" }]
1277
- }], ctorParameters: () => [{ type: i1.RenderComponentService }, { type: i2.FormGroupDirective }], propDecorators: { item: [{
1278
- type: ViewChild,
1279
- args: ['Item', { read: ViewContainerRef }]
1280
- }], group: [{
1281
- type: Input
1282
- }], itemNumber: [{
1283
- type: Input
1284
- }], controlNumber: [{
1285
- type: Input
1286
- }], repeaterField: [{
1287
- type: Input
1288
- }], itemsValue: [{
1289
- type: Input
1290
- }] } });
1291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItZmllbGQtYnVpbGRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyL3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWlDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFB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IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcclxuICBOT19FUlJPUlNfU0NIRU1BXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvRW51bXMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgUGlja2VyVHlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9QaWNrZXJUeXBlJztcclxuaW1wb3J0IHsgU2VsZWN0TW9kZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9FbnVtcy9TZWxlY3RNb2RlJztcclxuaW1wb3J0IHsgU3RhcnRWaWV3IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL0VudW1zL1N0YXJ0Vmlldyc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9EYXRlUGlja2VyT3B0aW9ucyc7XHJcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvRHJvcGRvd25PcHRpb25zJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0ZpbGVVcGxvYWRPcHRpb25zJztcclxuaW1wb3J0IHsgSHRtbEVkaXRvck9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL0h0bWxFZGl0b3JPcHRpb25zJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxvYWRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9JbWFnZVVwbG9hZE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXBBdXRvQ29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvQ29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgUGhvbmVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9QaG9uZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBSYW5nZU51bWJlciB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmFuZ2VOdW1iZXInO1xyXG5pbXBvcnQgeyBSZXBlYXRlckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9SZXBlYXRlckZpZWxkJztcclxuaW1wb3J0IHsgVGV4dEFyZWFPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9UZXh0QXJlYU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBUb2dnbGVTbGlkZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvTW9kZWxzL1RvZ2dsZVNsaWRlT3B0aW9ucyc7XHJcbmltcG9ydCB7IFJlbmRlckNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvc2VydmljZXMvcmVuZGVyLWNvbXBvbmVudC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9GaWxlVXBsb2FkL0ZpbGVVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHRtbEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL0h0bWxFZGl0b3IvSHRtbEVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbWFnZVVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vSW1hZ2VVcGxvYWQvSW1hZ2VVcGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vTWFwQXV0b0NvbXBsZXRlL01hcEF1dG9Db21wbGV0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQaG9uZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1Bob25lL1Bob25lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRleHRBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vVGV4dEFyZWEvVGV4dEFyZWEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RleHRCb3gvVGV4dEJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVzbGlkZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL1RvZ2dsZXNsaWRlL1RvZ2dsZXNsaWRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2hlY2tCb3hPcHRpb25zJztcclxuaW1wb3J0IHsgQ2hlY2tCb3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9DaGVja0JveC9DaGVja0JveC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZXBlYXRlci1maWVsZC1idWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwZWF0ZXItZmllbGQtYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBlYXRlckZpZWxkQnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnSXRlbScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBpdGVtOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgaXRlbU51bWJlcjogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOdW1iZXI6IG51bWJlcjtcclxuICBASW5wdXQoKSByZXBlYXRlckZpZWxkOiBSZXBlYXRlckZpZWxkO1xyXG4gIEBJbnB1dCgpIGl0ZW1zVmFsdWU6IGFueVtdID0gW107XHJcbiAgaXRlbVZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIHZhbHVlOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnRTZXJ2aWNlOiBSZW5kZXJDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIHRleHRDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXNWYWx1ZS5sZW5ndGggPiAwKSB0aGlzLml0ZW1WYWx1ZSA9IHRoaXMuaXRlbXNWYWx1ZVt0aGlzLml0ZW1OdW1iZXJdO1xyXG4gICAgICBpZiAodGhpcy5pdGVtVmFsdWUpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1WYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5pdGVtVmFsdWUsIGtleSkgJiZcclxuICAgICAgICAgICAga2V5ID09IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaXRlbVZhbHVlW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBlbGVtZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLml0ZW0uY2xlYXIoKTtcclxuICAgICAgc3dpdGNoICh0aGlzLnJlcGVhdGVyRmllbGQ/LmNvbnRyb2xUeXBlKSB7XHJcbiAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRleHQ6XHJcbiAgICAgICAgICBsZXQgVGV4dCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgVGV4dC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIFRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIFRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIFRleHQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgVGV4dC5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIFRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBUZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBUZXh0LnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIFRleHQuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgVGV4dC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBUZXh0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5OYW1lOlxyXG4gICAgICAgICAgbGV0IG5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIG5hbWUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG5hbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG5hbWUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBuYW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG5hbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBuYW1lLmxhbmd1YWdlVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYW5ndWFnZVZhbGlkYXRpb247XHJcbiAgICAgICAgICBuYW1lLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgbmFtZS5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgIG5hbWUubWluTGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgIG5hbWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgbmFtZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBuYW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG5hbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkVtYWlsOlxyXG4gICAgICAgICAgbGV0IGVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBlbWFpbC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZW1haWwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGVtYWlsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZW1haWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZW1haWwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBlbWFpbC5sYW5ndWFnZVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uO1xyXG4gICAgICAgICAgZW1haWwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGVtYWlsLnR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgICAgICBlbWFpbC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbWFpbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBlbWFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgbGV0IG51bWJlciA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgbnVtYmVyLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG51bWJlci5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG51bWJlci5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBudW1iZXIubGFuZ3VhZ2VWYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhbmd1YWdlVmFsaWRhdGlvbjtcclxuICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbnVtYmVyLnR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgbGV0IHJhbmdlTnVtYmVyID0gbmV3IFJhbmdlTnVtYmVyKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlKSB7XHJcbiAgICAgICAgICAgIHJhbmdlTnVtYmVyLnRvID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlLnRvO1xyXG4gICAgICAgICAgICByYW5nZU51bWJlci5mcm9tID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm51bWJlclJhbmdlLmZyb207XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBudW1iZXIubnVtYmVyUmFuZ2UgPSByYW5nZU51bWJlcjtcclxuICAgICAgICAgIG51bWJlci52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBudW1iZXIuaXNSZWFkb25seSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlYWRvbmx5O1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbnVtYmVyLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRib3hDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG51bWJlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuVVJMOlxyXG4gICAgICAgICAgbGV0IHVybCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgdXJsLm5hbWUgPSBgJHt0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZX0uJHt0aGlzLml0ZW1OdW1iZXJ9LiR7dGhpcy5jb250cm9sTnVtYmVyfWA7XHJcbiAgICAgICAgICB1cmwuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIHVybC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIHVybC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICB1cmwudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICB1cmwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb24gOiAnJztcclxuICAgICAgICAgIHVybC50eXBlID0gSW5wdXRUeXBlLlVSTDtcclxuICAgICAgICAgIHVybC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICB1cmxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiAgRGF0ZVRpbWVcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGU6XHJcbiAgICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgZGF0ZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGF0ZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZGF0ZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGRhdGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZGF0ZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGRhdGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGRhdGUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQ2FsZW5kYXI7XHJcbiAgICAgICAgICBkYXRlLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIGRhdGUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgZGF0ZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBkYXRlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcclxuICAgICAgICAgIGxldCBkYXRlVGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgZGF0ZVRpbWUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGRhdGVUaW1lLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBkYXRlVGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGRhdGVUaW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGRhdGVUaW1lLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgZGF0ZVRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGRhdGVUaW1lLnBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkJvdGg7XHJcbiAgICAgICAgICBkYXRlVGltZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICBkYXRlVGltZS5zdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGg7XHJcbiAgICAgICAgICBkYXRlVGltZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRlVGltZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEYXRlSW5wdXRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERhdGVJbnB1dENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZGF0ZVRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLlRpbWU6XHJcbiAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGltZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgdGltZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgdGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIHRpbWUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgdGltZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIHRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIHRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuVGltZXI7XHJcbiAgICAgICAgICB0aW1lLnNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZTtcclxuICAgICAgICAgIHRpbWUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgdGltZS52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aW1lLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICB0aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBEcm9wZG93blxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgbGV0IHNpbmdsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBzaW5nbGVTZWxlY3QuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgc2luZ2xlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk11bGlwbGVTZWxlY3Q6XHJcbiAgICAgICAgICBsZXQgbXVsaXBsZVNlbGVjdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3QubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIG11bGlwbGVTZWxlY3Quc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgbXVsaXBsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgIGxldCBnb2FsID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgZ29hbC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZ29hbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZ29hbC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGdvYWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZ29hbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGdvYWwubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGdvYWwuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgZ29hbC5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBnb2FsLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgZ29hbC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICBnb2FsLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZ29hbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZ29hbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hhbGxlbmdlOlxyXG4gICAgICAgICAgbGV0IGNoYWxsZW5nZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNoYWxsZW5nZS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICBjaGFsbGVuZ2Uuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBjaGFsbGVuZ2UuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgY2hhbGxlbmdlLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjaGFsbGVuZ2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLklubm92YXRpb25MYWI6XHJcbiAgICAgICAgICBsZXQgaW5ub3ZhdGlvbkxhYiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpbm5vdmF0aW9uTGFiLmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGlubm92YXRpb25MYWIuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkNvdW50cnk6XHJcbiAgICAgICAgICBsZXQgY291bnRyeSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIGNvdW50cnkubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNvdW50cnkuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNvdW50cnkubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBjb3VudHJ5LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIGNvdW50cnkudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjb3VudHJ5LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjb3VudHJ5LmRhdGFTb3VyY2UgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgIGNvdW50cnkuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgY291bnRyeS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgIGNvdW50cnkuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGFzU2VhcmNoO1xyXG4gICAgICAgICAgY291bnRyeS5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvdW50cnkuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvdW50cnlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIEZpbGVVcGxvYWRcclxuICAgICAgICBjYXNlIERhdGFUeXBlLkZpbGU6XHJcbiAgICAgICAgICBsZXQgZmlsZSA9IG5ldyBGaWxlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICAgICAgZmlsZS5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGZpbGUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGZpbGUuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGZpbGUudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBmaWxlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICBsZXQgbXVsdGlGaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBmaWxlLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBmaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgZmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgZmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heFNpemVGb3JBbGxGaWxlc0luTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLm1heE5vT2ZGaWxlcyA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlQ291bnQ7XHJcbiAgICAgICAgICBtdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgbXVsdGlGaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxGaWxlVXBsb2FkQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBtdWx0aUZpbGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIEltYWdlVXBsb2FkXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5JbWFnZTpcclxuICAgICAgICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgIGltYWdlLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpbWFnZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgaW1hZ2UubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICBpbWFnZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBpbWFnZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGltYWdlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQilcclxuICAgICAgICAgICAgaW1hZ2UuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGltYWdlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGltYWdlLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEltYWdlVXBsb2FkZXJDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Db3ZlclBob3RvOlxyXG4gICAgICAgICAgbGV0IGNvdmVyUGhvdG8gPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY292ZXJQaG90by5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBjb3ZlclBob3RvLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgY292ZXJQaG90by5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8uZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgIGNvdmVyUGhvdG8udmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY292ZXJQaG90by5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxJbWFnZVVwbG9hZGVyQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBJbWFnZVVwbG9hZGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBjb3ZlclBob3RvXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBNb2JpbGVcclxuICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgIGxldCBtb2JpbGUgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgICAgICBtb2JpbGUubmFtZSA9XHJcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5pdGVtTnVtYmVyLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgIG1vYmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbW9iaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbW9iaWxlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgIG1vYmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG1vYmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgbW9iaWxlLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1vYmlsZS5waG9uZVZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnNlbGVjdEZpcnN0Q291bnRyeSA9IHRydWU7XHJcbiAgICAgICAgICBtb2JpbGUuZW5hYmxlUGxhY2Vob2xkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgbW9iaWxlLnZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG1vYmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxQaG9uZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgUGhvbmVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIG1vYmlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gTXVsdGlsaW5lVGV4dFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuTXVsdGlsaW5lVGV4dDpcclxuICAgICAgICAgIGxldCBtdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIG11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC5yb3dzID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnJvd3M7XHJcbiAgICAgICAgICBtdWx0aWxpbmVUZXh0LmZvcmNlRGlyZWN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmZvcmNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgbXVsdGlsaW5lVGV4dC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRBcmVhQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBUZXh0QXJlYUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAvLyNyZWdpb24gSFRNTFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgIGxldCBodG1sID0gbmV3IEh0bWxFZGl0b3JPcHRpb25zKCk7XHJcbiAgICAgICAgICBodG1sLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBodG1sLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBodG1sLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgaHRtbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICBodG1sLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgaHRtbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIGh0bWwubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICBodG1sLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICBodG1sLmhlaWdodCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5yb3dzO1xyXG4gICAgICAgICAgaHRtbC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgIGh0bWwudmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaHRtbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxIdG1sRWRpdG9yQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBIdG1sRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICBodG1sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBCb29sZWFuXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgbGV0IGJvb2xlYW4gPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgICBib29sZWFuLm5hbWUgPVxyXG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU51bWJlci50b1N0cmluZygpICtcclxuICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBib29sZWFuLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICBib29sZWFuLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgYm9vbGVhbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgIGJvb2xlYW4udmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgYm9vbGVhbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYm9vbGVhbi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUb2dnbGVzbGlkZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgVG9nZ2xlc2xpZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGJvb2xlYW5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgLy8jcmVnaW9uIExvY2F0aW9uXHJcbiAgICAgICAgY2FzZSBEYXRhVHlwZS5Mb2NhdGlvbjpcclxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9IG5ldyBNYXBBdXRvQ29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgICAgICBsb2NhdGlvbi5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgbG9jYXRpb24uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGxvY2F0aW9uLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgbG9jYXRpb24uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgbG9jYXRpb24udmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBsb2NhdGlvbi52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBsb2NhdGlvbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbG9jYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8TWFwQXV0b0NvbXBsZXRlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIC8vI3JlZ2lvbiBDaGVja0JveFxyXG4gICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hlY2tCb3g6XHJcbiAgICAgICAgICBsZXQgY2hlY2tCb3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICBjaGVja0JveC5uYW1lID1cclxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OdW1iZXIudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgY2hlY2tCb3guaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgY2hlY2tCb3gudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICBjaGVja0JveC5vdXRwdXRGdW5jdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5vdXRwdXRGdW5jdGlvbjtcclxuICAgICAgICAgIGNoZWNrQm94LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICBjaGVja0JveC52YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjaGVja0JveC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxDaGVja0JveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgQ2hlY2tCb3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNoZWNrQm94XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLml0ZW1OdW1iZXIpXHJcbiAgICAgIGlmIChjaGFuZ2VzLml0ZW1OdW1iZXIucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGxldCBuYW1lID1cclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIucHJldmlvdXNWYWx1ZS50b1N0cmluZygpICtcclxuICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXRlbS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAucmVtb3ZlQ29udHJvbChuYW1lKTtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sVHlwZSkge1xyXG4gICAgICAgICAgLy8jcmVnaW9uIFRleHRCb3hcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuVGV4dDpcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGV4dC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB0ZXh0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIHRleHQubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIHRleHQuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICB0ZXh0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICB0ZXh0LmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICB0ZXh0LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGV4dC5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICB0ZXh0Lm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIHRleHQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0ZXh0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk5hbWU6XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG5hbWUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgbmFtZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBuYW1lLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBuYW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgbmFtZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbmFtZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGgpXHJcbiAgICAgICAgICAgICAgbmFtZS5tYXhMZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aClcclxuICAgICAgICAgICAgICBuYW1lLm1pbkxlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGg7XHJcbiAgICAgICAgICAgIG5hbWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICBuYW1lLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbmFtZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5FbWFpbDpcclxuICAgICAgICAgICAgbGV0IGVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGVtYWlsLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGVtYWlsLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGVtYWlsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBlbWFpbC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGVtYWlsLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBlbWFpbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgICAgICAgZW1haWwudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBlbWFpbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBlbWFpbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIG51bWJlci5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBudW1iZXIuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbnVtYmVyLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBudW1iZXIuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBudW1iZXIudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG51bWJlci5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgbnVtYmVyLnR5cGUgPSBJbnB1dFR5cGUuTnVtYmVyO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VOdW1iZXIgPSBuZXcgUmFuZ2VOdW1iZXIoKTtcclxuICAgICAgICAgICAgcmFuZ2VOdW1iZXIudG8gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoO1xyXG4gICAgICAgICAgICByYW5nZU51bWJlci5mcm9tID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgICAgbnVtYmVyLm51bWJlclJhbmdlID0gcmFuZ2VOdW1iZXI7XHJcbiAgICAgICAgICAgIG51bWJlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG51bWJlci5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8VGV4dGJveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBudW1iZXJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLlVSTDpcclxuICAgICAgICAgICAgbGV0IHVybCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB1cmwubmFtZSA9IGAke3RoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lfS4ke2NoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWV9LiR7dGhpcy5jb250cm9sTnVtYmVyfWA7XHJcbiAgICAgICAgICAgIHVybC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICB1cmwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIHVybC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIHVybC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgdXJsLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIDogJyc7XHJcbiAgICAgICAgICAgIHVybC50eXBlID0gSW5wdXRUeXBlLlVSTDtcclxuICAgICAgICAgICAgdXJsLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdXJsLmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxUZXh0Ym94Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHVybFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIERhdGVUaW1lXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGU6XHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGRhdGUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZGF0ZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBkYXRlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBkYXRlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZGF0ZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZGF0ZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZGF0ZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhcjtcclxuICAgICAgICAgICAgZGF0ZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICAgIGRhdGUuc3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoO1xyXG4gICAgICAgICAgICBkYXRlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZGF0ZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgZGF0ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lOlxyXG4gICAgICAgICAgICBsZXQgZGF0ZVRpbWUgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZGF0ZVRpbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5waWNrZXJUeXBlID0gUGlja2VyVHlwZS5Cb3RoO1xyXG4gICAgICAgICAgICBkYXRlVGltZS5zZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5TaW5nbGU7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgICAgZGF0ZVRpbWUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBkYXRlVGltZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RGF0ZUlucHV0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgZGF0ZVRpbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5UaW1lOlxyXG4gICAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aW1lLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHRpbWUuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgdGltZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgdGltZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIHRpbWUudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIHRpbWUubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIHRpbWUucGlja2VyVHlwZSA9IFBpY2tlclR5cGUuVGltZXI7XHJcbiAgICAgICAgICAgIHRpbWUuc2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlO1xyXG4gICAgICAgICAgICB0aW1lLnN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aDtcclxuICAgICAgICAgICAgdGltZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRpbWUuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERhdGVJbnB1dENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIERhdGVJbnB1dENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIHRpbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICAvLyNyZWdpb24gRHJvcGRvd25cclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlU2VsZWN0OlxyXG4gICAgICAgICAgICBsZXQgc2luZ2xlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0LnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Quc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5hbGxvd1NlYXJjaEZpbHRlciA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oYXNTZWFyY2g7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxEcm9wZG93bkxpc3RDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBEcm9wZG93bkxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBzaW5nbGVTZWxlY3RcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk11bGlwbGVTZWxlY3Q6XHJcbiAgICAgICAgICAgIGxldCBtdWxpcGxlU2VsZWN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0Lm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3Qudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIG11bGlwbGVTZWxlY3QuZGF0YVNvdXJjZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtdWxpcGxlU2VsZWN0LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbXVsaXBsZVNlbGVjdC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbXVsaXBsZVNlbGVjdFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuR29hbDpcclxuICAgICAgICAgICAgbGV0IGdvYWwgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGdvYWwubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZ29hbC5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBnb2FsLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBnb2FsLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZ29hbC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZ29hbC5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZ29hbC5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGdvYWwuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgICBnb2FsLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBnb2FsLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgZ29hbC5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZ29hbC5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgZ29hbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ2hhbGxlbmdlOlxyXG4gICAgICAgICAgICBsZXQgY2hhbGxlbmdlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBjaGFsbGVuZ2UubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5zaW5nbGVTZWxlY3Rpb24gPSAhdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzTXVsdGlwbGU7XHJcbiAgICAgICAgICAgIGNoYWxsZW5nZS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgY2hhbGxlbmdlLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjaGFsbGVuZ2UuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PERyb3Bkb3duTGlzdENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIERyb3Bkb3duTGlzdENvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGNoYWxsZW5nZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSW5ub3ZhdGlvbkxhYjpcclxuICAgICAgICAgICAgbGV0IGlubm92YXRpb25MYWIgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGlubm92YXRpb25MYWIuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpbm5vdmF0aW9uTGFiLmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYi5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgaW5ub3ZhdGlvbkxhYlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ291bnRyeTpcclxuICAgICAgICAgICAgbGV0IGNvdW50cnkgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNvdW50cnkubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY291bnRyeS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjb3VudHJ5LmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgY291bnRyeS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY291bnRyeS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgY291bnRyeS5kYXRhU291cmNlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGNvdW50cnkuc2luZ2xlU2VsZWN0aW9uID0gIXRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc011bHRpcGxlO1xyXG4gICAgICAgICAgICBjb3VudHJ5LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb3VudHJ5LmFsbG93U2VhcmNoRmlsdGVyID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhhc1NlYXJjaDtcclxuICAgICAgICAgICAgY291bnRyeS5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY291bnRyeS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RHJvcGRvd25MaXN0Q29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgY291bnRyeVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBGaWxlVXBsb2FkXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkZpbGU6XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gbmV3IEZpbGVVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGZpbGUubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBmaWxlLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgZmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgZmlsZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgZmlsZS5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBmaWxlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8RmlsZVVwbG9hZENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEZpbGVVcGxvYWRDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBmaWxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBEYXRhVHlwZS5NdWx0aUZpbGU6XHJcbiAgICAgICAgICAgIGxldCBtdWx0aUZpbGUgPSBuZXcgRmlsZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgZmlsZS5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmaWxlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGZpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGZpbGUuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBmaWxlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBmaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUubWF4U2l6ZUZvckFsbEZpbGVzSW5NQiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUI7XHJcbiAgICAgICAgICAgIG11bHRpRmlsZS5tYXhOb09mRmlsZXMgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZUNvdW50O1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUuaXNNdWx0aXBsZUZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBtdWx0aUZpbGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBtdWx0aUZpbGUuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEZpbGVVcGxvYWRDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgbXVsdGlGaWxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEltYWdlVXBsb2FkXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkltYWdlOlxyXG4gICAgICAgICAgICBsZXQgaW1hZ2UgPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGltYWdlLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGltYWdlLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGltYWdlLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBpbWFnZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIGltYWdlLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBpbWFnZS5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgICAgaW1hZ2UuZmlsZU1heFNpemVJbk1CID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heEZpbGVTaXplSW5NQjtcclxuICAgICAgICAgICAgaW1hZ2UudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBpbWFnZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SW1hZ2VVcGxvYWRlckNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuQ292ZXJQaG90bzpcclxuICAgICAgICAgICAgbGV0IGNvdmVyUGhvdG8gPSBuZXcgSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNvdmVyUGhvdG8ubmFtZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm5hbWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtTnVtYmVyLmN1cnJlbnRWYWx1ZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xOdW1iZXIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgY292ZXJQaG90by5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLmlzUmVxdWlyZWQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaXNSZXF1aXJlZDtcclxuICAgICAgICAgICAgY292ZXJQaG90by52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY292ZXJQaG90by5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhGaWxlU2l6ZUluTUIpXHJcbiAgICAgICAgICAgICAgY292ZXJQaG90by5maWxlTWF4U2l6ZUluTUIgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4RmlsZVNpemVJbk1CO1xyXG4gICAgICAgICAgICBjb3ZlclBob3RvLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY292ZXJQaG90by5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8SW1hZ2VVcGxvYWRlckNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIEltYWdlVXBsb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBjb3ZlclBob3RvXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcbiAgICAgICAgICAvLyNyZWdpb24gTW9iaWxlXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk1vYmlsZTpcclxuICAgICAgICAgICAgbGV0IG1vYmlsZSA9IG5ldyBQaG9uZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgbW9iaWxlLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG1vYmlsZS5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBtb2JpbGUubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIG1vYmlsZS5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG1vYmlsZS52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbW9iaWxlLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBtb2JpbGUuYWxsb3dTZWFyY2ggPSB0cnVlO1xyXG4gICAgICAgICAgICBtb2JpbGUucGhvbmVWYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgbW9iaWxlLnNlbGVjdEZpcnN0Q291bnRyeSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1vYmlsZS5lbmFibGVQbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIG1vYmlsZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG1vYmlsZS5jdXN0b21WYWxpZGF0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRTZXJ2aWNlLnJlbmRlckR5bmFtaWNDb21wb25lbnQ8UGhvbmVDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBQaG9uZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIG1vYmlsZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBNdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLk11bHRpbGluZVRleHQ6XHJcbiAgICAgICAgICAgIGxldCBtdWx0aWxpbmVUZXh0ID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0Lm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQuaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5pc1JlcXVpcmVkID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmlzUmVxdWlyZWQ7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQudmlld1R5cGUgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMudmlld1R5cGU7XHJcbiAgICAgICAgICAgIG11bHRpbGluZVRleHQubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICAgIG11bHRpbGluZVRleHQubWF4TGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5taW5MZW5ndGgpXHJcbiAgICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5taW5MZW5ndGggPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoO1xyXG4gICAgICAgICAgICBtdWx0aWxpbmVUZXh0LnJvd3MgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMucm93cztcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgbXVsdGlsaW5lVGV4dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIG11bHRpbGluZVRleHQuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRleHRBcmVhQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVGV4dEFyZWFDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBtdWx0aWxpbmVUZXh0XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIEhUTUxcclxuICAgICAgICAgIGNhc2UgRGF0YVR5cGUuSFRNTDpcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSBuZXcgSHRtbEVkaXRvck9wdGlvbnMoKTtcclxuICAgICAgICAgICAgaHRtbC5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBodG1sLmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGh0bWwubGFiZWxLZXkgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxLZXk7XHJcbiAgICAgICAgICAgIGh0bWwuaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBodG1sLnZpZXdUeXBlID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLnZpZXdUeXBlO1xyXG4gICAgICAgICAgICBodG1sLmxhYmVsRGVzY3JpcHRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgID8gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgICBodG1sLm1heExlbmd0aCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubWluTGVuZ3RoKVxyXG4gICAgICAgICAgICAgIGh0bWwubWluTGVuZ3RoID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm1pbkxlbmd0aDtcclxuICAgICAgICAgICAgaHRtbC5oZWlnaHQgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMucm93cztcclxuICAgICAgICAgICAgaHRtbC5mb3JjZURpcmVjdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5mb3JjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgaHRtbC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGh0bWwuY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PEh0bWxFZGl0b3JDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbSxcclxuICAgICAgICAgICAgICBIdG1sRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgaHRtbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgICAgICAgIC8vI3JlZ2lvbiBCb29sZWFuXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkJvb2xlYW46XHJcbiAgICAgICAgICAgIGxldCBib29sZWFuID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBib29sZWFuLm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGJvb2xlYW4uaGlkZUxhYmVsID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmhpZGVMYWJlbDtcclxuICAgICAgICAgICAgYm9vbGVhbi5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgYm9vbGVhbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgYm9vbGVhbi5sYWJlbERlc2NyaXB0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsRGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICA/IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgOiAnJztcclxuICAgICAgICAgICAgYm9vbGVhbi52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGJvb2xlYW4uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PFRvZ2dsZXNsaWRlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICB0aGlzLml0ZW0sXHJcbiAgICAgICAgICAgICAgVG9nZ2xlc2xpZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgICBib29sZWFuXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIExvY2F0aW9uXHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkxvY2F0aW9uOlxyXG4gICAgICAgICAgICBsZXQgbG9jYXRpb24gPSBuZXcgTWFwQXV0b0NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5uYW1lID1cclxuICAgICAgICAgICAgICB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubmFtZSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW1OdW1iZXIuY3VycmVudFZhbHVlICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbE51bWJlci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5oaWRlTGFiZWwgPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuaGlkZUxhYmVsO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5sYWJlbEtleSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbEtleTtcclxuICAgICAgICAgICAgbG9jYXRpb24uaXNSZXF1aXJlZCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5pc1JlcXVpcmVkO1xyXG4gICAgICAgICAgICBsb2NhdGlvbi52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgbG9jYXRpb24ubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgbG9jYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50U2VydmljZS5yZW5kZXJEeW5hbWljQ29tcG9uZW50PE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgICAgICAgLy8jcmVnaW9uIENoZWNrQm94XHJcbiAgICAgICAgICBjYXNlIERhdGFUeXBlLkNoZWNrQm94OlxyXG4gICAgICAgICAgICBsZXQgY2hlY2tCb3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94Lm5hbWUgPVxyXG4gICAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5uYW1lICtcclxuICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgIGNoYW5nZXMuaXRlbU51bWJlci5jdXJyZW50VmFsdWUgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sTnVtYmVyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGNoZWNrQm94LmhpZGVMYWJlbCA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5oaWRlTGFiZWw7XHJcbiAgICAgICAgICAgIGNoZWNrQm94LmxhYmVsS2V5ID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmxhYmVsS2V5O1xyXG4gICAgICAgICAgICBjaGVja0JveC52aWV3VHlwZSA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy52aWV3VHlwZTtcclxuICAgICAgICAgICAgY2hlY2tCb3gubGFiZWxEZXNjcmlwdGlvbiA9IHRoaXMucmVwZWF0ZXJGaWVsZC5jb250cm9sT3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgPyB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMubGFiZWxEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgIGNoZWNrQm94Lm91dHB1dEZ1bmN0aW9uID0gdGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLm91dHB1dEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICBjaGVja0JveC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBlYXRlckZpZWxkLmNvbnRyb2xPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGNoZWNrQm94LmN1c3RvbVZhbGlkYXRpb24gPSB0aGlzLnJlcGVhdGVyRmllbGQuY29udHJvbE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbXBvbmVudFNlcnZpY2UucmVuZGVyRHluYW1pY0NvbXBvbmVudDxDaGVja0JveENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtLFxyXG4gICAgICAgICAgICAgIENoZWNrQm94Q29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgICAgY2hlY2tCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAjSXRlbT48L25nLWNvbnRhaW5lcj5cclxuIl19