@sapui5/sap.fe.macros 1.140.0 → 1.141.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 (199) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +14 -10
  14. package/src/sap/fe/macros/Field.ts +15 -12
  15. package/src/sap/fe/macros/MacroAPI.js +9 -4
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  17. package/src/sap/fe/macros/MultiValueField.js +10 -5
  18. package/src/sap/fe/macros/MultiValueField.tsx +7 -1
  19. package/src/sap/fe/macros/Page.js +5 -7
  20. package/src/sap/fe/macros/Page.tsx +4 -6
  21. package/src/sap/fe/macros/Paginator.js +9 -4
  22. package/src/sap/fe/macros/Paginator.tsx +12 -3
  23. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  24. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  25. package/src/sap/fe/macros/Status.js +38 -13
  26. package/src/sap/fe/macros/Status.tsx +26 -6
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  33. package/src/sap/fe/macros/chart/Chart.js +2 -2
  34. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  35. package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
  36. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
  37. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  38. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  39. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  40. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  41. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
  42. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
  43. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  44. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  45. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  46. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  47. package/src/sap/fe/macros/controls/Section.js +4 -3
  48. package/src/sap/fe/macros/controls/Section.ts +3 -2
  49. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  50. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  51. package/src/sap/fe/macros/field/Field.js +2 -2
  52. package/src/sap/fe/macros/field/Field.tsx +1 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  55. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  56. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  57. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  58. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  59. package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
  60. package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
  61. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  62. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  63. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  64. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  65. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  66. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  67. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  68. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  69. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  70. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  71. package/src/sap/fe/macros/form/Form.block.js +7 -8
  72. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  73. package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
  74. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
  75. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  76. package/src/sap/fe/macros/form/FormDelegate.js +6 -9
  77. package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
  78. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  79. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  80. package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
  81. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
  82. package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
  83. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
  84. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  85. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  86. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  87. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
  88. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  89. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  90. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  91. package/src/sap/fe/macros/library.js +1 -1
  92. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  93. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  94. package/src/sap/fe/macros/messagebundle.properties +20 -2
  95. package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
  96. package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
  97. package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
  98. package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
  99. package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
  100. package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
  101. package/src/sap/fe/macros/messagebundle_da.properties +1 -1
  102. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  103. package/src/sap/fe/macros/messagebundle_el.properties +1 -1
  104. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  105. package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  106. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  107. package/src/sap/fe/macros/messagebundle_es.properties +2 -2
  108. package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
  109. package/src/sap/fe/macros/messagebundle_et.properties +1 -1
  110. package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
  111. package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
  112. package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
  113. package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
  114. package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
  115. package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
  116. package/src/sap/fe/macros/messagebundle_id.properties +5 -5
  117. package/src/sap/fe/macros/messagebundle_it.properties +1 -1
  118. package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
  119. package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
  120. package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
  121. package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  122. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  123. package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
  124. package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
  125. package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
  126. package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
  127. package/src/sap/fe/macros/messagebundle_no.properties +1 -1
  128. package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
  129. package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
  130. package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
  131. package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
  132. package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
  133. package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
  134. package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
  135. package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
  136. package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
  137. package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
  138. package/src/sap/fe/macros/messagebundle_th.properties +1 -1
  139. package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
  140. package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
  141. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
  143. package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
  144. package/src/sap/fe/macros/messages/MessageButton.js +1 -1
  145. package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
  146. package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
  147. package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
  148. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  149. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  150. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
  151. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
  152. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  153. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  154. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  155. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  156. package/src/sap/fe/macros/table/Column.js +14 -2
  157. package/src/sap/fe/macros/table/Column.ts +7 -0
  158. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  159. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  160. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  161. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  162. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
  163. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
  164. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  165. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  166. package/src/sap/fe/macros/table/Table.block.js +188 -147
  167. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  168. package/src/sap/fe/macros/table/Table.js +16 -10
  169. package/src/sap/fe/macros/table/Table.tsx +16 -10
  170. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  171. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  172. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  173. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  174. package/src/sap/fe/macros/table/TableHelper.js +2 -2
  175. package/src/sap/fe/macros/table/TableHelper.ts +1 -1
  176. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  177. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  178. package/src/sap/fe/macros/table/Utils.js +3 -2
  179. package/src/sap/fe/macros/table/Utils.ts +7 -2
  180. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
  181. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
  182. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  183. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  184. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  185. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  186. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  187. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  188. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  189. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  190. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  191. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  192. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  193. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  194. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  195. package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
  196. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
  197. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
  198. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
  199. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
@@ -2,14 +2,19 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/Form", "sap/fe/core/templating/DataModelPathHelper"], function (BuildingBlockSupport, BuildingBlockTemplatingBase, MetaModelConverter, Form, DataModelPathHelper) {
5
+ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor", "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/Form", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "../CommonHelper", "../field/FieldTemplating", "./FormHelper"], function (BuildingBlockSupport, BuildingBlockTemplateProcessor, BuildingBlockTemplatingBase, MetaModelConverter, Form, StableIDHelper, DataModelPathHelper, UIFormatters, CommonHelper, FieldTemplating, FormHelper) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;
9
9
  var _exports = {};
10
+ var getVisibleExpression = FieldTemplating.getVisibleExpression;
11
+ var isMultiValueField = UIFormatters.isMultiValueField;
12
+ var getRequiredExpressionForConnectedDataField = UIFormatters.getRequiredExpressionForConnectedDataField;
10
13
  var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
14
+ var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
11
15
  var createFormDefinition = Form.createFormDefinition;
12
16
  var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
17
+ var xml = BuildingBlockTemplateProcessor.xml;
13
18
  var defineBuildingBlock = BuildingBlockSupport.defineBuildingBlock;
14
19
  var blockEvent = BuildingBlockSupport.blockEvent;
15
20
  var blockAttribute = BuildingBlockSupport.blockAttribute;
@@ -39,8 +44,7 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
39
44
  */
40
45
  let FormContainerBlock = (_dec = defineBuildingBlock({
41
46
  name: "FormContainer",
42
- namespace: "sap.fe.macros",
43
- fragment: "sap.fe.macros.form.FormContainer"
47
+ namespace: "sap.fe.macros"
44
48
  }), _dec2 = blockAttribute({
45
49
  type: "string"
46
50
  }), _dec3 = blockAttribute({
@@ -149,10 +153,557 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
149
153
  const oFormDefinition = createFormDefinition(oFacetDefinition, "true", oConverterContext);
150
154
  _this.dataFieldCollection = oFormDefinition.formContainers[0].formElements;
151
155
  }
156
+ // We need the view id for the form elements stable ids generation
157
+ _this.contentId = settings.viewId;
152
158
  return _this;
153
159
  }
160
+
161
+ /**
162
+ * Returns the template for the FormContainer.
163
+ * @returns The XML template string.
164
+ */
154
165
  _exports = FormContainerBlock;
155
166
  _inheritsLoose(FormContainerBlock, _BuildingBlockTemplat);
167
+ var _proto = FormContainerBlock.prototype;
168
+ _proto.getTemplate = function getTemplate() {
169
+ const overflowToolbarID = this.id ? StableIDHelper.generate([this.id, "FormActionsToolbar"]) : undefined;
170
+ const dataModelObject = getInvolvedDataModelObjects(this.contextPath, this.metaPath);
171
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, dataModelObject);
172
+ return xml`
173
+ <f:FormContainer
174
+ xmlns="sap.m"
175
+ xmlns:f="sap.ui.layout.form"
176
+ xmlns:macro="sap.fe.macros"
177
+ xmlns:macroForm="sap.fe.macros.form"
178
+ xmlns:internalMacro="sap.fe.macros.internal"
179
+ xmlns:core="sap.ui.core"
180
+ xmlns:controls="sap.fe.macros.controls"
181
+ xmlns:dt="sap.ui.dt"
182
+ xmlns:macrodata="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
183
+ xmlns:fpm="sap.fe.macros.fpm"
184
+ xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
185
+ template:require="{
186
+ MODEL: 'sap/ui/model/odata/v4/AnnotationHelper',
187
+ ID: 'sap/fe/core/helpers/StableIdHelper',
188
+ COMMON: 'sap/fe/macros/CommonHelper',
189
+ FORM: 'sap/fe/macros/form/FormHelper',
190
+ UI: 'sap/fe/core/templating/UIFormatters',
191
+ DataField: 'sap/fe/core/templating/DataFieldFormatters',
192
+ FieldTemplating: 'sap/fe/macros/field/FieldTemplating',
193
+ Property: 'sap/fe/core/templating/PropertyFormatters',
194
+ FIELD: 'sap/fe/macros/field/FieldHelper',
195
+ MACRO: 'sap/fe/macros/MacroTemplating'
196
+ }"
197
+
198
+ core:require="{FormContainerRuntime: 'sap/fe/macros/form/FormContainerAPI'}"
199
+ dt:designtime="${this.designtimeSettings}"
200
+ id="${this.id || undefined}"
201
+ visible="${this.visible}"
202
+ macrodata:navigationPath="${this.navigationPath}"
203
+ macrodata:etName="${this.contextPath.getObject("./@sapui.name")}"
204
+ macrodata:UiHiddenPresent="${this.hasUiHiddenAnnotation}"
205
+ >
206
+
207
+ <template:if test="${this.title}">
208
+ <f:title>
209
+ <core:Title level="${this.titleLevel}" text="${this.title}" />
210
+ </f:title>
211
+ </template:if>
212
+
213
+ <template:if test="${this.actions}">
214
+ <template:then>
215
+ <f:toolbar>
216
+ <OverflowToolbar
217
+ id="${overflowToolbarID}"
218
+ ${this.attr("binding", bindingString)}
219
+ >
220
+ <Title level="${this.titleLevel}" text="${this.title}" />
221
+ <ToolbarSpacer />
222
+ <template:repeat list="{actions>}" var="action">
223
+ <core:Fragment fragmentName="sap.fe.macros.form.FormActionButtons" type="XML" />
224
+ </template:repeat>
225
+ </OverflowToolbar>
226
+ </f:toolbar>
227
+ </template:then>
228
+ </template:if>
229
+
230
+ <f:dependents>
231
+ <macroForm:FormContainerAPI formContainerId="${this.id}" showDetails="{internal>showDetails}" />
232
+ </f:dependents>
233
+
234
+ <f:formElements>
235
+ ${this.getTemplatedFormElements()}
236
+ </f:formElements>
237
+
238
+ </f:FormContainer>`;
239
+ }
240
+
241
+ /**
242
+ * Returns the templated form elements.
243
+ * @returns The XML string for the form elements.
244
+ */;
245
+ _proto.getTemplatedFormElements = function getTemplatedFormElements() {
246
+ return xml`
247
+ <template:with path="dataFieldCollection>" var="formElements">
248
+ ${this.getInnerTemplatedFormElements()}
249
+ </template:with>`;
250
+ }
251
+
252
+ /**
253
+ * Returns the inner templated form elements, including DataPoint and Contact templates.
254
+ * @returns The XML string for the inner form elements.
255
+ */;
256
+ _proto.getInnerTemplatedFormElements = function getInnerTemplatedFormElements() {
257
+ let getDataPointTemplate = "";
258
+ if (this.dataFieldCollection && this.dataFieldCollection.length > 0) {
259
+ // We need to consider the first element that has an annotationPath
260
+ const firstElementWithAnnotationPath = this.dataFieldCollection.find(df => !!df.annotationPath);
261
+ let idPrefix = "";
262
+ const isEditableHeader = this.id?.includes("HeaderFacet::FormContainer") === true;
263
+ let formElementId = "undefined";
264
+ if (this.id) {
265
+ if (isEditableHeader) {
266
+ formElementId = `${this.id}::FormElement`;
267
+ idPrefix = `${this.id}::FormElement`;
268
+ } else {
269
+ formElementId = `${StableIDHelper.generate([this.id, "FormElement", this.dataFieldCollection[0].key])}`;
270
+ idPrefix = `${StableIDHelper.generate([this.id, "FormElement", this.dataFieldCollection[0].key])}`;
271
+ }
272
+ }
273
+ if (firstElementWithAnnotationPath?.annotationPath) {
274
+ const computedDataModelObject = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(firstElementWithAnnotationPath?.annotationPath || ""));
275
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, computedDataModelObject);
276
+ const designtime = computedDataModelObject?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
277
+ getDataPointTemplate = xml`
278
+ <template:then>
279
+ <template:with path="formElements>0/annotationPath" var="dataPoint">
280
+ <f:FormElement
281
+ dt:designtime="${designtime}"
282
+ id="${formElementId}"
283
+ label="{dataPoint>@@FIELD.computeLabelText}"
284
+ visible="${getVisibleExpression(computedDataModelObject)}"
285
+ ${this.attr("binding", bindingString)}
286
+ >
287
+ <f:fields>
288
+ <macro:Field
289
+ idPrefix="${idPrefix}"
290
+ vhIdPrefix="${this.id ? StableIDHelper.generate([this.id, "FieldValueHelp"]) : ""}"
291
+ contextPath="${this.entitySet?.getPath()}"
292
+ metaPath="${this.dataFieldCollection[0].annotationPath}"
293
+ editMode="${this.displayMode === true ? "Display" : undefined}"
294
+ onChange="${this.onChange}"
295
+ >
296
+ <formatOptions textAlignMode="Form" showEmptyIndicator="true" />
297
+ </macro:Field>
298
+ </f:fields>
299
+ </f:FormElement>
300
+ </template:with>
301
+ </template:then>
302
+ `;
303
+ }
304
+ }
305
+ const getContactTemplate = xml`
306
+ <template:elseif
307
+ test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.Communication.v1.Contact') > -1 }"
308
+ >
309
+ <template:with path="formElements>0/annotationPath" var="metaPath">
310
+ <f:FormElement
311
+ dt:designtime="{= \${metaPath>./@com.sap.vocabularies.UI.v1.AdaptationHidden} ? 'not-adaptable-tree' : 'sap/fe/macros/form/FormElement.designtime' }"
312
+ binding="{= FORM.generateBindingExpression(\${this.navigationPath},\${contextPath>@@UI.getDataModelObjectPath})}"
313
+ >
314
+ <f:label>
315
+ <Label
316
+ text="{metaPath>fn/$Path@com.sap.vocabularies.Common.v1.Label}"
317
+ visible="{= FieldTemplating.getVisibleExpression(\${dataField>@@UI.getDataModelObjectPath})}"
318
+ >
319
+ <layoutData>
320
+ <f:ColumnElementData cellsLarge="12" />
321
+ </layoutData>
322
+ </Label>
323
+ </f:label>
324
+ <f:fields>
325
+ <macro:Contact
326
+ metaPath="{metaPath>@@COMMON.getMetaPath}"
327
+ contextPath="{contextPath>@@COMMON.getMetaPath}"
328
+ visible="true"
329
+ />
330
+ </f:fields>
331
+ </f:FormElement>
332
+ </template:with>
333
+ </template:elseif>`;
334
+ return xml`
335
+ <template:if test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.UI.v1.DataPoint') > -1 }">
336
+ ${getDataPointTemplate}
337
+ ${getContactTemplate}
338
+ <template:else>
339
+ ${this.getDataFieldsForAnnotations()}
340
+ </template:else>
341
+ </template:if>
342
+ `;
343
+ }
344
+
345
+ /**
346
+ * Generates the template for a form element with connected fields.
347
+ * @param formElement The form element.
348
+ * @returns The XML string for the connected fields form element.
349
+ */;
350
+ _proto.getConnectedFieldsFormElement = function getConnectedFieldsFormElement(formElement) {
351
+ let connectedFieldElements = "";
352
+ for (const connectedField of formElement.connectedFields) {
353
+ const model = this.contextPath.getModel();
354
+ const tempName = connectedField.originalObject?.fullyQualifiedName;
355
+ const path = tempName?.substring(tempName.lastIndexOf("/") + 1);
356
+ const bindingContext = model.createBindingContext(formElement.annotationPath + "Target/$AnnotationPath/Data/" + path);
357
+ const delimiter = CommonHelper.getDelimiter(connectedField.originalTemplate ?? "");
358
+ const notLastIndexCondition = formElement.connectedFields.indexOf(connectedField) !== formElement.connectedFields.length - 1 ? xml`<Text
359
+ text="${delimiter}"
360
+ class="sapUiSmallMarginBeginEnd"
361
+ width="100%"
362
+ />` : "";
363
+ const computedIdPrefix = this.id ? StableIDHelper.generate([this.id, "SemanticFormElement", formElement.key, connectedField.originalObject?.Value.path]) : "";
364
+ const computedVhIdPrefix = this.id ? StableIDHelper.generate([this.id, formElement.key, "FieldValueHelp"]) : "";
365
+ let connectedFieldElement = "";
366
+ connectedFieldElement = xml`
367
+ <macro:Field
368
+ idPrefix="${computedIdPrefix}"
369
+ vhIdPrefix="${computedVhIdPrefix}"
370
+ contextPath="${this.entitySet?.getPath()}"
371
+ metaPath="${bindingContext.getPath()}"
372
+ onChange="${this.onChange}"
373
+ ariaLabelledBy="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
374
+ >
375
+ <formatOptions
376
+ textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
377
+ textMaxLines="${formElement.formatOptions?.textMaxLines}"
378
+ textMaxCharactersDisplay="${formElement.formatOptions?.textMaxCharactersDisplay}"
379
+ textMaxLength="${formElement.formatOptions?.textMaxLength}"
380
+ textExpandBehaviorDisplay="${formElement.formatOptions?.textExpandBehaviorDisplay}"
381
+ textAlignMode="Form"
382
+ showEmptyIndicator="true"
383
+ fieldEditStyle="${formElement.formatOptions?.fieldEditStyle}"
384
+ radioButtonsHorizontalLayout="${formElement.formatOptions?.radioButtonsHorizontalLayout}"
385
+ />
386
+ <macro:layoutData>
387
+ <FlexItemData growFactor="{= %{ui>/isEditable} ? 1 : 0}" />
388
+ </macro:layoutData>
389
+ </macro:Field>
390
+ ${notLastIndexCondition}
391
+ `;
392
+ connectedFieldElements += connectedFieldElement;
393
+ }
394
+ const dataModelObjectForConnectedFields = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(formElement.annotationPath ?? ""));
395
+ let formElementId = "";
396
+ if (this.id) {
397
+ if (this.contentId) {
398
+ formElementId = `${this.contentId}--${StableIDHelper.generate([this.id, "SemanticFormElement", formElement.key])}`;
399
+ } else {
400
+ formElementId = `${StableIDHelper.generate([this.id, "SemanticFormElement", formElement.key])}`;
401
+ }
402
+ }
403
+ const visibleExpression = formElement.isPartOfPreview ? getVisibleExpression(dataModelObjectForConnectedFields) : "{= ${internal>showDetails} === true}";
404
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, dataModelObjectForConnectedFields);
405
+ const targetObject = dataModelObjectForConnectedFields?.targetObject?.Target?.$target;
406
+ const designtime = dataModelObjectForConnectedFields?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
407
+ const isRequired = getRequiredExpressionForConnectedDataField(dataModelObjectForConnectedFields)?.toString();
408
+ return xml`
409
+ <f:FormElement
410
+ xmlns:f="sap.ui.layout.form"
411
+ dt:designtime="${designtime}"
412
+ id="${formElementId}"
413
+ visible="${visibleExpression}"
414
+ ${this.attr("binding", bindingString)}
415
+ >
416
+ <f:label>
417
+ <Label
418
+ text="${targetObject?.Label ?? formElement.label}"
419
+ id="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
420
+
421
+ />
422
+ </f:label>
423
+ <f:fields>
424
+ <controls:FieldWrapper required="${isRequired}">
425
+ <HBox wrap="Wrap">
426
+ ${connectedFieldElements}
427
+ </HBox>
428
+ </controls:FieldWrapper>
429
+ </f:fields>
430
+ </f:FormElement>
431
+ `;
432
+ }
433
+
434
+ /**
435
+ * Generates the template for a form element representing a multivalue field.
436
+ * @param formElement The form element.
437
+ * @returns The XML string for the multi-value field form element.
438
+ */;
439
+ _proto.getMultiValueFieldFormElement = function getMultiValueFieldFormElement(formElement) {
440
+ const computedDataModelObject = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(formElement.annotationPath ?? ""));
441
+ const visibleExpression = formElement.isPartOfPreview ? getVisibleExpression(computedDataModelObject) : "{= ${internal>showDetails} === true}";
442
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, computedDataModelObject);
443
+ const formElementId = this.id ? `${StableIDHelper.generate([this.id, "FormElement", formElement.key])}` : "undefined";
444
+ const multiValueFieldId = this.id ? `${StableIDHelper.generate([this.id, "FormElement", formElement.key, "MultiValueField"])}` : "undefined";
445
+ const vhIdPrefix = this.id ? StableIDHelper.generate([this.id, "FieldValueHelp"]) : "";
446
+ const designtime = computedDataModelObject?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
447
+ return xml`
448
+ <f:FormElement
449
+ xmlns:macros="sap.fe.macros"
450
+ xmlns:multivaluefield="sap.fe.macros.multivaluefield"
451
+ dt:designtime="${designtime}"
452
+ id="${formElementId}"
453
+ label="${formElement.label}"
454
+ visible="${visibleExpression}"
455
+ ${this.attr("binding", bindingString)}
456
+ >
457
+ <f:fields>
458
+ <macros:MultiValueField
459
+ id="${multiValueFieldId}"
460
+ vhIdPrefix="${vhIdPrefix}"
461
+ contextPath="${this.entitySet?.getPath()}"
462
+ metaPath="${formElement.annotationPath}"
463
+ >
464
+ <macros:formatOptions>
465
+ <multivaluefield:FormatOptions showEmptyIndicator="true" />
466
+ </macros:formatOptions>
467
+ </macros:MultiValueField>
468
+ </f:fields>
469
+ </f:FormElement>`;
470
+ }
471
+
472
+ /**
473
+ * Generates the template for form elements representing a checkbox group.
474
+ * @param formElement The form element.
475
+ * @returns The XML string for the checkbox group form elements.
476
+ */;
477
+ _proto.getFieldGroupFormElement = function getFieldGroupFormElement(formElement) {
478
+ let fieldGroupElements = "";
479
+ //We template each element of the checkbox group
480
+ for (const groupElement of formElement.fieldGroupElements) {
481
+ const model = this.contextPath.getModel();
482
+ const tempName = groupElement.fullyQualifiedName;
483
+ const path = tempName?.substring(tempName.lastIndexOf("/") + 1);
484
+ const bindingContext = model.createBindingContext(formElement.annotationPath + "Target/$AnnotationPath/Data/" + path);
485
+ const groupElementDataModelObject = getInvolvedDataModelObjects(bindingContext);
486
+ const computedIdPrefix = this.id ? `${StableIDHelper.generate([this.id, "CheckBoxGroup", formElement.key, groupElementDataModelObject.targetObject?.Value?.path])}` : "";
487
+ const isBooleanFieldGroup = groupElementDataModelObject.targetObject?.Value?.$target?.type === "Edm.Boolean";
488
+ const fieldGroupElement = isBooleanFieldGroup ? xml`
489
+ <macro:Field
490
+ idPrefix="${computedIdPrefix}"
491
+ contextPath="${this.entitySet?.getPath()}"
492
+ metaPath="${bindingContext.getPath()}"
493
+ onChange="${this.onChange}"
494
+ ariaLabelledBy="${this.id ? StableIDHelper.generate([this.id, "FieldGroupFormElementLabel", formElement.key]) : ""}"
495
+ >
496
+ <formatOptions isFieldGroupItem="true" textAlignMode="Form" />
497
+ </macro:Field>
498
+ ` : "";
499
+ fieldGroupElements += fieldGroupElement;
500
+ }
501
+ const computedDataModelObject = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(formElement.annotationPath ?? ""));
502
+ const visibleExpression = formElement.isPartOfPreview ? getVisibleExpression(computedDataModelObject) : "{= ${internal>showDetails} === true}";
503
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, computedDataModelObject);
504
+ let fieldGroupFormElementId = "";
505
+ let labelID = "";
506
+ if (this.id) {
507
+ if (this.contentId) {
508
+ fieldGroupFormElementId = `${this.contentId}--${StableIDHelper.generate([this.id, "FieldGroupFormElement", formElement.key])}`;
509
+ labelID = `${this.contentId}--${StableIDHelper.generate([this.id, "FieldGroupFormElementLabel", formElement.key])}`;
510
+ } else {
511
+ fieldGroupFormElementId = `${StableIDHelper.generate([this.id, "FieldGroupFormElement", formElement.key])}`;
512
+ labelID = `${StableIDHelper.generate([this.id, "FieldGroupFormElementLabel", formElement.key])}`;
513
+ }
514
+ }
515
+ const targetObject = computedDataModelObject?.targetObject?.Target?.$target;
516
+ const designtime = computedDataModelObject?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
517
+ return xml`
518
+ <f:FormElement
519
+ xmlns:f="sap.ui.layout.form"
520
+ dt:designtime="${designtime}"
521
+ id="${fieldGroupFormElementId}"
522
+ visible="${visibleExpression}"
523
+ ${this.attr("binding", bindingString)}
524
+ >
525
+ <f:label>
526
+ <Label
527
+ text="${targetObject?.Label ?? formElement.label}"
528
+ id="${labelID}"
529
+ />
530
+ </f:label>
531
+ <f:fields>
532
+ <controls:RequiredFlexBox>
533
+ <FlexBox
534
+ direction="${formElement.formatOptions?.fieldGroupHorizontalLayout === true ? "Row" : "Column"}"
535
+ wrap="Wrap"
536
+ columnGap="1rem"
537
+ >
538
+ <items>
539
+ ${fieldGroupElements}
540
+ </items>
541
+ </FlexBox>
542
+ </controls:RequiredFlexBox>
543
+ </f:fields>
544
+ </f:FormElement>
545
+ `;
546
+ }
547
+
548
+ /**
549
+ * Generates the template for a form element representing a field.
550
+ * @param formElement The form element.
551
+ * @returns The XML string for the field form element.
552
+ */;
553
+ _proto.getFieldFormElement = function getFieldFormElement(formElement) {
554
+ const computedDataModelObject = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(formElement.annotationPath ?? ""));
555
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, computedDataModelObject);
556
+ const computedVhIdPrefix = StableIDHelper.generate([this.id, "FieldValueHelp"]);
557
+ let formElementId = "undefined";
558
+ const visibleExpression = formElement.isPartOfPreview ? getVisibleExpression(computedDataModelObject) : "{= ${internal>showDetails} === true}";
559
+ const computedIdPrefix = this.id ? `${StableIDHelper.generate([this.id, "FormElement", formElement.key])}` : "";
560
+ if (this.id) {
561
+ if (this.contentId) {
562
+ formElementId = `${this.contentId}--${StableIDHelper.generate([this.id, "FormElement", formElement.key])}`;
563
+ } else {
564
+ formElementId = `${StableIDHelper.generate([this.id, "FormElement", formElement.key])}`;
565
+ }
566
+ }
567
+ const designtime = computedDataModelObject?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
568
+ return xml`
569
+ <f:FormElement
570
+ xmlns:f="sap.ui.layout.form"
571
+ dt:designtime="${designtime}"
572
+ id="${formElementId}"
573
+ label="${formElement.label}"
574
+ visible="${visibleExpression}"
575
+ ${this.attr("binding", bindingString)}
576
+ >
577
+ <f:fields>
578
+ <macro:Field
579
+ idPrefix="${computedIdPrefix}"
580
+ vhIdPrefix="${computedVhIdPrefix}"
581
+ contextPath="${this.contextPath.getPath()}"
582
+ metaPath="${formElement.annotationPath}"
583
+ onChange="${this.onChange}"
584
+ readOnly="${formElement.readOnly}"
585
+ semanticObject="${formElement.semanticObject}"
586
+ >
587
+ <formatOptions
588
+ textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
589
+ textMaxLines="${formElement.formatOptions?.textMaxLines}"
590
+ textMaxLength="${formElement.formatOptions?.textMaxLength}"
591
+ textMaxCharactersDisplay="${formElement.formatOptions?.textMaxCharactersDisplay}"
592
+ textExpandBehaviorDisplay="${formElement.formatOptions?.textExpandBehaviorDisplay}"
593
+ textAlignMode="Form"
594
+ showEmptyIndicator="true"
595
+ fieldEditStyle="${formElement.formatOptions?.fieldEditStyle}"
596
+ radioButtonsHorizontalLayout="${formElement.formatOptions?.radioButtonsHorizontalLayout}"
597
+ dateTimePattern="${formElement.formatOptions?.pattern}"
598
+ useRadioButtonsForBoolean="${formElement.formatOptions?.useRadioButtonsForBoolean}"
599
+ />
600
+ </macro:Field>
601
+ </f:fields>
602
+ </f:FormElement>
603
+ `;
604
+ }
605
+
606
+ /**
607
+ * Generates the template for a custom form element.
608
+ * @param formElement The custom form element.
609
+ * @returns The XML string for the custom form element.
610
+ */;
611
+ _proto.getCustomFormElement = function getCustomFormElement(formElement) {
612
+ const propertyPath = this.contextPath.getPath() + "/" + formElement.propertyPath;
613
+ const computedDataModelObject = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(propertyPath));
614
+ const bindingString = FormHelper.generateBindingExpression(this.navigationPath, computedDataModelObject);
615
+ let formElementId = "";
616
+ if (this.id) {
617
+ if (this.contentId) {
618
+ formElementId = `${this.contentId}--${StableIDHelper.generate([this.id, formElement.id])}`;
619
+ } else {
620
+ formElementId = `${StableIDHelper.generate([this.id, formElement.id])}`;
621
+ }
622
+ }
623
+ const designtime = computedDataModelObject?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
624
+ const formElementKey = StableIDHelper.generate([this.id, formElement.key]);
625
+ return xml`
626
+ <f:FormElement
627
+ dt:designtime="${designtime}"
628
+ id="${formElementId}"
629
+ label="${formElement.label}"
630
+ visible="${formElement.visible}"
631
+ ${this.attr("binding", bindingString)}
632
+ >
633
+ <f:fields>
634
+ <macroForm:CustomFormElement
635
+ metaPath="${formElement.propertyPath}"
636
+ contextPath="${this.contextPath.getPath()}"
637
+ formElementKey="${formElementKey}"
638
+ >
639
+ <fpm:CustomFragment
640
+ id="${formElementKey}"
641
+ fragmentName="${formElement.template}"
642
+ contextPath="${this.contextPath.getPath()}"
643
+ />
644
+ </macroForm:CustomFormElement>
645
+ </f:fields>
646
+ </f:FormElement>
647
+ `;
648
+ }
649
+
650
+ /**
651
+ * Returns the template for a slot column for the given form element.
652
+ * @param formElement The form element.
653
+ * @returns The XML string for the slot column.
654
+ */;
655
+ _proto.getSlotColumn = function getSlotColumn(formElement) {
656
+ return xml`<slot name="${formElement.key}" />`;
657
+ }
658
+
659
+ /**
660
+ * Determines if the given data field is a multivalue field.
661
+ * @param dataField The data field to check.
662
+ * @returns True if the data field is a multivalue field, false otherwise.
663
+ */;
664
+ _proto.isMultiValueDataField = function isMultiValueDataField(dataField) {
665
+ let isMultiValueFieldCondition = false;
666
+ if (dataField.annotationPath) {
667
+ const bindingContext = this.contextPath.getModel().createBindingContext(dataField.annotationPath);
668
+ const valuePath = bindingContext.getObject()?.Value?.$Path;
669
+ if (valuePath) {
670
+ isMultiValueFieldCondition = isMultiValueField(enhanceDataModelPath(getInvolvedDataModelObjects(bindingContext), valuePath));
671
+ }
672
+ }
673
+ return isMultiValueFieldCondition;
674
+ }
675
+
676
+ /**
677
+ * Generates the template for all data fields for annotations.
678
+ * @returns The XML string for the data fields.
679
+ */;
680
+ _proto.getDataFieldsForAnnotations = function getDataFieldsForAnnotations() {
681
+ let returnString = "";
682
+ if (this.dataFieldCollection !== undefined) {
683
+ for (const dataField of this.dataFieldCollection) {
684
+ switch (dataField.type) {
685
+ case "Annotation":
686
+ if (dataField.connectedFields && dataField.connectedFields.length > 0) {
687
+ returnString += this.getConnectedFieldsFormElement(dataField);
688
+ } else if (this.isMultiValueDataField(dataField)) {
689
+ returnString += this.getMultiValueFieldFormElement(dataField);
690
+ } else if (dataField.fieldGroupElements && dataField.fieldGroupElements.length > 0) {
691
+ returnString += this.getFieldGroupFormElement(dataField);
692
+ } else {
693
+ returnString += this.getFieldFormElement(dataField);
694
+ }
695
+ break;
696
+ case "Default":
697
+ returnString += this.getCustomFormElement(dataField);
698
+ break;
699
+ default:
700
+ returnString += this.getSlotColumn(dataField);
701
+ break;
702
+ }
703
+ }
704
+ }
705
+ return xml`${returnString}`;
706
+ };
156
707
  return FormContainerBlock;
157
708
  }(BuildingBlockTemplatingBase), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "id", [_dec2], {
158
709
  configurable: true,
@@ -246,4 +797,4 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
246
797
  _exports = FormContainerBlock;
247
798
  return _exports;
248
799
  }, false);
249
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJmcmFnbWVudCIsIl9kZWMyIiwiYmxvY2tBdHRyaWJ1dGUiLCJ0eXBlIiwiX2RlYzMiLCJyZXF1aXJlZCIsImlzUHVibGljIiwiZXhwZWN0ZWRUeXBlcyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsImJsb2NrQWdncmVnYXRpb24iLCJfZGVjMTciLCJibG9ja0V2ZW50IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrVGVtcGxhdCIsInByb3BzIiwiZXh0ZXJuYWxDb25maWd1cmF0aW9uIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsImVudGl0eVNldCIsImNvbnRleHRQYXRoIiwiZm9ybUVsZW1lbnRzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIm9Db250ZXh0T2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1ldGFQYXRoIiwibUV4dHJhU2V0dGluZ3MiLCJvRmFjZXREZWZpbml0aW9uIiwidGFyZ2V0T2JqZWN0IiwiJFR5cGUiLCJMYWJlbCIsIlRhcmdldCIsIiR0YXJnZXQiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJwYXRoIiwidGVybSIsInZhbHVlIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImFubm90YXRpb25zIiwiZmllbGRzIiwib0NvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0IiwidW5kZWZpbmVkIiwib0Zvcm1EZWZpbml0aW9uIiwiY3JlYXRlRm9ybURlZmluaXRpb24iLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwiZm9ybUNvbnRhaW5lcnMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsInByb3RvdHlwZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGb3JtQ29udGFpbmVyLmJsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YmxvY2tBZ2dyZWdhdGlvbixcblx0YmxvY2tBdHRyaWJ1dGUsXG5cdGJsb2NrRXZlbnQsXG5cdGRlZmluZUJ1aWxkaW5nQmxvY2tcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGb3JtQ29udGFpbmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBPRGF0YSBWNCBtZXRhZGF0YS5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZvcm1Db250YWluZXJcbiAqIGlkPVwiU29tZUlkXCJcbiAqIGVudGl0eVNldD1cIntlbnRpdHlTZXQ+fVwiXG4gKiBkYXRhRmllbGRDb2xsZWN0aW9uID1cIntkYXRhRmllbGRDb2xsZWN0aW9uPn1cIlxuICogdGl0bGU9XCJzb21lVGl0bGVcIlxuICogbmF2aWdhdGlvblBhdGg9XCJ7VG9TdXBwbGllcn1cIlxuICogdmlzaWJsZT10cnVlXG4gKiBvbkNoYW5nZT1cIi5oYW5kbGVycy5vbkZpZWxkVmFsdWVDaGFuZ2VcIlxuICogLyZndDtcbiAqIDwvcHJlPlxuICogQHByaXZhdGVcbiAqL1xuQGRlZmluZUJ1aWxkaW5nQmxvY2soeyBuYW1lOiBcIkZvcm1Db250YWluZXJcIiwgbmFtZXNwYWNlOiBcInNhcC5mZS5tYWNyb3NcIiwgZnJhZ21lbnQ6IFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1Db250YWluZXJcIiB9KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybUNvbnRhaW5lckJsb2NrIGV4dGVuZHMgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIHtcblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZD86IHN0cmluZztcblxuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRpc1B1YmxpYzogdHJ1ZSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogQ29udGV4dDtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIlxuXHR9KVxuXHRlbnRpdHlTZXQ/OiBDb250ZXh0O1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdG1ldGFQYXRoITogQ29udGV4dDtcblxuXHQvKipcblx0ICogTWV0YWRhdGEgcGF0aCB0byB0aGUgZGF0YUZpZWxkQ29sbGVjdGlvblxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcImFycmF5XCJcblx0fSlcblx0ZGF0YUZpZWxkQ29sbGVjdGlvbj86IEZvcm1FbGVtZW50W107XG5cblx0LyoqXG5cdCAqIENvbnRyb2wgd2hldGhlciB0aGUgZm9ybSBpcyBpbiBkaXNwbGF5TW9kZSBvciBub3Rcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0ZGlzcGxheU1vZGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGl0bGUgb2YgdGhlIGZvcm0gY29udGFpbmVyXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHRpdGxlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBcImFyaWEtbGV2ZWxcIiBvZiB0aGUgZm9ybSB0aXRsZSwgdGl0bGVzIG9mIGludGVybmFsbHkgdXNlZCBmb3JtIGNvbnRhaW5lcnMgYXJlIG5lc3RlZCBzdWJzZXF1ZW50bHlcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic2FwLnVpLmNvcmUuVGl0bGVMZXZlbFwiLCBpc1B1YmxpYzogdHJ1ZSB9KVxuXHR0aXRsZUxldmVsID0gXCJBdXRvXCI7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgdGhlIGZvcm0gY29udGFpbmVyIHVzaW5nIGEgbmF2aWdhdGlvbiBwYXRoXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdG5hdmlnYXRpb25QYXRoPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBCaW5kaW5nIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmb3JtIGNvbnRhaW5lciB1c2luZyBhbiBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhblxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHR2aXNpYmxlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBVSSBoaWRkZW4gYW5ub3RhdGlvbiBpcyBwcmVzZW50IG9yIG5vdFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0aGFzVWlIaWRkZW5Bbm5vdGF0aW9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRmxleCBkZXNpZ250aW1lIHNldHRpbmdzIHRvIGJlIGFwcGxpZWRcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZGVzaWdudGltZVNldHRpbmdzID0gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUNvbnRhaW5lci5kZXNpZ250aW1lXCI7XG5cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGFjdGlvbnM/OiBCYXNlQWN0aW9uW107XG5cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM/OiBib29sZWFuO1xuXG5cdEBibG9ja0FnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZvcm0uRm9ybUVsZW1lbnRcIiB9KVxuXHRmb3JtRWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIENvbmZpZ3VyYWJsZU9iamVjdD4gPSB7fTtcblxuXHQvLyBKdXN0IHByb3hpZWQgZG93biB0byB0aGUgRmllbGQgbWF5IG5lZWQgdG8gc2VlIGlmIG5lZWRlZCBvciBub3Rcblx0QGJsb2NrRXZlbnQoKVxuXHRvbkNoYW5nZT86IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPEZvcm1Db250YWluZXJCbG9jaz4sIGV4dGVybmFsQ29uZmlndXJhdGlvbjogdW5rbm93biwgc2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5lbnRpdHlTZXQgPSB0aGlzLmNvbnRleHRQYXRoITtcblx0XHRpZiAodGhpcy5mb3JtRWxlbWVudHMgJiYgT2JqZWN0LmtleXModGhpcy5mb3JtRWxlbWVudHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxSZWZlcmVuY2VGYWNldD4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0XHRjb25zdCBtRXh0cmFTZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdGxldCBvRmFjZXREZWZpbml0aW9uID0gb0NvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0XHRcdC8vIFdyYXAgdGhlIGZhY2V0IGluIGEgZmFrZSBGYWNldCBhbm5vdGF0aW9uXG5cdFx0XHRvRmFjZXREZWZpbml0aW9uID0ge1xuXHRcdFx0XHQkVHlwZTogVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQsXG5cdFx0XHRcdExhYmVsOiBvRmFjZXREZWZpbml0aW9uPy5MYWJlbCxcblx0XHRcdFx0VGFyZ2V0OiB7XG5cdFx0XHRcdFx0JHRhcmdldDogb0ZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IG9GYWNldERlZmluaXRpb24/LmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdHRlcm06IFwiXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRcdHZhbHVlOiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Db250ZXh0T2JqZWN0UGF0aClcblx0XHRcdFx0fSxcblx0XHRcdFx0YW5ub3RhdGlvbnM6IHt9LFxuXHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IG9GYWNldERlZmluaXRpb24/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0fSBhcyB1bmtub3duIGFzIFJlZmVyZW5jZUZhY2V0O1xuXHRcdFx0bUV4dHJhU2V0dGluZ3Nbb0ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWVdID0geyBmaWVsZHM6IHRoaXMuZm9ybUVsZW1lbnRzIH07XG5cdFx0XHRjb25zdCBvQ29udmVydGVyQ29udGV4dCA9IHRoaXMuZ2V0Q29udmVydGVyQ29udGV4dChcblx0XHRcdFx0b0NvbnRleHRPYmplY3RQYXRoLFxuXHRcdFx0XHQvKnRoaXMuY29udGV4dFBhdGgqLyB1bmRlZmluZWQsXG5cdFx0XHRcdHNldHRpbmdzLFxuXHRcdFx0XHRtRXh0cmFTZXR0aW5nc1xuXHRcdFx0KTtcblx0XHRcdGNvbnN0IG9Gb3JtRGVmaW5pdGlvbiA9IGNyZWF0ZUZvcm1EZWZpbml0aW9uKG9GYWNldERlZmluaXRpb24sIFwidHJ1ZVwiLCBvQ29udmVydGVyQ29udGV4dCk7XG5cblx0XHRcdHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbiA9IG9Gb3JtRGVmaW5pdGlvbi5mb3JtQ29udGFpbmVyc1swXS5mb3JtRWxlbWVudHM7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFqQkEsSUFtQnFCQSxrQkFBa0IsSUFBQUMsSUFBQSxHQUR0Q0MsbUJBQW1CLENBQUM7SUFBRUMsSUFBSSxFQUFFLGVBQWU7SUFBRUMsU0FBUyxFQUFFLGVBQWU7SUFB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
800
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInhtbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJ0aXRsZSIsInRpdGxlTGV2ZWwiLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJjb25uZWN0ZWRGaWVsZCIsImNvbm5lY3RlZEZpZWxkcyIsIm1vZGVsIiwidGVtcE5hbWUiLCJvcmlnaW5hbE9iamVjdCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYmluZGluZ0NvbnRleHQiLCJkZWxpbWl0ZXIiLCJDb21tb25IZWxwZXIiLCJnZXREZWxpbWl0ZXIiLCJvcmlnaW5hbFRlbXBsYXRlIiwibm90TGFzdEluZGV4Q29uZGl0aW9uIiwiaW5kZXhPZiIsImNvbXB1dGVkSWRQcmVmaXgiLCJWYWx1ZSIsImNvbXB1dGVkVmhJZFByZWZpeCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudCIsImZvcm1hdE9wdGlvbnMiLCJ0ZXh0TGluZXNFZGl0IiwidGV4dE1heExpbmVzIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsInRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXkiLCJmaWVsZEVkaXRTdHlsZSIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMiLCJ2aXNpYmxlRXhwcmVzc2lvbiIsImlzUGFydE9mUHJldmlldyIsImlzUmVxdWlyZWQiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJ0b1N0cmluZyIsImxhYmVsIiwiZ2V0TXVsdGlWYWx1ZUZpZWxkRm9ybUVsZW1lbnQiLCJtdWx0aVZhbHVlRmllbGRJZCIsInZoSWRQcmVmaXgiLCJnZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQiLCJmaWVsZEdyb3VwRWxlbWVudHMiLCJncm91cEVsZW1lbnQiLCJncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QiLCJpc0Jvb2xlYW5GaWVsZEdyb3VwIiwiZmllbGRHcm91cEVsZW1lbnQiLCJmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCIsImxhYmVsSUQiLCJmaWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCIsImdldEZpZWxkRm9ybUVsZW1lbnQiLCJyZWFkT25seSIsInNlbWFudGljT2JqZWN0IiwicGF0dGVybiIsInVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW4iLCJnZXRDdXN0b21Gb3JtRWxlbWVudCIsInByb3BlcnR5UGF0aCIsImZvcm1FbGVtZW50S2V5IiwidGVtcGxhdGUiLCJnZXRTbG90Q29sdW1uIiwiaXNNdWx0aVZhbHVlRGF0YUZpZWxkIiwiZGF0YUZpZWxkIiwiaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24iLCJ2YWx1ZVBhdGgiLCIkUGF0aCIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJyZXR1cm5TdHJpbmciLCJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvcm1Db250YWluZXIuYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29ubmVjdGVkRmllbGRzVHlwZSxcblx0Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludFR5cGUsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRibG9ja0FnZ3JlZ2F0aW9uLFxuXHRibG9ja0F0dHJpYnV0ZSxcblx0YmxvY2tFdmVudCxcblx0ZGVmaW5lQnVpbGRpbmdCbG9ja1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrU3VwcG9ydFwiO1xuaW1wb3J0IHsgeG1sLCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkZvcm1FbGVtZW50LCBDdXN0b21Gb3JtRWxlbWVudCwgRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSURIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkLCBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgRm9ybUhlbHBlciBmcm9tIFwiLi9Gb3JtSGVscGVyXCI7XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRm9ybUNvbnRhaW5lciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgT0RhdGEgVjQgbWV0YWRhdGEuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGb3JtQ29udGFpbmVyXG4gKiBpZD1cIlNvbWVJZFwiXG4gKiBlbnRpdHlTZXQ9XCJ7ZW50aXR5U2V0Pn1cIlxuICogZGF0YUZpZWxkQ29sbGVjdGlvbiA9XCJ7ZGF0YUZpZWxkQ29sbGVjdGlvbj59XCJcbiAqIHRpdGxlPVwic29tZVRpdGxlXCJcbiAqIG5hdmlnYXRpb25QYXRoPVwie1RvU3VwcGxpZXJ9XCJcbiAqIHZpc2libGU9dHJ1ZVxuICogb25DaGFuZ2U9XCIuaGFuZGxlcnMub25GaWVsZFZhbHVlQ2hhbmdlXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVCdWlsZGluZ0Jsb2NrKHsgbmFtZTogXCJGb3JtQ29udGFpbmVyXCIsIG5hbWVzcGFjZTogXCJzYXAuZmUubWFjcm9zXCIgfSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1Db250YWluZXJCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSB7XG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQ/OiBzdHJpbmc7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiXVxuXHR9KVxuXHRjb250ZXh0UGF0aCE6IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCJcblx0fSlcblx0ZW50aXR5U2V0PzogQ29udGV4dDtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRpc1B1YmxpYzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRtZXRhUGF0aCE6IENvbnRleHQ7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIGRhdGFGaWVsZENvbGxlY3Rpb25cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJhcnJheVwiXG5cdH0pXG5cdGRhdGFGaWVsZENvbGxlY3Rpb24/OiBGb3JtRWxlbWVudFtdO1xuXG5cdC8qKlxuXHQgKiBDb250cm9sIHdoZXRoZXIgdGhlIGZvcm0gaXMgaW4gZGlzcGxheU1vZGUgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGRpc3BsYXlNb2RlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRpdGxlIG9mIHRoZSBmb3JtIGNvbnRhaW5lclxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHR0aXRsZT86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgXCJhcmlhLWxldmVsXCIgb2YgdGhlIGZvcm0gdGl0bGUsIHRpdGxlcyBvZiBpbnRlcm5hbGx5IHVzZWQgZm9ybSBjb250YWluZXJzIGFyZSBuZXN0ZWQgc3Vic2VxdWVudGx5XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInNhcC51aS5jb3JlLlRpdGxlTGV2ZWxcIiwgaXNQdWJsaWM6IHRydWUgfSlcblx0dGl0bGVMZXZlbCA9IFwiQXV0b1wiO1xuXG5cdC8qKlxuXHQgKiBCaW5kaW5nIHRoZSBmb3JtIGNvbnRhaW5lciB1c2luZyBhIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRuYXZpZ2F0aW9uUGF0aD86IHN0cmluZztcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYW4gZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dmlzaWJsZT86IHN0cmluZztcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgVUkgaGlkZGVuIGFubm90YXRpb24gaXMgcHJlc2VudCBvciBub3Rcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc1VpSGlkZGVuQW5ub3RhdGlvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEZsZXggZGVzaWdudGltZSBzZXR0aW5ncyB0byBiZSBhcHBsaWVkXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGRlc2lnbnRpbWVTZXR0aW5ncyA9IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1Db250YWluZXIuZGVzaWdudGltZVwiO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcblxuXHRAYmxvY2tBZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1FbGVtZW50XCIgfSlcblx0Zm9ybUVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDb25maWd1cmFibGVPYmplY3Q+ID0ge307XG5cblx0Ly8gSnVzdCBwcm94aWVkIGRvd24gdG8gdGhlIEZpZWxkIG1heSBuZWVkIHRvIHNlZSBpZiBuZWVkZWQgb3Igbm90XG5cdEBibG9ja0V2ZW50KClcblx0b25DaGFuZ2U/OiBzdHJpbmc7XG5cblx0Y29udGVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IFByb3BlcnRpZXNPZjxGb3JtQ29udGFpbmVyQmxvY2s+LCBleHRlcm5hbENvbmZpZ3VyYXRpb246IHVua25vd24sIHNldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuZW50aXR5U2V0ID0gdGhpcy5jb250ZXh0UGF0aCE7XG5cdFx0aWYgKHRoaXMuZm9ybUVsZW1lbnRzICYmIE9iamVjdC5rZXlzKHRoaXMuZm9ybUVsZW1lbnRzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UmVmZXJlbmNlRmFjZXQ+KHRoaXMubWV0YVBhdGgsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdFx0Y29uc3QgbUV4dHJhU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRsZXQgb0ZhY2V0RGVmaW5pdGlvbiA9IG9Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHQvLyBXcmFwIHRoZSBmYWNldCBpbiBhIGZha2UgRmFjZXQgYW5ub3RhdGlvblxuXHRcdFx0b0ZhY2V0RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0JFR5cGU6IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0LFxuXHRcdFx0XHRMYWJlbDogb0ZhY2V0RGVmaW5pdGlvbj8uTGFiZWwsXG5cdFx0XHRcdFRhcmdldDoge1xuXHRcdFx0XHRcdCR0YXJnZXQ6IG9GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBvRmFjZXREZWZpbml0aW9uPy5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0XHR0ZXJtOiBcIlwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvQ29udGV4dE9iamVjdFBhdGgpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFubm90YXRpb25zOiB7fSxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBvRmFjZXREZWZpbml0aW9uPy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdH0gYXMgdW5rbm93biBhcyBSZWZlcmVuY2VGYWNldDtcblx0XHRcdG1FeHRyYVNldHRpbmdzW29GYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlXSA9IHsgZmllbGRzOiB0aGlzLmZvcm1FbGVtZW50cyB9O1xuXHRcdFx0Y29uc3Qgb0NvbnZlcnRlckNvbnRleHQgPSB0aGlzLmdldENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdG9Db250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0Lyp0aGlzLmNvbnRleHRQYXRoKi8gdW5kZWZpbmVkLFxuXHRcdFx0XHRzZXR0aW5ncyxcblx0XHRcdFx0bUV4dHJhU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvRm9ybURlZmluaXRpb24gPSBjcmVhdGVGb3JtRGVmaW5pdGlvbihvRmFjZXREZWZpbml0aW9uLCBcInRydWVcIiwgb0NvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHR0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gPSBvRm9ybURlZmluaXRpb24uZm9ybUNvbnRhaW5lcnNbMF0uZm9ybUVsZW1lbnRzO1xuXHRcdH1cblx0XHQvLyBXZSBuZWVkIHRoZSB2aWV3IGlkIGZvciB0aGUgZm9ybSBlbGVtZW50cyBzdGFibGUgaWRzIGdlbmVyYXRpb25cblx0XHR0aGlzLmNvbnRlbnRJZCA9IHNldHRpbmdzLnZpZXdJZCBhcyBzdHJpbmc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBGb3JtQ29udGFpbmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHRlbXBsYXRlIHN0cmluZy5cblx0ICovXG5cdHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG92ZXJmbG93VG9vbGJhcklEID0gdGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1BY3Rpb25zVG9vbGJhclwiXSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMuY29udGV4dFBhdGgsIHRoaXMubWV0YVBhdGgpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGRhdGFNb2RlbE9iamVjdCk7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdDxmOkZvcm1Db250YWluZXJcblx0XHRcdHhtbG5zPVwic2FwLm1cIlxuXHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHR4bWxuczptYWNybz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0eG1sbnM6bWFjcm9Gb3JtPVwic2FwLmZlLm1hY3Jvcy5mb3JtXCJcblx0XHRcdHhtbG5zOmludGVybmFsTWFjcm89XCJzYXAuZmUubWFjcm9zLmludGVybmFsXCJcblx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHR4bWxuczpjb250cm9scz1cInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIlxuXHRcdFx0eG1sbnM6ZHQ9XCJzYXAudWkuZHRcIlxuXHRcdFx0eG1sbnM6bWFjcm9kYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiXG5cdFx0XHR4bWxuczpmcG09XCJzYXAuZmUubWFjcm9zLmZwbVwiXG5cdFx0XHR4bWxuczp0ZW1wbGF0ZT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS50ZW1wbGF0ZS8xXCJcblx0XHRcdHRlbXBsYXRlOnJlcXVpcmU9XCJ7XG5cdFx0XHRcdE1PREVMOiAnc2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXInLFxuXHRcdFx0XHRJRDogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXInLFxuXHRcdFx0XHRDT01NT046ICdzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlcicsXG5cdFx0XHRcdEZPUk06ICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUhlbHBlcicsXG5cdFx0XHRcdFVJOiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnMnLFxuXHRcdFx0XHREYXRhRmllbGQ6ICdzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnMnLFxuXHRcdFx0XHRGaWVsZFRlbXBsYXRpbmc6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZycsXG5cdFx0XHRcdFByb3BlcnR5OiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnMnLFxuXHRcdFx0XHRGSUVMRDogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXInLFxuXHRcdFx0XHRNQUNSTzogJ3NhcC9mZS9tYWNyb3MvTWFjcm9UZW1wbGF0aW5nJ1xuXHRcdFx0fVwiXG5cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntGb3JtQ29udGFpbmVyUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyQVBJJ31cIlxuXHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7dGhpcy5kZXNpZ250aW1lU2V0dGluZ3N9XCJcblx0XHRcdGlkPVwiJHt0aGlzLmlkIHx8IHVuZGVmaW5lZH1cIlxuXHRcdFx0dmlzaWJsZT1cIiR7dGhpcy52aXNpYmxlfVwiXG5cdFx0XHRtYWNyb2RhdGE6bmF2aWdhdGlvblBhdGg9XCIke3RoaXMubmF2aWdhdGlvblBhdGh9XCJcblx0XHRcdG1hY3JvZGF0YTpldE5hbWU9XCIke3RoaXMuY29udGV4dFBhdGguZ2V0T2JqZWN0KFwiLi9Ac2FwdWkubmFtZVwiKX1cIlxuXHRcdFx0bWFjcm9kYXRhOlVpSGlkZGVuUHJlc2VudD1cIiR7dGhpcy5oYXNVaUhpZGRlbkFubm90YXRpb259XCJcblx0XHQ+XG5cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLnRpdGxlfVwiPlxuXHRcdFx0XHQ8Zjp0aXRsZT5cblx0XHRcdFx0XHQ8Y29yZTpUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0PC9mOnRpdGxlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5cblxuXHRcdFx0PHRlbXBsYXRlOmlmIHRlc3Q9XCIke3RoaXMuYWN0aW9uc31cIj5cblx0XHRcdFx0PHRlbXBsYXRlOnRoZW4+XG5cdFx0XHRcdFx0PGY6dG9vbGJhcj5cblx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJcblx0XHRcdFx0XHRcdFx0aWQ9XCIke292ZXJmbG93VG9vbGJhcklEfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFRpdGxlIGxldmVsPVwiJHt0aGlzLnRpdGxlTGV2ZWx9XCIgdGV4dD1cIiR7dGhpcy50aXRsZX1cIiAvPlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHQ8dGVtcGxhdGU6cmVwZWF0IGxpc3Q9XCJ7YWN0aW9ucz59XCIgdmFyPVwiYWN0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BY3Rpb25CdXR0b25zXCIgdHlwZT1cIlhNTFwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvdGVtcGxhdGU6cmVwZWF0PlxuXHRcdFx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHRcdFx0PC9mOnRvb2xiYXI+XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdDwvdGVtcGxhdGU6aWY+XG5cblx0XHRcdDxmOmRlcGVuZGVudHM+XG5cdFx0XHRcdDxtYWNyb0Zvcm06Rm9ybUNvbnRhaW5lckFQSSBmb3JtQ29udGFpbmVySWQ9XCIke3RoaXMuaWR9XCIgc2hvd0RldGFpbHM9XCJ7aW50ZXJuYWw+c2hvd0RldGFpbHN9XCIgLz5cblx0XHRcdDwvZjpkZXBlbmRlbnRzPlxuXG5cdFx0XHQ8Zjpmb3JtRWxlbWVudHM+XG5cdFx0XHRcdCR7dGhpcy5nZXRUZW1wbGF0ZWRGb3JtRWxlbWVudHMoKX1cblx0XHRcdDwvZjpmb3JtRWxlbWVudHM+XG5cblx0XHQ8L2Y6Rm9ybUNvbnRhaW5lcj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlZCBmb3JtIGVsZW1lbnRzLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZvcm0gZWxlbWVudHMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJkYXRhRmllbGRDb2xsZWN0aW9uPlwiIHZhcj1cImZvcm1FbGVtZW50c1wiPlxuXHRcdFx0XHQke3RoaXMuZ2V0SW5uZXJUZW1wbGF0ZWRGb3JtRWxlbWVudHMoKX1cblx0XHRcdDwvdGVtcGxhdGU6d2l0aD5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGlubmVyIHRlbXBsYXRlZCBmb3JtIGVsZW1lbnRzLCBpbmNsdWRpbmcgRGF0YVBvaW50IGFuZCBDb250YWN0IHRlbXBsYXRlcy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBpbm5lciBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCk6IHN0cmluZyB7XG5cdFx0bGV0IGdldERhdGFQb2ludFRlbXBsYXRlID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gJiYgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYW4gYW5ub3RhdGlvblBhdGhcblx0XHRcdGNvbnN0IGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aCA9IHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5maW5kKChkZikgPT4gISFkZi5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRsZXQgaWRQcmVmaXggPSBcIlwiO1xuXHRcdFx0Y29uc3QgaXNFZGl0YWJsZUhlYWRlciA9IHRoaXMuaWQ/LmluY2x1ZGVzKFwiSGVhZGVyRmFjZXQ6OkZvcm1Db250YWluZXJcIikgPT09IHRydWU7XG5cdFx0XHRsZXQgZm9ybUVsZW1lbnRJZCA9IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0XHRpZiAoaXNFZGl0YWJsZUhlYWRlcikge1xuXHRcdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmlkfTo6Rm9ybUVsZW1lbnRgO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdFx0aWRQcmVmaXggPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0ua2V5XSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aD8uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aD8uYW5ub3RhdGlvblBhdGggfHwgXCJcIilcblx0XHRcdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdFx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRcdFx0Z2V0RGF0YVBvaW50VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImRhdGFQb2ludFwiPlxuXHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRsYWJlbD1cIntkYXRhUG9pbnQ+QEBGSUVMRC5jb21wdXRlTGFiZWxUZXh0fVwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke2dldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRQcmVmaXg9XCIke2lkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHt0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0uYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlID09PSB0cnVlID8gXCJEaXNwbGF5XCIgOiB1bmRlZmluZWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblx0XHRcdFx0PC90ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBnZXRDb250YWN0VGVtcGxhdGUgPSB4bWxgXG5cdFx0PHRlbXBsYXRlOmVsc2VpZlxuXHRcdFx0dGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0JykgPiAtMSB9XCJcblx0XHRcdD5cblx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cIm1ldGFQYXRoXCI+XG5cdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIns9IFxcJHttZXRhUGF0aD4uL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5BZGFwdGF0aW9uSGlkZGVufSA/ICdub3QtYWRhcHRhYmxlLXRyZWUnIDogICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZScgfVwiXG5cdFx0XHRcdFx0YmluZGluZz1cIns9IEZPUk0uZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbihcXCR7dGhpcy5uYXZpZ2F0aW9uUGF0aH0sXFwke2NvbnRleHRQYXRoPkBAVUkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aH0pfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHR0ZXh0PVwie21ldGFQYXRoPmZuLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbH1cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT1cIns9IEZpZWxkVGVtcGxhdGluZy5nZXRWaXNpYmxlRXhwcmVzc2lvbihcXCR7ZGF0YUZpZWxkPkBAVUkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aH0pfVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdDxsYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0PGY6Q29sdW1uRWxlbWVudERhdGEgY2VsbHNMYXJnZT1cIjEyXCIgLz5cblx0XHRcdFx0XHQ8L2xheW91dERhdGE+XG5cdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHQ8bWFjcm86Q29udGFjdFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cInttZXRhUGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwie2NvbnRleHRQYXRoPkBAQ09NTU9OLmdldE1ldGFQYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblx0XHQ8L3RlbXBsYXRlOmVsc2VpZj5gO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiez0gXFwke2Zvcm1FbGVtZW50cz4wL2Fubm90YXRpb25QYXRofS5pbmRleE9mKCdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnQnKSA+IC0xIH1cIj5cblx0XHRcdFx0JHtnZXREYXRhUG9pbnRUZW1wbGF0ZX1cblx0XHRcdFx0JHtnZXRDb250YWN0VGVtcGxhdGV9XG5cdFx0XHRcdDx0ZW1wbGF0ZTplbHNlPlxuXHRcdFx0XHRcdCR7dGhpcy5nZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5cblx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHdpdGggY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY29ubmVjdGVkIGZpZWxkcyBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgY29ubmVjdGVkRmllbGRFbGVtZW50cyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IGNvbm5lY3RlZEZpZWxkIG9mIGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyEpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBjb25uZWN0ZWRGaWVsZC5vcmlnaW5hbE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGRlbGltaXRlciA9IENvbW1vbkhlbHBlci5nZXREZWxpbWl0ZXIoY29ubmVjdGVkRmllbGQub3JpZ2luYWxUZW1wbGF0ZSA/PyBcIlwiKTtcblx0XHRcdGNvbnN0IG5vdExhc3RJbmRleENvbmRpdGlvbiA9XG5cdFx0XHRcdGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyEuaW5kZXhPZihjb25uZWN0ZWRGaWVsZCkgIT09IGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyEubGVuZ3RoIC0gMVxuXHRcdFx0XHRcdD8geG1sYDxUZXh0XG5cdFx0XHRcdFx0dGV4dD1cIiR7ZGVsaW1pdGVyfVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5FbmRcIlxuXHRcdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdC8+YFxuXHRcdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWUucGF0aFxuXHRcdFx0XHQgIF0pXG5cdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXB1dGVkVmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5LCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IFwiXCI7XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSB4bWxgXG5cdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7Y29tcHV0ZWRWaElkUHJlZml4fVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHR0ZXh0TGluZXNFZGl0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TGluZXNFZGl0fVwiXG5cdFx0XHRcdFx0XHR0ZXh0TWF4TGluZXM9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lc31cIlxuXHRcdFx0XHRcdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXl9XCJcblx0XHRcdFx0XHRcdHRleHRNYXhMZW5ndGg9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMZW5ndGh9XCJcblx0XHRcdFx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XCJcblx0XHRcdFx0XHRcdHRleHRBbGlnbk1vZGU9XCJGb3JtXCJcblx0XHRcdFx0XHRcdHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIlxuXHRcdFx0XHRcdFx0ZmllbGRFZGl0U3R5bGU9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkRWRpdFN0eWxlfVwiXG5cdFx0XHRcdFx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5yYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0fVwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8bWFjcm86bGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIns9ICV7dWk+L2lzRWRpdGFibGV9ID8gMSA6IDB9XCIgLz5cblx0XHRcdFx0XHQ8L21hY3JvOmxheW91dERhdGE+XG5cdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRcdCR7bm90TGFzdEluZGV4Q29uZGl0aW9ufVxuXHRcdFx0XHRgO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnRzICs9IGNvbm5lY3RlZEZpZWxkRWxlbWVudDtcblx0XHR9XG5cblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGggPz8gXCJcIilcblx0XHQpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRsZXQgZm9ybUVsZW1lbnRJZCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgUHJvcGVydHk+XG5cdFx0XHQgIClcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyk7XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gKGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcz8udGFyZ2V0T2JqZWN0IGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldFxuXHRcdFx0Py4kdGFyZ2V0IGFzIEFubm90YXRpb25UZXJtPENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcz47XG5cblx0XHRjb25zdCBkZXNpZ250aW1lID0gZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ6IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWVcIjtcblx0XHRjb25zdCBpc1JlcXVpcmVkID0gZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkKFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8QW5ub3RhdGlvblBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZT4+XG5cdFx0KT8udG9TdHJpbmcoKTtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdHRleHQ9XCIke3RhcmdldE9iamVjdD8uTGFiZWwgPz8gZm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRpZD1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdDxjb250cm9sczpGaWVsZFdyYXBwZXIgcmVxdWlyZWQ9XCIke2lzUmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHQ8SEJveCB3cmFwPVwiV3JhcFwiPlxuXHRcdFx0XHRcdFx0XHQke2Nvbm5lY3RlZEZpZWxkRWxlbWVudHN9XG5cdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0PC9jb250cm9sczpGaWVsZFdyYXBwZXI+XG5cdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhIGZvcm0gZWxlbWVudCByZXByZXNlbnRpbmcgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBtdWx0aS12YWx1ZSBmaWVsZCBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRNdWx0aVZhbHVlRmllbGRGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRJZCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCBtdWx0aVZhbHVlRmllbGRJZCA9IHRoaXMuaWRcblx0XHRcdD8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5LCBcIk11bHRpVmFsdWVGaWVsZFwiXSl9YFxuXHRcdFx0OiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZoSWRQcmVmaXggPSB0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIjtcblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm1hY3Jvcz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR4bWxuczptdWx0aXZhbHVlZmllbGQ9XCJzYXAuZmUubWFjcm9zLm11bHRpdmFsdWVmaWVsZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2Zvcm1FbGVtZW50SWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9XCIke2Zvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bXVsdGlWYWx1ZUZpZWxkSWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZoSWRQcmVmaXg9XCIke3ZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmVudGl0eVNldD8uZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7Zm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm9zOmZvcm1hdE9wdGlvbnM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtdWx0aXZhbHVlZmllbGQ6Rm9ybWF0T3B0aW9ucyBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm9zOmZvcm1hdE9wdGlvbnM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6TXVsdGlWYWx1ZUZpZWxkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PmA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgZm9ybSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBjaGVja2JveCBncm91cC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY2hlY2tib3ggZ3JvdXAgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdGdldEZpZWxkR3JvdXBGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgZmllbGRHcm91cEVsZW1lbnRzID0gXCJcIjtcblx0XHQvL1dlIHRlbXBsYXRlIGVhY2ggZWxlbWVudCBvZiB0aGUgY2hlY2tib3ggZ3JvdXBcblx0XHRmb3IgKGNvbnN0IGdyb3VwRWxlbWVudCBvZiBmb3JtRWxlbWVudC5maWVsZEdyb3VwRWxlbWVudHMhKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gZ3JvdXBFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGU+KGJpbmRpbmdDb250ZXh0KTtcblx0XHRcdGNvbnN0IGNvbXB1dGVkSWRQcmVmaXggPSB0aGlzLmlkXG5cdFx0XHRcdD8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW1xuXHRcdFx0XHRcdFx0dGhpcy5pZCxcblx0XHRcdFx0XHRcdFwiQ2hlY2tCb3hHcm91cFwiLFxuXHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5LFxuXHRcdFx0XHRcdFx0KGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZSk/LlZhbHVlPy5wYXRoXG5cdFx0XHRcdCAgXSl9YFxuXHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlzQm9vbGVhbkZpZWxkR3JvdXAgPVxuXHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIjtcblxuXHRcdFx0Y29uc3QgZmllbGRHcm91cEVsZW1lbnQgPSBpc0Jvb2xlYW5GaWVsZEdyb3VwXG5cdFx0XHRcdD8geG1sYFxuXHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRpZFByZWZpeD1cIiR7Y29tcHV0ZWRJZFByZWZpeH1cIlxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmVudGl0eVNldD8uZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0bWV0YVBhdGg9XCIke2JpbmRpbmdDb250ZXh0LmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9XCIke3RoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zIGlzRmllbGRHcm91cEl0ZW09XCJ0cnVlXCIgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiAvPlxuXHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0YFxuXHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdGZpZWxkR3JvdXBFbGVtZW50cyArPSBmaWVsZEdyb3VwRWxlbWVudDtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRsZXQgbGFiZWxJRCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0dGhpcy5pZCxcblx0XHRcdFx0XHRcIkZpZWxkR3JvdXBGb3JtRWxlbWVudFwiLFxuXHRcdFx0XHRcdGZvcm1FbGVtZW50LmtleVxuXHRcdFx0XHRdKX1gO1xuXHRcdFx0XHRsYWJlbElEID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0XHRsYWJlbElEID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXA7XG5cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD1cIiR7dGFyZ2V0T2JqZWN0Py5MYWJlbCA/PyBmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2xhYmVsSUR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCA9PT0gdHJ1ZSA/IFwiUm93XCIgOiBcIkNvbHVtblwifVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXA9XCJXcmFwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uR2FwPVwiMXJlbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpdGVtcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke2ZpZWxkR3JvdXBFbGVtZW50c31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9pdGVtcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2NvbnRyb2xzOlJlcXVpcmVkRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIGZpZWxkLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmaWVsZCBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0Y29uc3QgY29tcHV0ZWRWaElkUHJlZml4ID0gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbiA9IGZvcm1FbGVtZW50LmlzUGFydE9mUHJldmlld1xuXHRcdFx0PyBnZXRWaXNpYmxlRXhwcmVzc2lvbihjb21wdXRlZERhdGFNb2RlbE9iamVjdCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgUHJvcGVydHk+KVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGNvbXB1dGVkSWRQcmVmaXggPSB0aGlzLmlkID8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YCA6IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ6IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWVcIjtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvOkZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZFByZWZpeD1cIiR7Y29tcHV0ZWRJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7Y29tcHV0ZWRWaElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlYWRPbmx5PVwiJHtmb3JtRWxlbWVudC5yZWFkT25seX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q9XCIke2Zvcm1FbGVtZW50LnNlbWFudGljT2JqZWN0fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE1heExpbmVzPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXN9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRBbGlnbk1vZGU9XCJGb3JtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkRWRpdFN0eWxlPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEVkaXRTdHlsZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5yYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGVUaW1lUGF0dGVybj1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8ucGF0dGVybn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKi9cblx0Z2V0Q3VzdG9tRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEN1c3RvbUZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKSArIFwiL1wiICsgZm9ybUVsZW1lbnQucHJvcGVydHlQYXRoO1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChwcm9wZXJ0eVBhdGgpKSBhc1xuXHRcdFx0fCBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD5cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIGZvcm1FbGVtZW50LmlkXSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50S2V5ID0gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIGZvcm1FbGVtZW50LmtleV0pO1xuXHRcdHJldHVybiB4bWxgXG5cdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7Zm9ybUVsZW1lbnQudmlzaWJsZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm9Gb3JtOkN1c3RvbUZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7Zm9ybUVsZW1lbnQucHJvcGVydHlQYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50S2V5PVwiJHtmb3JtRWxlbWVudEtleX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmcG06Q3VzdG9tRnJhZ21lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2Zvcm1FbGVtZW50S2V5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyYWdtZW50TmFtZT1cIiR7Zm9ybUVsZW1lbnQudGVtcGxhdGV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm9Gb3JtOkN1c3RvbUZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdGA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4gZm9yIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIHNsb3QgY29sdW1uLlxuXHQgKi9cblx0Z2V0U2xvdENvbHVtbihmb3JtRWxlbWVudDogRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdHJldHVybiB4bWxgPHNsb3QgbmFtZT1cIiR7Zm9ybUVsZW1lbnQua2V5fVwiIC8+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBkYXRhIGZpZWxkIGlzIGEgbXVsdGl2YWx1ZSBmaWVsZC5cblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YSBmaWVsZCBpcyBhIG11bHRpdmFsdWUgZmllbGQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGlzTXVsdGlWYWx1ZURhdGFGaWVsZChkYXRhRmllbGQ6IEZvcm1FbGVtZW50KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uID0gZmFsc2U7XG5cdFx0aWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZhbHVlUGF0aCA9IGJpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpPy5WYWx1ZT8uJFBhdGg7XG5cdFx0XHRpZiAodmFsdWVQYXRoKSB7XG5cdFx0XHRcdGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uID0gaXNNdWx0aVZhbHVlRmllbGQoXG5cdFx0XHRcdFx0ZW5oYW5jZURhdGFNb2RlbFBhdGgoZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGJpbmRpbmdDb250ZXh0KSwgdmFsdWVQYXRoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpc011bHRpVmFsdWVGaWVsZENvbmRpdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhbGwgZGF0YSBmaWVsZHMgZm9yIGFubm90YXRpb25zLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGRhdGEgZmllbGRzLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zKCk6IHN0cmluZyB7XG5cdFx0bGV0IHJldHVyblN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbikge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmNvbm5lY3RlZEZpZWxkcyAmJlxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzIS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5pc011bHRpVmFsdWVEYXRhRmllbGQoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRNdWx0aVZhbHVlRmllbGRGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmZpZWxkR3JvdXBFbGVtZW50cyAmJlxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuZmllbGRHcm91cEVsZW1lbnRzIS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0RmllbGRHcm91cEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRGaWVsZEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0Q3VzdG9tRm9ybUVsZW1lbnQoZGF0YUZpZWxkIGFzIEN1c3RvbUZvcm1FbGVtZW50KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRTbG90Q29sdW1uKGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB4bWxgJHtyZXR1cm5TdHJpbmd9YDtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFqQkEsSUFtQnFCQSxrQkFBa0IsSUFBQUMsSUFBQSxHQUR0Q0MsbUJBQW1CLENBQUM7SUFBRUMsSUFBSSxFQUFFLGVBQWU7SUFBRUMsU0FBUyxFQUFFO0VBQWdCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRXpFQyxjQUFjLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHbENGLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCRSxRQUFRLEVBQUUsSUFBSTtJQUNkQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxhQUFhLEVBQUUsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFdBQVc7RUFDN0UsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHRE4sY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBTSxLQUFBLEdBR0RQLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCRyxRQUFRLEVBQUUsSUFBSTtJQUNkRCxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUssS0FBQSxHQU1EUixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFRLEtBQUEsR0FNRFQsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBUyxLQUFBLEdBTURWLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQVUsS0FBQSxHQU1sQ1gsY0FBYyxDQUFDO0lBQUVDLElBQUksRUFBRSx3QkFBd0I7SUFBRUcsUUFBUSxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFRLE1BQUEsR0FNbEVaLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQVksTUFBQSxHQU1sQ2IsY0FBYyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBYSxNQUFBLEdBTWxDZCxjQUFjLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFjLE1BQUEsR0FNbkNmLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQWUsTUFBQSxHQUdsQ2hCLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQWdCLE1BQUEsR0FHakNqQixjQUFjLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFpQixNQUFBLEdBR25DQyxnQkFBZ0IsQ0FBQztJQUFFbEIsSUFBSSxFQUFFO0VBQWlDLENBQUMsQ0FBQyxFQUFBbUIsTUFBQSxHQUk1REMsVUFBVSxDQUFDLENBQUMsRUFBQTFCLElBQUEsQ0FBQTJCLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMscUJBQUE7SUFLYixTQUFBOUIsbUJBQVkrQixLQUF1QyxFQUFFQyxxQkFBOEIsRUFBRUMsUUFBbUMsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDekhBLEtBQUEsR0FBQUoscUJBQUEsQ0FBQUssSUFBQSxPQUFNSixLQUFLLENBQUM7TUFBQ0ssMEJBQUEsQ0FBQUYsS0FBQSxRQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQUksWUFBQSxFQUFBSixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsZUFBQUssWUFBQSxFQUFBTCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsY0FBQU0sWUFBQSxFQUFBTixLQUFBO01BcEVkO0FBQ0Q7QUFDQTtNQUZDRSwwQkFBQSxDQUFBRixLQUFBLHlCQUFBTyxZQUFBLEVBQUFQLEtBQUE7TUFRQTtBQUNEO0FBQ0E7TUFGQ0UsMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQVEsWUFBQSxFQUFBUixLQUFBO01BUUE7QUFDRDtBQUNBO01BRkNFLDBCQUFBLENBQUFGLEtBQUEsV0FBQVMsWUFBQSxFQUFBVCxLQUFBO01BTUE7QUFDRDtBQUNBO01BRkNFLDBCQUFBLENBQUFGLEtBQUEsZ0JBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQU1BO0FBQ0Q7QUFDQTtNQUZDRSwwQkFBQSxDQUFBRixLQUFBLG9CQUFBVyxZQUFBLEVBQUFYLEtBQUE7TUFNQTtBQUNEO0FBQ0E7TUFGQ0UsMEJBQUEsQ0FBQUYsS0FBQSxhQUFBWSxhQUFBLEVBQUFaLEtBQUE7TUFNQTtBQUNEO0FBQ0E7TUFGQ0UsMEJBQUEsQ0FBQUYsS0FBQSwyQkFBQWEsYUFBQSxFQUFBYixLQUFBO01BTUE7QUFDRDtBQUNBO01BRkNFLDBCQUFBLENBQUFGLEtBQUEsd0JBQUFjLGFBQUEsRUFBQWQsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGFBQUFlLGFBQUEsRUFBQWYsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLG1DQUFBZ0IsYUFBQSxFQUFBaEIsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGtCQUFBaUIsYUFBQSxFQUFBakIsS0FBQTtNQWVBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsY0FBQWtCLGFBQUEsRUFBQWxCLEtBQUE7TUFRQ0EsS0FBQSxDQUFLbUIsU0FBUyxHQUFHbkIsS0FBQSxDQUFLb0IsV0FBWTtNQUNsQyxJQUFJcEIsS0FBQSxDQUFLcUIsWUFBWSxJQUFJQyxNQUFNLENBQUNDLElBQUksQ0FBQ3ZCLEtBQUEsQ0FBS3FCLFlBQVksQ0FBQyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25FLE1BQU1DLGtCQUFrQixHQUFHQywyQkFBMkIsQ0FBaUIxQixLQUFBLENBQUsyQixRQUFRLEVBQUUzQixLQUFBLENBQUtvQixXQUFXLENBQUM7UUFDdkcsTUFBTVEsY0FBdUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSUMsZ0JBQWdCLEdBQUdKLGtCQUFrQixDQUFDSyxZQUFZO1FBQ3REO1FBQ0FELGdCQUFnQixHQUFHO1VBQ2xCRSxLQUFLLDZDQUFrQztVQUN2Q0MsS0FBSyxFQUFFSCxnQkFBZ0IsRUFBRUcsS0FBSztVQUM5QkMsTUFBTSxFQUFFO1lBQ1BDLE9BQU8sRUFBRUwsZ0JBQWdCO1lBQ3pCTSxrQkFBa0IsRUFBRU4sZ0JBQWdCLEVBQUVNLGtCQUFrQjtZQUN4REMsSUFBSSxFQUFFLEVBQUU7WUFDUkMsSUFBSSxFQUFFLEVBQUU7WUFDUmhFLElBQUksRUFBRSxnQkFBZ0I7WUFDdEJpRSxLQUFLLEVBQUVDLGtDQUFrQyxDQUFDZCxrQkFBa0I7VUFDN0QsQ0FBQztVQUNEZSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1VBQ2ZMLGtCQUFrQixFQUFFTixnQkFBZ0IsRUFBRU07UUFDdkMsQ0FBOEI7UUFDOUJQLGNBQWMsQ0FBQ0MsZ0JBQWdCLENBQUNJLE1BQU0sQ0FBQ0ssS0FBSyxDQUFDLEdBQUc7VUFBRUcsTUFBTSxFQUFFekMsS0FBQSxDQUFLcUI7UUFBYSxDQUFDO1FBQzdFLE1BQU1xQixpQkFBaUIsR0FBRzFDLEtBQUEsQ0FBSzJDLG1CQUFtQixDQUNqRGxCLGtCQUFrQixFQUNsQixvQkFBcUJtQixTQUFTLEVBQzlCN0MsUUFBUSxFQUNSNkIsY0FDRCxDQUFDO1FBQ0QsTUFBTWlCLGVBQWUsR0FBR0Msb0JBQW9CLENBQUNqQixnQkFBZ0IsRUFBRSxNQUFNLEVBQUVhLGlCQUFpQixDQUFDO1FBRXpGMUMsS0FBQSxDQUFLK0MsbUJBQW1CLEdBQUdGLGVBQWUsQ0FBQ0csY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDM0IsWUFBWTtNQUMxRTtNQUNBO01BQ0FyQixLQUFBLENBQUtpRCxTQUFTLEdBQUdsRCxRQUFRLENBQUNtRCxNQUFnQjtNQUFDLE9BQUFsRCxLQUFBO0lBQzVDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0lBSENtRCxRQUFBLEdBQUFyRixrQkFBQTtJQUFBc0YsY0FBQSxDQUFBdEYsa0JBQUEsRUFBQThCLHFCQUFBO0lBQUEsSUFBQXlELE1BQUEsR0FBQXZGLGtCQUFBLENBQUF3RixTQUFBO0lBQUFELE1BQUEsQ0FJT0UsV0FBVyxHQUFsQixTQUFPQSxXQUFXQSxDQUFBLEVBQVc7TUFDNUIsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQyxFQUFFLEdBQUdDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxHQUFHYixTQUFTO01BQ3hHLE1BQU1nQixlQUFlLEdBQUdsQywyQkFBMkIsQ0FBQyxJQUFJLENBQUNOLFdBQVcsRUFBRSxJQUFJLENBQUNPLFFBQVEsQ0FBK0M7TUFDbEksTUFBTWtDLGFBQWEsR0FBR0MsVUFBVSxDQUFDQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUNDLGNBQWMsRUFBRUosZUFBZSxDQUFDO01BRWhHLE9BQU9LLEdBQUc7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQUksQ0FBQ0Msa0JBQWtCO0FBQzNDLFNBQVMsSUFBSSxDQUFDVCxFQUFFLElBQUliLFNBQVM7QUFDN0IsY0FBYyxJQUFJLENBQUN1QixPQUFPO0FBQzFCLCtCQUErQixJQUFJLENBQUNILGNBQWM7QUFDbEQsdUJBQXVCLElBQUksQ0FBQzVDLFdBQVcsQ0FBQ2dELFNBQVMsQ0FBQyxlQUFlLENBQUM7QUFDbEUsZ0NBQWdDLElBQUksQ0FBQ0MscUJBQXFCO0FBQzFEO0FBQ0E7QUFDQSx3QkFBd0IsSUFBSSxDQUFDQyxLQUFLO0FBQ2xDO0FBQ0EsMEJBQTBCLElBQUksQ0FBQ0MsVUFBVSxXQUFXLElBQUksQ0FBQ0QsS0FBSztBQUM5RDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsSUFBSSxDQUFDRSxPQUFPO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLGFBQWFoQixpQkFBaUI7QUFDOUIsU0FBUyxJQUFJLENBQUNpQixJQUFJLENBQUMsU0FBUyxFQUFFWixhQUFhLENBQUM7QUFDNUM7QUFDQSx1QkFBdUIsSUFBSSxDQUFDVSxVQUFVLFdBQVcsSUFBSSxDQUFDRCxLQUFLO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELElBQUksQ0FBQ2IsRUFBRTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksQ0FBQ2lCLHdCQUF3QixDQUFDLENBQUM7QUFDckM7QUFDQTtBQUNBLHFCQUFxQjtJQUNwQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFyQixNQUFBLENBSU9xQix3QkFBd0IsR0FBL0IsU0FBT0Esd0JBQXdCQSxDQUFBLEVBQVc7TUFDekMsT0FBT1QsR0FBRztBQUNaO0FBQ0EsTUFBTSxJQUFJLENBQUNVLDZCQUE2QixDQUFDLENBQUM7QUFDMUMsb0JBQW9CO0lBQ25COztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXRCLE1BQUEsQ0FJT3NCLDZCQUE2QixHQUFwQyxTQUFPQSw2QkFBNkJBLENBQUEsRUFBVztNQUM5QyxJQUFJQyxvQkFBb0IsR0FBRyxFQUFFO01BRTdCLElBQUksSUFBSSxDQUFDN0IsbUJBQW1CLElBQUksSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQ3ZCLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEU7UUFDQSxNQUFNcUQsOEJBQThCLEdBQUcsSUFBSSxDQUFDOUIsbUJBQW1CLENBQUMrQixJQUFJLENBQUVDLEVBQUUsSUFBSyxDQUFDLENBQUNBLEVBQUUsQ0FBQ0MsY0FBYyxDQUFDO1FBQ2pHLElBQUlDLFFBQVEsR0FBRyxFQUFFO1FBQ2pCLE1BQU1DLGdCQUFnQixHQUFHLElBQUksQ0FBQ3pCLEVBQUUsRUFBRTBCLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7UUFDakYsSUFBSUMsYUFBYSxHQUFHLFdBQVc7UUFDL0IsSUFBSSxJQUFJLENBQUMzQixFQUFFLEVBQUU7VUFDWixJQUFJeUIsZ0JBQWdCLEVBQUU7WUFDckJFLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQzNCLEVBQUUsZUFBZTtZQUN6Q3dCLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQ3hCLEVBQUUsZUFBZTtVQUNyQyxDQUFDLE1BQU07WUFDTjJCLGFBQWEsR0FBRyxHQUFHMUIsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDVixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDdkdKLFFBQVEsR0FBRyxHQUFHdkIsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDVixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDbkc7UUFDRDtRQUNBLElBQUlSLDhCQUE4QixFQUFFRyxjQUFjLEVBQUU7VUFDbkQsTUFBTU0sdUJBQXVCLEdBQUc1RCwyQkFBMkIsQ0FDMUQsSUFBSSxDQUFDTixXQUFXLENBQUNtRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxvQkFBb0IsQ0FBQ1gsOEJBQThCLEVBQUVHLGNBQWMsSUFBSSxFQUFFLENBQ3RHLENBQStDO1VBQy9DLE1BQU1uQixhQUFhLEdBQUdDLFVBQVUsQ0FBQ0MseUJBQXlCLENBQUMsSUFBSSxDQUFDQyxjQUFjLEVBQUVzQix1QkFBdUIsQ0FBQztVQUN4RyxNQUFNRyxVQUFVLEdBQUdILHVCQUF1QixFQUFFeEQsWUFBWSxFQUFFVSxXQUFXLEVBQUVrRCxFQUFFLEVBQUVDLGdCQUFnQixHQUN4RixvQkFBb0IsR0FDcEIsMkNBQTJDO1VBRTlDZixvQkFBb0IsR0FBR1gsR0FBRztBQUM5QjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0J3QixVQUFVO0FBQ2xDLGFBQWFMLGFBQWE7QUFDMUI7QUFDQSxrQkFBa0JRLG9CQUFvQixDQUFDTix1QkFBaUcsQ0FBQztBQUN6SSxTQUFTLElBQUksQ0FBQ2IsSUFBSSxDQUFDLFNBQVMsRUFBRVosYUFBYSxDQUFDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQm9CLFFBQVE7QUFDN0IsdUJBQXVCLElBQUksQ0FBQ3hCLEVBQUUsR0FBR0MsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUMxRix3QkFBd0IsSUFBSSxDQUFDdEMsU0FBUyxFQUFFMEUsT0FBTyxDQUFDLENBQUM7QUFDakQscUJBQXFCLElBQUksQ0FBQzlDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDaUMsY0FBYztBQUMvRCxxQkFBcUIsSUFBSSxDQUFDYyxXQUFXLEtBQUssSUFBSSxHQUFHLFNBQVMsR0FBR2xELFNBQVM7QUFDdEUscUJBQXFCLElBQUksQ0FBQ21ELFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO1FBQ0Q7TUFDRDtNQUVBLE1BQU1DLGtCQUFrQixHQUFHL0IsR0FBRztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7TUFFbkIsT0FBT0EsR0FBRztBQUNaO0FBQ0EsTUFBTVcsb0JBQW9CO0FBQzFCLE1BQU1vQixrQkFBa0I7QUFDeEI7QUFDQSxPQUFPLElBQUksQ0FBQ0MsMkJBQTJCLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsR0FBRztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBNUMsTUFBQSxDQUtBNkMsNkJBQTZCLEdBQTdCLFNBQUFBLDZCQUE2QkEsQ0FBQ0MsV0FBa0MsRUFBVTtNQUN6RSxJQUFJQyxzQkFBc0IsR0FBRyxFQUFFO01BRS9CLEtBQUssTUFBTUMsY0FBYyxJQUFJRixXQUFXLENBQUNHLGVBQWUsRUFBRztRQUMxRCxNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDbkYsV0FBVyxDQUFDbUUsUUFBUSxDQUFDLENBQUM7UUFDekMsTUFBTWlCLFFBQVEsR0FBR0gsY0FBYyxDQUFDSSxjQUFjLEVBQUV0RSxrQkFBa0I7UUFDbEUsTUFBTUMsSUFBSSxHQUFHb0UsUUFBUSxFQUFFRSxTQUFTLENBQUNGLFFBQVEsQ0FBQ0csV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNQyxjQUFjLEdBQUdMLEtBQUssQ0FBQ2Ysb0JBQW9CLENBQUNXLFdBQVcsQ0FBQ25CLGNBQWMsR0FBRyw4QkFBOEIsR0FBRzVDLElBQUksQ0FBQztRQUNySCxNQUFNeUUsU0FBUyxHQUFHQyxZQUFZLENBQUNDLFlBQVksQ0FBQ1YsY0FBYyxDQUFDVyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7UUFDbEYsTUFBTUMscUJBQXFCLEdBQzFCZCxXQUFXLENBQUNHLGVBQWUsQ0FBRVksT0FBTyxDQUFDYixjQUFjLENBQUMsS0FBS0YsV0FBVyxDQUFDRyxlQUFlLENBQUU5RSxNQUFNLEdBQUcsQ0FBQyxHQUM3RnlDLEdBQUc7QUFDVixhQUFhNEMsU0FBUztBQUN0QjtBQUNBO0FBQ0EsT0FBTyxHQUNBLEVBQUU7UUFFTixNQUFNTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMxRCxFQUFFLEdBQzdCQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUN4QixJQUFJLENBQUNGLEVBQUUsRUFDUCxxQkFBcUIsRUFDckIwQyxXQUFXLENBQUNkLEdBQUcsRUFDZGdCLGNBQWMsQ0FBQ0ksY0FBYyxFQUFnQlcsS0FBSyxDQUFDaEYsSUFBSSxDQUN2RCxDQUFDLEdBQ0YsRUFBRTtRQUNMLE1BQU1pRixrQkFBa0IsR0FBRyxJQUFJLENBQUM1RCxFQUFFLEdBQUdDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUwQyxXQUFXLENBQUNkLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRTtRQUUvRyxJQUFJaUMscUJBQXFCLEdBQUcsRUFBRTtRQUU5QkEscUJBQXFCLEdBQUdyRCxHQUFHO0FBQzlCO0FBQ0EsaUJBQWlCa0QsZ0JBQWdCO0FBQ2pDLG1CQUFtQkUsa0JBQWtCO0FBQ3JDLG9CQUFvQixJQUFJLENBQUNsRyxTQUFTLEVBQUUwRSxPQUFPLENBQUMsQ0FBQztBQUM3QyxpQkFBaUJlLGNBQWMsQ0FBQ2YsT0FBTyxDQUFDLENBQUM7QUFDekMsaUJBQWlCLElBQUksQ0FBQ0UsUUFBUTtBQUM5Qix1QkFBdUIsSUFBSSxDQUFDdEMsRUFBRSxHQUFHQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsRUFBRSxFQUFFLDBCQUEwQixFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDckg7QUFDQTtBQUNBLHVCQUF1QmMsV0FBVyxDQUFDb0IsYUFBYSxFQUFFQyxhQUFhO0FBQy9ELHNCQUFzQnJCLFdBQVcsQ0FBQ29CLGFBQWEsRUFBRUUsWUFBWTtBQUM3RCxrQ0FBa0N0QixXQUFXLENBQUNvQixhQUFhLEVBQUVHLHdCQUF3QjtBQUNyRix1QkFBdUJ2QixXQUFXLENBQUNvQixhQUFhLEVBQUVJLGFBQWE7QUFDL0QsbUNBQW1DeEIsV0FBVyxDQUFDb0IsYUFBYSxFQUFFSyx5QkFBeUI7QUFDdkY7QUFDQTtBQUNBLHdCQUF3QnpCLFdBQVcsQ0FBQ29CLGFBQWEsRUFBRU0sY0FBYztBQUNqRSxzQ0FBc0MxQixXQUFXLENBQUNvQixhQUFhLEVBQUVPLDRCQUE0QjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTWIscUJBQXFCO0FBQzNCLEtBQUs7UUFFRmIsc0JBQXNCLElBQUlrQixxQkFBcUI7TUFDaEQ7TUFFQSxNQUFNUyxpQ0FBaUMsR0FBR3JHLDJCQUEyQixDQUNwRSxJQUFJLENBQUNOLFdBQVcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDVyxXQUFXLENBQUNuQixjQUFjLElBQUksRUFBRSxDQUNsRixDQUErQztNQUMvQyxJQUFJSSxhQUFhLEdBQUcsRUFBRTtNQUN0QixJQUFJLElBQUksQ0FBQzNCLEVBQUUsRUFBRTtRQUNaLElBQUksSUFBSSxDQUFDUixTQUFTLEVBQUU7VUFDbkJtQyxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUNuQyxTQUFTLEtBQUtTLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUscUJBQXFCLEVBQUUwQyxXQUFXLENBQUNkLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDbkgsQ0FBQyxNQUFNO1VBQ05ELGFBQWEsR0FBRyxHQUFHMUIsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRSxxQkFBcUIsRUFBRTBDLFdBQVcsQ0FBQ2QsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNoRztNQUNEO01BQ0EsTUFBTTJDLGlCQUFpQixHQUFHN0IsV0FBVyxDQUFDOEIsZUFBZSxHQUNsRHJDLG9CQUFvQixDQUNwQm1DLGlDQUNBLENBQUMsR0FDRCxzQ0FBc0M7TUFDekMsTUFBTWxFLGFBQWEsR0FBR0MsVUFBVSxDQUFDQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUNDLGNBQWMsRUFBRStELGlDQUFpQyxDQUFDO01BQ2xILE1BQU1qRyxZQUFZLEdBQUlpRyxpQ0FBaUMsRUFBRWpHLFlBQVksRUFBd0NHLE1BQU0sRUFDaEhDLE9BQW1EO01BRXRELE1BQU11RCxVQUFVLEdBQUdzQyxpQ0FBaUMsRUFBRWpHLFlBQVksRUFBRVUsV0FBVyxFQUFFa0QsRUFBRSxFQUFFQyxnQkFBZ0IsR0FDbEcsb0JBQW9CLEdBQ3BCLDJDQUEyQztNQUM5QyxNQUFNdUMsVUFBVSxHQUFHQywwQ0FBMEMsQ0FDNURKLGlDQUNELENBQUMsRUFBRUssUUFBUSxDQUFDLENBQUM7TUFFYixPQUFPbkUsR0FBRztBQUNaO0FBQ0E7QUFDQSxxQkFBcUJ3QixVQUFVO0FBQy9CLFVBQVVMLGFBQWE7QUFDdkIsZUFBZTRDLGlCQUFpQjtBQUNoQyxNQUFNLElBQUksQ0FBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUVaLGFBQWEsQ0FBQztBQUN6QztBQUNBO0FBQ0E7QUFDQSxhQUFhL0IsWUFBWSxFQUFFRSxLQUFLLElBQUltRSxXQUFXLENBQUNrQyxLQUFLO0FBQ3JELFdBQVcsSUFBSSxDQUFDNUUsRUFBRSxHQUFHQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsRUFBRSxFQUFFLDBCQUEwQixFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M2QyxVQUFVO0FBQ2xEO0FBQ0EsU0FBUzlCLHNCQUFzQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQS9DLE1BQUEsQ0FLQWlGLDZCQUE2QixHQUE3QixTQUFBQSw2QkFBNkJBLENBQUNuQyxXQUFrQyxFQUFVO01BQ3pFLE1BQU1iLHVCQUF1QixHQUFHNUQsMkJBQTJCLENBQzFELElBQUksQ0FBQ04sV0FBVyxDQUFDbUUsUUFBUSxDQUFDLENBQUMsQ0FBQ0Msb0JBQW9CLENBQUNXLFdBQVcsQ0FBQ25CLGNBQWMsSUFBSSxFQUFFLENBQ2xGLENBQStDO01BQy9DLE1BQU1nRCxpQkFBaUIsR0FBRzdCLFdBQVcsQ0FBQzhCLGVBQWUsR0FDbERyQyxvQkFBb0IsQ0FBQ04sdUJBQWlHLENBQUMsR0FDdkgsc0NBQXNDO01BQ3pDLE1BQU16QixhQUFhLEdBQUdDLFVBQVUsQ0FBQ0MseUJBQXlCLENBQUMsSUFBSSxDQUFDQyxjQUFjLEVBQUVzQix1QkFBdUIsQ0FBQztNQUN4RyxNQUFNRixhQUFhLEdBQUcsSUFBSSxDQUFDM0IsRUFBRSxHQUFHLEdBQUdDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUsYUFBYSxFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsV0FBVztNQUNySCxNQUFNa0QsaUJBQWlCLEdBQUcsSUFBSSxDQUFDOUUsRUFBRSxHQUM5QixHQUFHQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsRUFBRSxFQUFFLGFBQWEsRUFBRTBDLFdBQVcsQ0FBQ2QsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUMsRUFBRSxHQUMxRixXQUFXO01BQ2QsTUFBTW1ELFVBQVUsR0FBRyxJQUFJLENBQUMvRSxFQUFFLEdBQUdDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLEVBQUU7TUFDdEYsTUFBTWdDLFVBQVUsR0FBR0gsdUJBQXVCLEVBQUV4RCxZQUFZLEVBQUVVLFdBQVcsRUFBRWtELEVBQUUsRUFBRUMsZ0JBQWdCLEdBQ3hGLG9CQUFvQixHQUNwQiwyQ0FBMkM7TUFFOUMsT0FBTzFCLEdBQUc7QUFDWjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEJ3QixVQUFVO0FBQ3hDLG1CQUFtQkwsYUFBYTtBQUNoQyxzQkFBc0JlLFdBQVcsQ0FBQ2tDLEtBQUs7QUFDdkMsd0JBQXdCTCxpQkFBaUI7QUFDekMsZUFBZSxJQUFJLENBQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFWixhQUFhLENBQUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCMEUsaUJBQWlCO0FBQ3RDLDZCQUE2QkMsVUFBVTtBQUN2Qyw4QkFBOEIsSUFBSSxDQUFDckgsU0FBUyxFQUFFMEUsT0FBTyxDQUFDLENBQUM7QUFDdkQsMkJBQTJCTSxXQUFXLENBQUNuQixjQUFjO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtJQUM1Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTNCLE1BQUEsQ0FLQW9GLHdCQUF3QixHQUF4QixTQUFBQSx3QkFBd0JBLENBQUN0QyxXQUFrQyxFQUFVO01BQ3BFLElBQUl1QyxrQkFBa0IsR0FBRyxFQUFFO01BQzNCO01BQ0EsS0FBSyxNQUFNQyxZQUFZLElBQUl4QyxXQUFXLENBQUN1QyxrQkFBa0IsRUFBRztRQUMzRCxNQUFNbkMsS0FBSyxHQUFHLElBQUksQ0FBQ25GLFdBQVcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE1BQU1pQixRQUFRLEdBQUdtQyxZQUFZLENBQUN4RyxrQkFBa0I7UUFDaEQsTUFBTUMsSUFBSSxHQUFHb0UsUUFBUSxFQUFFRSxTQUFTLENBQUNGLFFBQVEsQ0FBQ0csV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNQyxjQUFjLEdBQUdMLEtBQUssQ0FBQ2Ysb0JBQW9CLENBQUNXLFdBQVcsQ0FBQ25CLGNBQWMsR0FBRyw4QkFBOEIsR0FBRzVDLElBQUksQ0FBQztRQUNySCxNQUFNd0csMkJBQTJCLEdBQUdsSCwyQkFBMkIsQ0FBeUNrRixjQUFjLENBQUM7UUFDdkgsTUFBTU8sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDMUQsRUFBRSxHQUM3QixHQUFHQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUMzQixJQUFJLENBQUNGLEVBQUUsRUFDUCxlQUFlLEVBQ2YwQyxXQUFXLENBQUNkLEdBQUcsRUFDZHVELDJCQUEyQixDQUFDOUcsWUFBWSxFQUFnQ3NGLEtBQUssRUFBRWhGLElBQUksQ0FDbkYsQ0FBQyxFQUFFLEdBQ0osRUFBRTtRQUVMLE1BQU15RyxtQkFBbUIsR0FDdkJELDJCQUEyQixDQUFDOUcsWUFBWSxFQUFnQ3NGLEtBQUssRUFBRWxGLE9BQU8sRUFBRTdELElBQUksS0FBSyxhQUFhO1FBRWhILE1BQU15SyxpQkFBaUIsR0FBR0QsbUJBQW1CLEdBQzFDNUUsR0FBRztBQUNUO0FBQ0EsaUJBQWlCa0QsZ0JBQWdCO0FBQ2pDLG9CQUFvQixJQUFJLENBQUNoRyxTQUFTLEVBQUUwRSxPQUFPLENBQUMsQ0FBQztBQUM3QyxpQkFBaUJlLGNBQWMsQ0FBQ2YsT0FBTyxDQUFDLENBQUM7QUFDekMsaUJBQWlCLElBQUksQ0FBQ0UsUUFBUTtBQUM5Qix1QkFBdUIsSUFBSSxDQUFDdEMsRUFBRSxHQUFHQyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsRUFBRSxFQUFFLDRCQUE0QixFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDdkg7QUFDQTtBQUNBO0FBQ0EsSUFBSSxHQUNFLEVBQUU7UUFFTHFELGtCQUFrQixJQUFJSSxpQkFBaUI7TUFDeEM7TUFFQSxNQUFNeEQsdUJBQXVCLEdBQUc1RCwyQkFBMkIsQ0FDMUQsSUFBSSxDQUFDTixXQUFXLENBQUNtRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxvQkFBb0IsQ0FBQ1csV0FBVyxDQUFDbkIsY0FBYyxJQUFJLEVBQUUsQ0FDbEYsQ0FBK0M7TUFDL0MsTUFBTWdELGlCQUFpQixHQUFHN0IsV0FBVyxDQUFDOEIsZUFBZSxHQUNsRHJDLG9CQUFvQixDQUFDTix1QkFBaUcsQ0FBQyxHQUN2SCxzQ0FBc0M7TUFDekMsTUFBTXpCLGFBQWEsR0FBR0MsVUFBVSxDQUFDQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUNDLGNBQWMsRUFBRXNCLHVCQUF1QixDQUFDO01BQ3hHLElBQUl5RCx1QkFBdUIsR0FBRyxFQUFFO01BQ2hDLElBQUlDLE9BQU8sR0FBRyxFQUFFO01BQ2hCLElBQUksSUFBSSxDQUFDdkYsRUFBRSxFQUFFO1FBQ1osSUFBSSxJQUFJLENBQUNSLFNBQVMsRUFBRTtVQUNuQjhGLHVCQUF1QixHQUFHLEdBQUcsSUFBSSxDQUFDOUYsU0FBUyxLQUFLUyxjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUN2RSxJQUFJLENBQUNGLEVBQUUsRUFDUCx1QkFBdUIsRUFDdkIwQyxXQUFXLENBQUNkLEdBQUcsQ0FDZixDQUFDLEVBQUU7VUFDSjJELE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQy9GLFNBQVMsS0FBS1MsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRSw0QkFBNEIsRUFBRTBDLFdBQVcsQ0FBQ2QsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNwSCxDQUFDLE1BQU07VUFDTjBELHVCQUF1QixHQUFHLEdBQUdyRixjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsRUFBRSxFQUFFLHVCQUF1QixFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxFQUFFO1VBQzNHMkQsT0FBTyxHQUFHLEdBQUd0RixjQUFjLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ0YsRUFBRSxFQUFFLDRCQUE0QixFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ2pHO01BQ0Q7TUFDQSxNQUFNdkQsWUFBWSxHQUFJd0QsdUJBQXVCLEVBQUV4RCxZQUFZLEVBQXdDRyxNQUFNLEVBQUVDLE9BQXFCO01BRWhJLE1BQU11RCxVQUFVLEdBQUdILHVCQUF1QixFQUFFeEQsWUFBWSxFQUFFVSxXQUFXLEVBQUVrRCxFQUFFLEVBQUVDLGdCQUFnQixHQUN4RixvQkFBb0IsR0FDcEIsMkNBQTJDO01BRTlDLE9BQU8xQixHQUFHO0FBQ1o7QUFDQTtBQUNBLDhCQUE4QndCLFVBQVU7QUFDeEMsbUJBQW1Cc0QsdUJBQXVCO0FBQzFDLHdCQUF3QmYsaUJBQWlCO0FBQ3pDLGVBQWUsSUFBSSxDQUFDdkQsSUFBSSxDQUFDLFNBQVMsRUFBRVosYUFBYSxDQUFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qi9CLFlBQVksRUFBRUUsS0FBSyxJQUFJbUUsV0FBVyxDQUFDa0MsS0FBSztBQUMvRCxxQkFBcUJXLE9BQU87QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjdDLFdBQVcsQ0FBQ29CLGFBQWEsRUFBRTBCLDBCQUEwQixLQUFLLElBQUksR0FBRyxLQUFLLEdBQUcsUUFBUTtBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQlAsa0JBQWtCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0lBQ1g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFyRixNQUFBLENBS0E2RixtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDL0MsV0FBa0MsRUFBVTtNQUMvRCxNQUFNYix1QkFBdUIsR0FBRzVELDJCQUEyQixDQUMxRCxJQUFJLENBQUNOLFdBQVcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDVyxXQUFXLENBQUNuQixjQUFjLElBQUksRUFBRSxDQUNsRixDQUErQztNQUMvQyxNQUFNbkIsYUFBYSxHQUFHQyxVQUFVLENBQUNDLHlCQUF5QixDQUFDLElBQUksQ0FBQ0MsY0FBYyxFQUFFc0IsdUJBQXVCLENBQUM7TUFDeEcsTUFBTStCLGtCQUFrQixHQUFHM0QsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO01BQy9FLElBQUkyQixhQUFhLEdBQUcsV0FBVztNQUMvQixNQUFNNEMsaUJBQWlCLEdBQUc3QixXQUFXLENBQUM4QixlQUFlLEdBQ2xEckMsb0JBQW9CLENBQUNOLHVCQUFpRyxDQUFDLEdBQ3ZILHNDQUFzQztNQUN6QyxNQUFNNkIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDMUQsRUFBRSxHQUFHLEdBQUdDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUsYUFBYSxFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtNQUMvRyxJQUFJLElBQUksQ0FBQzVCLEVBQUUsRUFBRTtRQUNaLElBQUksSUFBSSxDQUFDUixTQUFTLEVBQUU7VUFDbkJtQyxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUNuQyxTQUFTLEtBQUtTLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUsYUFBYSxFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzNHLENBQUMsTUFBTTtVQUNORCxhQUFhLEdBQUcsR0FBRzFCLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUsYUFBYSxFQUFFMEMsV0FBVyxDQUFDZCxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3hGO01BQ0Q7TUFDQSxNQUFNSSxVQUFVLEdBQUdILHVCQUF1QixFQUFFeEQsWUFBWSxFQUFFVSxXQUFXLEVBQUVrRCxFQUFFLEVBQUVDLGdCQUFnQixHQUN4RixvQkFBb0IsR0FDcEIsMkNBQTJDO01BRTlDLE9BQU8xQixHQUFHO0FBQ1o7QUFDQTtBQUNBLDhCQUE4QndCLFVBQVU7QUFDeEMsbUJBQW1CTCxhQUFhO0FBQ2hDLHNCQUFzQmUsV0FBVyxDQUFDa0MsS0FBSztBQUN2Qyx3QkFBd0JMLGlCQUFpQjtBQUN6QyxlQUFlLElBQUksQ0FBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUVaLGFBQWEsQ0FBQztBQUNsRDtBQUNBO0FBQ0E7QUFDQSwyQkFBMkJzRCxnQkFBZ0I7QUFDM0MsNkJBQTZCRSxrQkFBa0I7QUFDL0MsOEJBQThCLElBQUksQ0FBQ2pHLFdBQVcsQ0FBQ3lFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hELDJCQUEyQk0sV0FBVyxDQUFDbkIsY0FBYztBQUNyRCwyQkFBMkIsSUFBSSxDQUFDZSxRQUFRO0FBQ3hDLDJCQUEyQkksV0FBVyxDQUFDZ0QsUUFBUTtBQUMvQyxpQ0FBaUNoRCxXQUFXLENBQUNpRCxjQUFjO0FBQzNEO0FBQ0E7QUFDQSxpQ0FBaUNqRCxXQUFXLENBQUNvQixhQUFhLEVBQUVDLGFBQWE7QUFDekUsZ0NBQWdDckIsV0FBVyxDQUFDb0IsYUFBYSxFQUFFRSxZQUFZO0FBQ3ZFLGlDQUFpQ3RCLFdBQVcsQ0FBQ29CLGFBQWEsRUFBRUksYUFBYTtBQUN6RSw0Q0FBNEN4QixXQUFXLENBQUNvQixhQUFhLEVBQUVHLHdCQUF3QjtBQUMvRiw2Q0FBNkN2QixXQUFXLENBQUNvQixhQUFhLEVBQUVLLHlCQUF5QjtBQUNqRztBQUNBO0FBQ0Esa0NBQWtDekIsV0FBVyxDQUFDb0IsYUFBYSxFQUFFTSxjQUFjO0FBQzNFLGdEQUFnRDFCLFdBQVcsQ0FBQ29CLGFBQWEsRUFBRU8sNEJBQTRCO0FBQ3ZHLG1DQUFtQzNCLFdBQVcsQ0FBQ29CLGFBQWEsRUFBRThCLE9BQU87QUFDckUsNkNBQTZDbEQsV0FBVyxDQUFDb0IsYUFBYSxFQUFFK0IseUJBQXlCO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtJQUNYOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBakcsTUFBQSxDQUtBa0csb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ3BELFdBQThCLEVBQVU7TUFDNUQsTUFBTXFELFlBQVksR0FBRyxJQUFJLENBQUNwSSxXQUFXLENBQUN5RSxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBR00sV0FBVyxDQUFDcUQsWUFBWTtNQUNoRixNQUFNbEUsdUJBQXVCLEdBQUc1RCwyQkFBMkIsQ0FBQyxJQUFJLENBQUNOLFdBQVcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDZ0UsWUFBWSxDQUFDLENBRTlHO01BQ1osTUFBTTNGLGFBQWEsR0FBR0MsVUFBVSxDQUFDQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUNDLGNBQWMsRUFBRXNCLHVCQUF1QixDQUFDO01BQ3hHLElBQUlGLGFBQWEsR0FBRyxFQUFFO01BQ3RCLElBQUksSUFBSSxDQUFDM0IsRUFBRSxFQUFFO1FBQ1osSUFBSSxJQUFJLENBQUNSLFNBQVMsRUFBRTtVQUNuQm1DLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQ25DLFNBQVMsS0FBS1MsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRTBDLFdBQVcsQ0FBQzFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDM0YsQ0FBQyxNQUFNO1VBQ04yQixhQUFhLEdBQUcsR0FBRzFCLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDRixFQUFFLEVBQUUwQyxXQUFXLENBQUMxQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQ3hFO01BQ0Q7TUFDQSxNQUFNZ0MsVUFBVSxHQUFHSCx1QkFBdUIsRUFBRXhELFlBQVksRUFBRVUsV0FBVyxFQUFFa0QsRUFBRSxFQUFFQyxnQkFBZ0IsR0FDeEYsb0JBQW9CLEdBQ3BCLDJDQUEyQztNQUM5QyxNQUFNOEQsY0FBYyxHQUFHL0YsY0FBYyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNGLEVBQUUsRUFBRTBDLFdBQVcsQ0FBQ2QsR0FBRyxDQUFDLENBQUM7TUFDMUUsT0FBT3BCLEdBQUc7QUFDWjtBQUNBLDJCQUEyQndCLFVBQVU7QUFDckMsZ0JBQWdCTCxhQUFhO0FBQzdCLG1CQUFtQmUsV0FBVyxDQUFDa0MsS0FBSztBQUNwQyxxQkFBcUJsQyxXQUFXLENBQUNoQyxPQUFPO0FBQ3hDLFlBQVksSUFBSSxDQUFDTSxJQUFJLENBQUMsU0FBUyxFQUFFWixhQUFhLENBQUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCc0MsV0FBVyxDQUFDcUQsWUFBWTtBQUNoRCwyQkFBMkIsSUFBSSxDQUFDcEksV0FBVyxDQUFDeUUsT0FBTyxDQUFDLENBQUM7QUFDckQsOEJBQThCNEQsY0FBYztBQUM1QztBQUNBO0FBQ0EsbUJBQW1CQSxjQUFjO0FBQ2pDLDZCQUE2QnRELFdBQVcsQ0FBQ3VELFFBQVE7QUFDakQsNEJBQTRCLElBQUksQ0FBQ3RJLFdBQVcsQ0FBQ3lFLE9BQU8sQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBeEMsTUFBQSxDQUtBc0csYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUN4RCxXQUF3QixFQUFVO01BQy9DLE9BQU9sQyxHQUFHLGVBQWVrQyxXQUFXLENBQUNkLEdBQUcsTUFBTTtJQUMvQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWhDLE1BQUEsQ0FLQXVHLHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUNDLFNBQXNCLEVBQVc7TUFDdEQsSUFBSUMsMEJBQTBCLEdBQUcsS0FBSztNQUN0QyxJQUFJRCxTQUFTLENBQUM3RSxjQUFjLEVBQUU7UUFDN0IsTUFBTTRCLGNBQWMsR0FBRyxJQUFJLENBQUN4RixXQUFXLENBQUNtRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxvQkFBb0IsQ0FBQ3FFLFNBQVMsQ0FBQzdFLGNBQWMsQ0FBQztRQUNqRyxNQUFNK0UsU0FBUyxHQUFHbkQsY0FBYyxDQUFDeEMsU0FBUyxDQUFDLENBQUMsRUFBRWdELEtBQUssRUFBRTRDLEtBQUs7UUFDMUQsSUFBSUQsU0FBUyxFQUFFO1VBQ2RELDBCQUEwQixHQUFHRyxpQkFBaUIsQ0FDN0NDLG9CQUFvQixDQUFDeEksMkJBQTJCLENBQUNrRixjQUFjLENBQUMsRUFBRW1ELFNBQVMsQ0FDNUUsQ0FBQztRQUNGO01BQ0Q7TUFFQSxPQUFPRCwwQkFBMEI7SUFDbEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBekcsTUFBQSxDQUlBNEMsMkJBQTJCLEdBQTNCLFNBQUFBLDJCQUEyQkEsQ0FBQSxFQUFXO01BQ3JDLElBQUlrRSxZQUFZLEdBQUcsRUFBRTtNQUVyQixJQUFJLElBQUksQ0FBQ3BILG1CQUFtQixLQUFLSCxTQUFTLEVBQUU7UUFDM0MsS0FBSyxNQUFNaUgsU0FBUyxJQUFJLElBQUksQ0FBQzlHLG1CQUFtQixFQUFFO1VBQ2pELFFBQVE4RyxTQUFTLENBQUN4TCxJQUFJO1lBQ3JCLEtBQUssWUFBWTtjQUNoQixJQUNFd0wsU0FBUyxDQUEyQnZELGVBQWUsSUFDbkR1RCxTQUFTLENBQTJCdkQsZUFBZSxDQUFFOUUsTUFBTSxHQUFHLENBQUMsRUFDL0Q7Z0JBQ0QySSxZQUFZLElBQUksSUFBSSxDQUFDakUsNkJBQTZCLENBQUMyRCxTQUFTLENBQUM7Y0FDOUQsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDRCxxQkFBcUIsQ0FBQ0MsU0FBUyxDQUFDLEVBQUU7Z0JBQ2pETSxZQUFZLElBQUksSUFBSSxDQUFDN0IsNkJBQTZCLENBQUN1QixTQUFTLENBQUM7Y0FDOUQsQ0FBQyxNQUFNLElBQ0xBLFNBQVMsQ0FBMkJuQixrQkFBa0IsSUFDdERtQixTQUFTLENBQTJCbkIsa0JBQWtCLENBQUVsSCxNQUFNLEdBQUcsQ0FBQyxFQUNsRTtnQkFDRDJJLFlBQVksSUFBSSxJQUFJLENBQUMxQix3QkFBd0IsQ0FBQ29CLFNBQVMsQ0FBQztjQUN6RCxDQUFDLE1BQU07Z0JBQ05NLFlBQVksSUFBSSxJQUFJLENBQUNqQixtQkFBbUIsQ0FBQ1csU0FBUyxDQUFDO2NBQ3BEO2NBQ0E7WUFDRCxLQUFLLFNBQVM7Y0FDYk0sWUFBWSxJQUFJLElBQUksQ0FBQ1osb0JBQW9CLENBQUNNLFNBQThCLENBQUM7Y0FDekU7WUFDRDtjQUNDTSxZQUFZLElBQUksSUFBSSxDQUFDUixhQUFhLENBQUNFLFNBQVMsQ0FBQztjQUM3QztVQUNGO1FBQ0Q7TUFDRDtNQUVBLE9BQU81RixHQUFHLEdBQUdrRyxZQUFZLEVBQUU7SUFDNUIsQ0FBQztJQUFBLE9BQUFyTSxrQkFBQTtFQUFBLEVBN3ZCOENzTSwyQkFBMkIsR0FBQWpLLFdBQUEsR0FBQWtLLHlCQUFBLENBQUExSyxPQUFBLENBQUEyRCxTQUFBLFNBQUFuRixLQUFBO0lBQUFtTSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXJLLFlBQUEsR0FBQWlLLHlCQUFBLENBQUExSyxPQUFBLENBQUEyRCxTQUFBLGtCQUFBaEYsS0FBQTtJQUFBZ00sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFwSyxZQUFBLEdBQUFnSyx5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSxnQkFBQTVFLEtBQUE7SUFBQTRMLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBbkssWUFBQSxHQUFBK0oseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQTJELFNBQUEsZUFBQTNFLEtBQUE7SUFBQTJMLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBbEssWUFBQSxHQUFBOEoseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQTJELFNBQUEsMEJBQUExRSxLQUFBO0lBQUEwTCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWpLLFlBQUEsR0FBQTZKLHlCQUFBLENBQUExSyxPQUFBLENBQUEyRCxTQUFBLGtCQUFBekUsS0FBQTtJQUFBeUwsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FzQzVELEtBQUs7SUFBQTtFQUFBLElBQUFoSyxZQUFBLEdBQUE0Six5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSxZQUFBeEUsS0FBQTtJQUFBd0wsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUEvSixZQUFBLEdBQUEySix5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSxpQkFBQXZFLEtBQUE7SUFBQXVMLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BWU4sTUFBTTtJQUFBO0VBQUEsSUFBQTlKLFlBQUEsR0FBQTBKLHlCQUFBLENBQUExSyxPQUFBLENBQUEyRCxTQUFBLHFCQUFBdEUsTUFBQTtJQUFBc0wsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE3SixhQUFBLEdBQUF5Six5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSxjQUFBckUsTUFBQTtJQUFBcUwsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE1SixhQUFBLEdBQUF3Six5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSw0QkFBQXBFLE1BQUE7SUFBQW9MLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBM0osYUFBQSxHQUFBdUoseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQTJELFNBQUEseUJBQUFuRSxNQUFBO0lBQUFtTCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQXdCRSw2Q0FBNkM7SUFBQTtFQUFBLElBQUExSixhQUFBLEdBQUFzSix5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSxjQUFBbEUsTUFBQTtJQUFBa0wsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF6SixhQUFBLEdBQUFxSix5QkFBQSxDQUFBMUssT0FBQSxDQUFBMkQsU0FBQSxvQ0FBQWpFLE1BQUE7SUFBQWlMLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBeEosYUFBQSxHQUFBb0oseUJBQUEsQ0FBQTFLLE9BQUEsQ0FBQTJELFNBQUEsbUJBQUFoRSxNQUFBO0lBQUFnTCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQVNmLENBQUMsQ0FBQztJQUFBO0VBQUEsSUFBQXZKLGFBQUEsR0FBQW1KLHlCQUFBLENBQUExSyxPQUFBLENBQUEyRCxTQUFBLGVBQUE5RCxNQUFBO0lBQUE4SyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTlLLE9BQUEsTUFBQUQsTUFBQTtFQUFBeUQsUUFBQSxHQUFBckYsa0JBQUE7RUFBQSxPQUFBcUYsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119