@sapui5/sap.fe.macros 1.139.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +65 -55
  4. package/src/sap/fe/macros/Field.ts +83 -57
  5. package/src/sap/fe/macros/FooterContent.js +5 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +4 -1
  7. package/src/sap/fe/macros/MessageButton.js +1 -2
  8. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  9. package/src/sap/fe/macros/MultiValueField.js +1 -3
  10. package/src/sap/fe/macros/MultiValueField.tsx +0 -2
  11. package/src/sap/fe/macros/Share.js +14 -2
  12. package/src/sap/fe/macros/Share.tsx +13 -0
  13. package/src/sap/fe/macros/Status.js +226 -0
  14. package/src/sap/fe/macros/Status.tsx +192 -0
  15. package/src/sap/fe/macros/ValueHelp.js +4 -28
  16. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  17. package/src/sap/fe/macros/ai/EasyFilterBar.js +105 -96
  18. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +122 -103
  19. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  20. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  21. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  22. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  23. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  24. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  25. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  26. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  27. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  28. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  29. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  30. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  33. package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
  34. package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
  35. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  36. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  37. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  38. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  39. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  40. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  41. package/src/sap/fe/macros/form/Form.js +1 -4
  42. package/src/sap/fe/macros/form/Form.tsx +0 -3
  43. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  44. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  45. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  46. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  47. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  48. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  49. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  50. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  51. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  52. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  53. package/src/sap/fe/macros/internal/FilterField.block.js +7 -1
  54. package/src/sap/fe/macros/internal/FilterField.block.ts +8 -0
  55. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -3
  56. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +2 -2
  57. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +1 -1
  58. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +1 -0
  59. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  60. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  61. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  62. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  63. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
  64. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
  65. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
  66. package/src/sap/fe/macros/library.js +1 -1
  67. package/src/sap/fe/macros/messagebundle.properties +5 -3
  68. package/src/sap/fe/macros/messagebundle_ar.properties +7 -1
  69. package/src/sap/fe/macros/messagebundle_bg.properties +7 -1
  70. package/src/sap/fe/macros/messagebundle_ca.properties +10 -4
  71. package/src/sap/fe/macros/messagebundle_cnr.properties +7 -1
  72. package/src/sap/fe/macros/messagebundle_cs.properties +6 -0
  73. package/src/sap/fe/macros/messagebundle_cy.properties +8 -2
  74. package/src/sap/fe/macros/messagebundle_da.properties +7 -1
  75. package/src/sap/fe/macros/messagebundle_de.properties +13 -7
  76. package/src/sap/fe/macros/messagebundle_el.properties +6 -0
  77. package/src/sap/fe/macros/messagebundle_en.properties +10 -4
  78. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -2
  79. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +10 -4
  80. package/src/sap/fe/macros/messagebundle_es.properties +8 -2
  81. package/src/sap/fe/macros/messagebundle_es_MX.properties +10 -4
  82. package/src/sap/fe/macros/messagebundle_et.properties +8 -2
  83. package/src/sap/fe/macros/messagebundle_fi.properties +6 -0
  84. package/src/sap/fe/macros/messagebundle_fr.properties +8 -2
  85. package/src/sap/fe/macros/messagebundle_fr_CA.properties +7 -1
  86. package/src/sap/fe/macros/messagebundle_hi.properties +7 -1
  87. package/src/sap/fe/macros/messagebundle_hr.properties +7 -1
  88. package/src/sap/fe/macros/messagebundle_hu.properties +6 -0
  89. package/src/sap/fe/macros/messagebundle_id.properties +10 -4
  90. package/src/sap/fe/macros/messagebundle_it.properties +6 -0
  91. package/src/sap/fe/macros/messagebundle_iw.properties +7 -1
  92. package/src/sap/fe/macros/messagebundle_ja.properties +8 -2
  93. package/src/sap/fe/macros/messagebundle_kk.properties +10 -4
  94. package/src/sap/fe/macros/messagebundle_ko.properties +6 -0
  95. package/src/sap/fe/macros/messagebundle_lt.properties +7 -1
  96. package/src/sap/fe/macros/messagebundle_lv.properties +7 -1
  97. package/src/sap/fe/macros/messagebundle_mk.properties +7 -1
  98. package/src/sap/fe/macros/messagebundle_ms.properties +6 -0
  99. package/src/sap/fe/macros/messagebundle_nl.properties +6 -0
  100. package/src/sap/fe/macros/messagebundle_no.properties +6 -0
  101. package/src/sap/fe/macros/messagebundle_pl.properties +7 -1
  102. package/src/sap/fe/macros/messagebundle_pt.properties +6 -0
  103. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -0
  104. package/src/sap/fe/macros/messagebundle_ro.properties +7 -1
  105. package/src/sap/fe/macros/messagebundle_ru.properties +9 -3
  106. package/src/sap/fe/macros/messagebundle_sh.properties +7 -1
  107. package/src/sap/fe/macros/messagebundle_sk.properties +6 -0
  108. package/src/sap/fe/macros/messagebundle_sl.properties +6 -0
  109. package/src/sap/fe/macros/messagebundle_sr.properties +7 -1
  110. package/src/sap/fe/macros/messagebundle_sv.properties +6 -0
  111. package/src/sap/fe/macros/messagebundle_th.properties +7 -1
  112. package/src/sap/fe/macros/messagebundle_tr.properties +6 -0
  113. package/src/sap/fe/macros/messagebundle_uk.properties +9 -3
  114. package/src/sap/fe/macros/messagebundle_vi.properties +8 -2
  115. package/src/sap/fe/macros/messagebundle_zh_CN.properties +6 -0
  116. package/src/sap/fe/macros/messagebundle_zh_TW.properties +7 -1
  117. package/src/sap/fe/macros/messages/MessageButton.js +39 -18
  118. package/src/sap/fe/macros/messages/MessageButton.ts +40 -17
  119. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  120. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  121. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  122. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  123. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  124. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  125. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  126. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  127. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  128. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  129. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  130. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +6 -2
  131. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  132. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  133. package/src/sap/fe/macros/table/TableRuntime.js +24 -5
  134. package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
  135. package/src/sap/fe/macros/table/Utils.js +6 -2
  136. package/src/sap/fe/macros/table/Utils.ts +5 -1
  137. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  138. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  139. package/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -2
  140. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +0 -1
  141. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  142. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  143. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
  144. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
  145. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  146. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  147. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +10 -1
  148. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +17 -0
  149. package/src/sap/fe/macros/visualfilters/VisualFilter.js +1 -2
  150. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +0 -1
  151. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
  152. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
@@ -30,6 +30,7 @@ import actionHelper from "sap/fe/core/controllerextensions/editFlow/operations/a
30
30
  import { convertTypes, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
31
31
  import { hasFieldGroupTarget } from "sap/fe/core/converters/annotations/DataField";
32
32
  import FPMHelper from "sap/fe/core/helpers/FPMHelper";
33
+ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
33
34
  import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
34
35
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
35
36
  import { isFulfilled, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
@@ -37,8 +38,10 @@ import FELibrary from "sap/fe/core/library";
37
38
  import { getTargetNavigationPath } from "sap/fe/core/templating/DataModelPathHelper";
38
39
  import { isActionParameterRequiredExpression, isDisabledExpression, isReadOnlyExpression } from "sap/fe/core/templating/FieldControlHelper";
39
40
  import { hasValueHelp, isMultiLineText } from "sap/fe/core/templating/PropertyHelper";
41
+ import type { ComputedAnnotationInterface } from "sap/fe/core/templating/UIFormatters";
40
42
  import FieldHelper from "sap/fe/macros/field/FieldHelper";
41
43
  import { requiresValidation, useCaseSensitiveFilterRequests } from "sap/fe/macros/internal/valuehelp/ValueHelpTemplating";
44
+ import type { AnnotationValueListParameter } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
42
45
  import type ListReportExtensionAPI from "sap/fe/templates/ListReport/ExtensionAPI";
43
46
  import type ObjectPageExtensionAPI from "sap/fe/templates/ObjectPage/ExtensionAPI";
44
47
  import Button from "sap/m/Button";
@@ -312,8 +315,12 @@ export default class ActionParameterDialog {
312
315
  */
313
316
  private async createField(parameter: ActionParameter, parameterContext: Context): Promise<Field> {
314
317
  let display = "Value";
318
+ let additionalValue;
315
319
  try {
316
320
  display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), { context: parameterContext });
321
+ if (hasValueHelp(parameter)) {
322
+ additionalValue = await this.getAdditionalValue({ context: parameterContext });
323
+ }
317
324
  } catch (err: unknown) {
318
325
  Log.warning(`Parameter dialog field: display format couldn't be calculated for parameter '${parameter.name}': ${err}`);
319
326
  }
@@ -341,6 +348,7 @@ export default class ActionParameterDialog {
341
348
  )
342
349
  )}
343
350
  ariaLabelledBy={[generate(["APD_", parameter.name, "Label"])]}
351
+ additionalValue={additionalValue}
344
352
  />
345
353
  );
346
354
  }
@@ -382,7 +390,7 @@ export default class ActionParameterDialog {
382
390
  (convertTypes(this.metaModel).entityContainer.annotations.Capabilities
383
391
  ?.FilterFunctions as unknown as string[]) ?? []
384
392
  )
385
- : false
393
+ : ModelHelper.isFilteringCaseSensitive(this.metaModel)
386
394
  }
387
395
  useAsValueHelp={!!parameter.annotations.Common?.ValueListWithFixedValues}
388
396
  />
@@ -1193,4 +1201,43 @@ export default class ActionParameterDialog {
1193
1201
  this.dialog?.destroy();
1194
1202
  this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
1195
1203
  }
1204
+
1205
+ /**
1206
+ * Gets the type of the property used for text annotation in the ValueHelp for the action parameter and provides the formatted binding.
1207
+ * @param oInterface The parameter
1208
+ * @returns The form element control.
1209
+ */
1210
+ private async getAdditionalValue(oInterface: ComputedAnnotationInterface): Promise<string | undefined> {
1211
+ let textContext;
1212
+
1213
+ const contextPath = oInterface.context.getPath();
1214
+ const localDataProperty = oInterface.context.getObject()?.$Name;
1215
+ const valueListByQualifier = await this.metaModel.requestValueListInfo(contextPath, true);
1216
+
1217
+ // Look for LocalDataProperty in ValueListParameterOut or ValueListParameterInOut where this is the parameter name
1218
+ // We only consider TextAnnotations for this action parameter
1219
+ const valueListParameter = valueListByQualifier[""].Parameters.find(
1220
+ (parameter: AnnotationValueListParameter) =>
1221
+ parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" ||
1222
+ (parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterOut" &&
1223
+ parameter.LocalDataProperty?.$PropertyPath === localDataProperty)
1224
+ );
1225
+
1226
+ if (valueListParameter && valueListParameter.ValueListProperty) {
1227
+ const textProperty = valueListParameter.ValueListProperty;
1228
+ // Now we have the name of the property that is the annotated text
1229
+ const propertyPath = `/${valueListByQualifier[""].CollectionPath}/${textProperty}`;
1230
+ const propAnnotations = this.metaModel.getObject(`${propertyPath}@`);
1231
+
1232
+ if (propAnnotations["@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement"]) {
1233
+ const textProp = propAnnotations["@com.sap.vocabularies.Common.v1.Text"];
1234
+ const textPath = `/${valueListByQualifier[""].CollectionPath}/${textProp.$Path}`;
1235
+ textContext = this.metaModel.createBindingContext(textPath);
1236
+ }
1237
+
1238
+ if (textContext) {
1239
+ return AnnotationHelper.format(textContext.getObject(), { context: textContext });
1240
+ }
1241
+ }
1242
+ }
1196
1243
  }
@@ -91,6 +91,29 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
91
91
  setLocalTexts(settingsModel, resourceModel);
92
92
  const list = new List();
93
93
  list.setModel(settingsModel);
94
+
95
+ // Function to clear personalization dependent controls when "Own Settings" is selected
96
+ const updatePersonalizationDependentControls = selectedValue => {
97
+ const dependentControls = ["personalizationSort", "personalizationColumn", "personalizationFilter", "personalizationGroup"];
98
+ const isOwnSettings = selectedValue === "Own Settings";
99
+ if (isOwnSettings) {
100
+ dependentControls.forEach(controlId => {
101
+ const listItems = list.getItems();
102
+ for (const item of listItems) {
103
+ const content = item.getContent();
104
+ for (const control of content) {
105
+ if (control.data("id") === controlId) {
106
+ if (control.setSelected) {
107
+ control.setSelected(false);
108
+ propertyValues[controlId] = false;
109
+ }
110
+ break;
111
+ }
112
+ }
113
+ }
114
+ });
115
+ }
116
+ };
94
117
  const listItem = new InputListItem({
95
118
  label: "{label}"
96
119
  });
@@ -191,6 +214,10 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
191
214
  value = JSON.parse(value.toLowerCase());
192
215
  }
193
216
  propertyValues[this.data("id")] = value;
217
+ // Special handling for personalization setting
218
+ if (this.data("id") === "personalization") {
219
+ updatePersonalizationDependentControls(value);
220
+ }
194
221
  }
195
222
  }).data("id", id);
196
223
  select.bindItems({
@@ -450,4 +477,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
450
477
  _exports.isManifestChangesEnabled = isManifestChangesEnabled;
451
478
  return _exports;
452
479
  }, false);
453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJ1bmNoYW5nZWREYXRhIiwicHJvcGVydHlWYWx1ZXMiLCJwcm9wZXJ0eUNoYW5nZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIndyaXRlT2JqZWN0Iiwid3JpdGVPYmplY3RGb3IiLCJjaGFuZ2VPYmplY3QiLCJsZW5ndGgiLCJzZXR0aW5nc1RvZ2V0aGVyIiwicGF0aCIsInNraXBDaGFuZ2UiLCJfZXhwb3J0cyIsImdldENoYW5nZVN0cnVjdHVyZSIsImFwcENvbXBvbmVudCIsInBhZ2UiLCJwcm9wZXJ0eVBhdGgiLCJzZWxlY3RvciIsImNoYW5nZVNwZWNpZmljRGF0YSIsImFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlIiwiY29udGVudCIsInBhcmFtZXRlcnMiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5VmFsdWUiLCJzZXRMb2NhbFRleHQiLCJpdGVtIiwicmVzb3VyY2VNb2RlbCIsImtleSIsImdldFRleHQiLCJzZXRMb2NhbFRleHRzIiwibW9kZWwiLCJzZXR0aW5nc0RhdGEiLCJnZXREYXRhIiwiY29udHJvbCIsImNvbnRyb2xEYXRhIiwiZW51bSIsImVudW1EYXRhIiwiY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50IiwiY29uZmlnQ29udGV4dCIsImNvbmZpZ1BhdGgiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZXR0aW5nc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImRlZXBDbG9uZSIsImdldFByb3BlcnR5IiwibGlzdCIsIkxpc3QiLCJzZXRNb2RlbCIsImxpc3RJdGVtIiwiSW5wdXRMaXN0SXRlbSIsImxhYmVsIiwiYmluZENvbnRlbnQiLCJmYWN0b3J5IiwiY29udGV4dCIsInR5cGUiLCJJdGVtIiwidGV4dCIsInNlbGVjdCIsIlNlbGVjdCIsInNlbGVjdGVkS2V5IiwiY2hhbmdlIiwiZXZlbnQiLCJkYXRhIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0S2V5IiwiYmluZEl0ZW1zIiwidGVtcGxhdGUiLCJJbnB1dCIsInZhbHVlIiwib011bHRpSW5wdXQiLCJNdWx0aUlucHV0Iiwid2lkdGgiLCJzaG93VmFsdWVIZWxwIiwic2hvd0NsZWFySWNvbiIsInRva2VucyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2aWdhdGlvblByb3BlcnR5IiwiVG9rZW4iLCJ0b2tlblVwZGF0ZSIsImFycmF5IiwicHVzaCIsInNwbGljZSIsImluZGV4T2YiLCJhZGRWYWxpZGF0b3IiLCJhcmdzIiwiQ2hlY2tCb3giLCJzZWxlY3RlZCIsInRvTG93ZXJDYXNlIiwicGFyc2UiLCJ0b1N0cmluZyIsIm9wZW5BZGFwdGlvbkRpYWxvZyIsInRpdGxlIiwiaW5mb1RleHQiLCJzaXplIiwiaW5mb3JtYXRpb25NZXNzYWdlIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJhZGRTdHlsZUNsYXNzIiwibGlzdEluZGV4IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkaWFsb2ciLCJEaWFsb2ciLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwiaGVpZ2h0IiwiYnV0dG9ucyIsIkJ1dHRvbiIsInByZXNzIiwidXBkYXRlQ29uZmlnTW9kZWwiLCJnZXRDb250ZW50IiwiZ2V0TW9kZWwiLCJjbG9zZSIsIm9wZW4iLCJwcm9jZXNzQ2hhbmdlcyIsInNpbmdsZUNoYW5nZSIsImNoYW5nZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZ2V0Q2hhbmdlIiwicHJvY2Vzc0dsb2JhbENoYW5nZXMiLCJrZXlzIiwic2VwYXJhdGVDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRQYWdlIiwiZ2V0UGFyZW50Iiwic2VwYXJhdGVHbG9iYWxDaGFuZ2VzIiwidmlld0lkIiwiZ2V0VGFyZ2V0VmlldyIsImdldElkIiwic3BsaXQiLCJleHRyYWN0Q2hhbmdlcyIsInByb3BlcnR5VmFsdWVzRW50ZXJlZCIsImdsb2JhbFNldHRpbmdzIiwiZ2xvYmFsQ2hhbmdlcyIsImdsb2JhbCIsImNvbmNhdCIsIm5vQ2hhbmdlcyIsImlzRmlvcmlUb29sc1J0YU1vZGUiLCJ1cmxQYXJhbXMiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwicGFyc2VQYXJhbWV0ZXJzIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJpc1JUQU1vZGUiLCJnZXRTZXR0aW5nc0lmS2V5VXNlciIsIml0ZW1zIiwiZmlsdGVyIiwia2V5VXNlciIsImlzQ29uZmlnTW9kZWxQcmVwYXJlZCIsInByZXBhcmVDb25maWdNb2RlbCIsInNldFByb3BlcnR5IiwiZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyIsInNldHRpbmdzIiwiZ2V0T2JqZWN0IiwicGVyc29uYWxpemF0aW9uU2V0dGluZyIsImZpbmQiLCJ1cGRhdGVkU2V0dGluZ3MiLCJnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zIiwicHJvcHMiLCJwcm9wIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiZW51bXMiLCJlbnVtbSIsImlzTWFuaWZlc3RDaGFuZ2VzRW5hYmxlZCIsIm93bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJzYXBGZU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RFbnRyeSIsImFwcCIsImRpc2FibGVNYW5pZmVzdENoYW5nZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRlc2lnbnRpbWUuaGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogUmV1c2UgZnVuY3Rpb25zIGZvciBkZXNpZ250aW1lIGFkYXB0aW9uXG4gKi9cblxuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dExpc3RJdGVtIGZyb20gXCJzYXAvbS9JbnB1dExpc3RJdGVtXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IE11bHRpSW5wdXQkVG9rZW5VcGRhdGVFdmVudCB9IGZyb20gXCJzYXAvbS9NdWx0aUlucHV0XCI7XG5pbXBvcnQgTXVsdGlJbnB1dCBmcm9tIFwic2FwL20vTXVsdGlJbnB1dFwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSBcInNhcC9tL1Rva2VuXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBJdGVtIGZyb20gXCJzYXAvdWkvY29yZS9JdGVtXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIGFkYXB0aW9uQ2hhbmdlID0ge1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0c2VsZWN0b3I6IEFwcENvbXBvbmVudDtcblx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0YXBwRGVzY3JpcHRvckNoYW5nZVR5cGU6IFwiYXBwZGVzY3JfZmVfY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIjtcblx0XHRjb250ZW50OiB7XG5cdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhZ2U6IHN0cmluZztcblx0XHRcdFx0ZW50aXR5UHJvcGVydHlDaGFuZ2U6IHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0XHRcdFx0XHRvcGVyYXRpb246IHN0cmluZztcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXHRcdH07XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBEZXNpZ250aW1lU2V0dGluZ0VudW1zID0ge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVzaWdudGltZVNldHRpbmcgPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0cmVzdHJpY3RlZFRvPzogVGVtcGxhdGVUeXBlW107XG5cdHZhbHVlOiB1bmtub3duO1xuXHR0eXBlPzogc3RyaW5nO1xuXHRlbnVtcz86IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXTtcblx0c2tpcENoYW5nZT86IGJvb2xlYW47XG5cdHdyaXRlT2JqZWN0Rm9yPzogc3RyaW5nO1xuXHR3cml0ZU9iamVjdD86IHsgaWQ6IHN0cmluZzsgcGF0aD86IHN0cmluZyB9W107XG5cdGtleVVzZXI/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvcGVydHlWYWx1ZSA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgYm9vbGVhbiB8IG51bWJlciB8IG9iamVjdCB8IHVuZGVmaW5lZD47XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdzRGF0YSA9IHtcblx0bGFiZWw6IHN0cmluZztcblx0dG9vbHRpcDogc3RyaW5nO1xuXHRjb250cm9sOiBDb250cm9sRGF0YVtdO1xuXHRrZXlVc2VyPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgQ29udHJvbERhdGEgPSB7XG5cdHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW51bTogRGVzaWdudGltZVNldHRpbmdFbnVtc1tdIHwgdW5kZWZpbmVkO1xuXHR2YWx1ZTogdW5rbm93bjtcblx0aWQ6IHN0cmluZztcbn07XG5cbnR5cGUgcHJvcEtleUFuZFZhbHVlID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBJZGVudGlmeSB3aGljaCBzZXR0aW5ncyBoYXZlIGNoYW5nZWQuXG4gKiBAcGFyYW0gZGVzaWdudGltZVNldHRpbmdzXG4gKiBAcGFyYW0gdW5jaGFuZ2VkRGF0YVxuICogQHBhcmFtIHByb3BlcnR5VmFsdWVzXG4gKiAgQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB3aGVyZSB0aGUgdmFsdWVzIGhhdmUgYmVlbiBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBzdGFydGluZyB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5nZWRQcm9wZXJ0eVZhbHVlcyhcblx0ZGVzaWdudGltZVNldHRpbmdzOiBEZXNpZ250aW1lU2V0dGluZ1tdLFxuXHR1bmNoYW5nZWREYXRhOiBQcm9wZXJ0eVZhbHVlLFxuXHRwcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZVxuKTogUHJvcGVydHlWYWx1ZSB7XG5cdGNvbnN0IHByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlWYWx1ZSA9IHt9O1xuXG5cdGRlc2lnbnRpbWVTZXR0aW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChzZXR0aW5nKSB7XG5cdFx0aWYgKFxuXHRcdFx0KHR5cGVvZiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdICE9PSBcIm9iamVjdFwiICYmIHVuY2hhbmdlZERhdGFbc2V0dGluZy5pZF0gIT09IHByb3BlcnR5VmFsdWVzW3NldHRpbmcuaWRdKSB8fFxuXHRcdFx0KHR5cGVvZiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KHVuY2hhbmdlZERhdGFbc2V0dGluZy5pZF0pICE9PSBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSkpXG5cdFx0KSB7XG5cdFx0XHRpZiAoc2V0dGluZy53cml0ZU9iamVjdCAmJiBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSA9PT0gc2V0dGluZy53cml0ZU9iamVjdEZvcikge1xuXHRcdFx0XHQvLyBXZSB3cml0ZSBhbiBvYmplY3QgZm9yIHRoaXMgc2V0dGluZ1xuXHRcdFx0XHRjb25zdCBjaGFuZ2VPYmplY3Q6IFByb3BlcnR5VmFsdWUgPSB7fTtcblx0XHRcdFx0aWYgKHNldHRpbmcud3JpdGVPYmplY3QgJiYgc2V0dGluZy53cml0ZU9iamVjdD8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHNldHRpbmcud3JpdGVPYmplY3QuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGluZ3NUb2dldGhlcikge1xuXHRcdFx0XHRcdFx0Y2hhbmdlT2JqZWN0W3NldHRpbmdzVG9nZXRoZXIucGF0aCA/IHNldHRpbmdzVG9nZXRoZXIucGF0aCA6IHNldHRpbmdzVG9nZXRoZXIuaWRdID1cblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc2V0dGluZ3NUb2dldGhlci5pZF07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJvcGVydHlDaGFuZ2VzW3NldHRpbmcucGF0aCA/IHNldHRpbmcucGF0aCA6IHNldHRpbmcuaWRdID0gY2hhbmdlT2JqZWN0O1xuXHRcdFx0fSBlbHNlIGlmICghc2V0dGluZy5za2lwQ2hhbmdlKSB7XG5cdFx0XHRcdHByb3BlcnR5Q2hhbmdlc1tzZXR0aW5nLnBhdGggPyBzZXR0aW5nLnBhdGggOiBzZXR0aW5nLmlkXSA9IHByb3BlcnR5VmFsdWVzW3NldHRpbmcuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwcm9wZXJ0eUNoYW5nZXM7XG59XG4vKipcbiAqIENvbnZlcnQgc2FwLmZlIGNoYW5nZSBpbnRvIGEgc3RydWN0dXJlIHJlcXVpcmVkIGJ5IHRoZSBmbGV4aWJpbGl0eSB0b29scy5cbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBwYWdlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcmV0dXJucyBUaGUgY2hhbmdlIHN0cnVjdHVyZSB1c2VkIGJ5IGZsZXhpYmlsaXR5IHRvb2xzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VTdHJ1Y3R1cmUoXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYWdlOiBzdHJpbmcsXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgYm9vbGVhbiB8IG51bWJlciB8IG9iamVjdCB8IHVuZGVmaW5lZFxuKTogYWRhcHRpb25DaGFuZ2Uge1xuXHRyZXR1cm4ge1xuXHRcdGFwcENvbXBvbmVudDogYXBwQ29tcG9uZW50LFxuXHRcdHNlbGVjdG9yOiBhcHBDb21wb25lbnQsXG5cdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRhcHBEZXNjcmlwdG9yQ2hhbmdlVHlwZTogXCJhcHBkZXNjcl9mZV9jaGFuZ2VQYWdlQ29uZmlndXJhdGlvblwiLFxuXHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdFx0cGFnZTogcGFnZSxcblx0XHRcdFx0XHRlbnRpdHlQcm9wZXJ0eUNoYW5nZToge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb246IFwiVVBTRVJUXCIsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlOiBwcm9wZXJ0eUNoYW5nZXNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIHNldExvY2FsVGV4dChpdGVtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGtleSBpbiBpdGVtKSB7XG5cdFx0aWYgKGtleSAhPT0gXCJpZFwiICYmIHR5cGVvZiBpdGVtW2tleV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGl0ZW1ba2V5XSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChpdGVtW2tleV0gYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0TG9jYWxUZXh0cyhtb2RlbDogSlNPTk1vZGVsLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogdm9pZCB7XG5cdGNvbnN0IHNldHRpbmdzRGF0YSA9IG1vZGVsLmdldERhdGEoKSBhcyBTZXR0aW5nc0RhdGFbXTtcblx0c2V0dGluZ3NEYXRhLmZvckVhY2goKHNldHRpbmcpID0+IHtcblx0XHRzZXRMb2NhbFRleHQoc2V0dGluZywgcmVzb3VyY2VNb2RlbCk7XG5cdFx0c2V0dGluZy5jb250cm9sLmZvckVhY2goKGNvbnRyb2xEYXRhKSA9PiB7XG5cdFx0XHRzZXRMb2NhbFRleHQoY29udHJvbERhdGEsIHJlc291cmNlTW9kZWwpO1xuXHRcdFx0Y29udHJvbERhdGEuZW51bT8uZm9yRWFjaCgoZW51bURhdGEpID0+IHtcblx0XHRcdFx0c2V0TG9jYWxUZXh0KGVudW1EYXRhLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkYXB0aW9uRGlhbG9nQ29udGVudChcblx0Y29uZmlnQ29udGV4dDogQ29udGV4dCxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWUsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGNvbmZpZ1BhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiXG4pOiBMaXN0IHtcblx0Y29uc3Qgc2V0dGluZ3NNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0c2V0dGluZ3NNb2RlbC5zZXREYXRhKGRlZXBDbG9uZShjb25maWdDb250ZXh0LmdldFByb3BlcnR5KGNvbmZpZ1BhdGgpKSk7XG5cdHNldExvY2FsVGV4dHMoc2V0dGluZ3NNb2RlbCwgcmVzb3VyY2VNb2RlbCk7XG5cdGNvbnN0IGxpc3QgPSBuZXcgTGlzdCgpO1xuXHRsaXN0LnNldE1vZGVsKHNldHRpbmdzTW9kZWwpO1xuXG5cdGNvbnN0IGxpc3RJdGVtID0gbmV3IElucHV0TGlzdEl0ZW0oe1xuXHRcdGxhYmVsOiBcIntsYWJlbH1cIlxuXHR9KTtcblxuXHRsaXN0SXRlbS5iaW5kQ29udGVudCh7XG5cdFx0cGF0aDogXCJjb250cm9sXCIsXG5cdFx0ZmFjdG9yeTogZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgY29udGV4dDogeyBnZXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfSAvKiBzYXAudWkubW9kZWwuQ29udGV4dCAqLykge1xuXHRcdFx0Y29uc3QgdHlwZSA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJ0eXBlXCIpO1xuXHRcdFx0Y29uc3QgaWQgPSBjb250ZXh0LmdldFByb3BlcnR5KFwiaWRcIik7XG5cblx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0aWYgKGNvbnRleHQuZ2V0UHJvcGVydHkoXCJlbnVtXCIpKSB7XG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBzZWxlY3QgbGlzdCBmb3IgbXVsdGlwbGUgb3B0aW9ucyB0byBzZWxlY3Rcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW0gPSBuZXcgSXRlbSh7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IFwie25hbWV9XCIsXG5cdFx0XHRcdFx0XHRcdGtleTogXCJ7aWR9XCJcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3QgPSBuZXcgU2VsZWN0KHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIFNlbGVjdCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gKFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXZlbnQuZ2V0UGFyYW1ldGVyKFwic2VsZWN0ZWRJdGVtXCIpIGFzIEl0ZW1cblx0XHRcdFx0XHRcdFx0XHQpLmdldEtleSgpIGFzIHN0cmluZyAmIGJvb2xlYW47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cblx0XHRcdFx0XHRcdHNlbGVjdC5iaW5kSXRlbXMoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBcImVudW1cIixcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGU6IGl0ZW1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGFuIElucHV0IGZvciB0ZXh0IGNoYW5nZXNcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgSW5wdXQoe1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgSW5wdXQpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IGV2ZW50LmdldFBhcmFtZXRlcihcInZhbHVlXCIpIGFzIHN0cmluZyAmXG5cdFx0XHRcdFx0XHRcdFx0XHRib29sZWFuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcInN0cmluZ1tdXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGFuIG11bHRpIGlucHV0IGZpZWxkIGZvciB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0Y29uc3Qgb011bHRpSW5wdXQgPSBuZXcgTXVsdGlJbnB1dCh7XG5cdFx0XHRcdFx0XHR3aWR0aDogXCI3MCVcIixcblx0XHRcdFx0XHRcdHNob3dWYWx1ZUhlbHA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0c2hvd0NsZWFySWNvbjogdHJ1ZSxcblx0XHRcdFx0XHRcdHRva2VuczogKHByb3BlcnR5VmFsdWVzPy5uYXZpZ2F0aW9uUHJvcGVydGllcyBhcyBzdHJpbmdbXSkubWFwKChuYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG5ldyBUb2tlbih7IHRleHQ6IG5hdmlnYXRpb25Qcm9wZXJ0eSwga2V5OiBuYXZpZ2F0aW9uUHJvcGVydHkgfSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHRva2VuVXBkYXRlOiBmdW5jdGlvbiAoZXZlbnQ6IE11bHRpSW5wdXQkVG9rZW5VcGRhdGVFdmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhcnJheSA9IHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIE11bHRpSW5wdXQpLmRhdGEoXCJpZFwiKV0gYXMgc3RyaW5nW107XG5cdFx0XHRcdFx0XHRcdGlmICgoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiYWRkZWRUb2tlbnNcIikgYXMgVG9rZW5bXSk/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhcnJheS5wdXNoKChldmVudD8uZ2V0UGFyYW1ldGVyKFwiYWRkZWRUb2tlbnNcIikgYXMgVG9rZW5bXSlbMF0/LmdldFByb3BlcnR5KFwia2V5XCIpKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICgoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVtb3ZlZFRva2Vuc1wiKSBhcyBUb2tlbltdKT8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGFycmF5LnNwbGljZShhcnJheS5pbmRleE9mKChldmVudD8uZ2V0UGFyYW1ldGVyKFwicmVtb3ZlZFRva2Vuc1wiKSBhcyBUb2tlbltdKVswXT8uZ2V0UHJvcGVydHkoXCJrZXlcIikpLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdFx0b011bHRpSW5wdXQuYWRkVmFsaWRhdG9yKGZ1bmN0aW9uIChhcmdzOiB7IHRleHQ6IHN0cmluZyB9KSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gYXJncy50ZXh0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIG5ldyBUb2tlbih7XG5cdFx0XHRcdFx0XHRcdGtleTogdGV4dCxcblx0XHRcdFx0XHRcdFx0dGV4dDogdGV4dFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuIG9NdWx0aUlucHV0O1xuXHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGFuIElucHV0IGZvciBudW1iZXIgY2hhbmdlc1xuXHRcdFx0XHRcdHJldHVybiBuZXcgSW5wdXQoe1xuXHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJOdW1iZXJcIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSBhcyBzdHJpbmcgJlxuXHRcdFx0XHRcdFx0XHRcdGJvb2xlYW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHQvLyBDcmVhdGUgYSBjaGVja2JveCBmb3IgdHJ1ZS9mYWxzZSB2YWx1ZXNcblx0XHRcdFx0XHRyZXR1cm4gbmV3IENoZWNrQm94KHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdHNlbGVjdDogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIENoZWNrQm94KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XCJzZWxlY3RlZFwiXG5cdFx0XHRcdFx0XHRcdCkgYXMgc3RyaW5nICYgYm9vbGVhbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhbk9yU3RyaW5nXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgc2VsZWN0IGxpc3QgZm9yIGJvb2xlYW4gYW5kIHN0cmluZyBvcHRpb25zIHRvIHNlbGVjdFxuXHRcdFx0XHRcdC8vIFRoaXMgdHlwZSBpcyBhdCB0aGUgbW9tZW50IG9ubHkgdXNlZCBmb3IgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzIHdoaWNoIGNhbiBiZSB1bmRlZmluZWQsIHRydWUsIGZhbHNlIG9yIGFuIG9iamVjdFxuXHRcdFx0XHRcdC8vIFRoZSBzZWxlY3QgbGlzdCBpcyB1c2VkIHRvIHNlbGVjdCBiZXR3ZWVuIHRydWUsIGZhbHNlIGFuZCBcIk93biBTZXR0aW5nc1wiXG5cdFx0XHRcdFx0Ly8gSWYgXCJPd24gU2V0dGluZ3NcIiBpcyBzZWxlY3RlZCwgdGhlIHBlcnNvbmFsaXphdGlvbiBvYmplY3QgaXMgd3JpdHRlbiwgb3RoZXJ3aXNlIHRoZSBib29sZWFuIGlzIHdyaXR0ZW4gKHVuZGVmaW5lZCBjYW5ub3QgYmUgd3JpdHRlbiBpbiBhIG1hbmlmZXN0IGNoYW5nZSlcblx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV3IEl0ZW0oe1xuXHRcdFx0XHRcdFx0dGV4dDogXCJ7bmFtZX1cIixcblx0XHRcdFx0XHRcdGtleTogXCJ7aWR9XCJcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdCA9IG5ldyBTZWxlY3Qoe1xuXHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gKGV2ZW50LmdldFBhcmFtZXRlcihcInNlbGVjdGVkSXRlbVwiKSBhcyBJdGVtKS5nZXRLZXkoKTtcblx0XHRcdFx0XHRcdFx0Ly8gQ29udmVydCBzdHJpbmcgdG8gYm9vbGVhbiBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdFx0aWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIiB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBTZWxlY3QpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cblx0XHRcdFx0XHRzZWxlY3QuYmluZEl0ZW1zKHtcblx0XHRcdFx0XHRcdHBhdGg6IFwiZW51bVwiLFxuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IGl0ZW1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm4gc2VsZWN0O1xuXHRcdFx0XHRjYXNlIFwianNvblwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBpbnB1dCBmb3IganNvbiBvYmplY3QgZGVzY3JpcHRpb25zXG5cdFx0XHRcdFx0Ly8gQSB0ZXh0IGFyZWEgd291bGQgaGF2ZSBiZWVuIGJldHRlciBidXQgdGhpcyBkb2VzIG5vdCB3b3JrIHdpdGggdGhlIElucHV0TGlzdEl0ZW1cblx0XHRcdFx0XHQvLyB3ZSB3b3VsZCBoYXZlIG5lZWRlZCBhIEN1c3RvbUxpc3RJdGVtIGluc3RlYWRcblx0XHRcdFx0XHQvLyB3aGljaCB3b3VsZCBoYXZlIGJlZW4gdG9vIG11Y2ggZWZmb3J0IGFzIHdlIHdvdWxkIGhhdmUgbmVlZGVkIHRvIGNoYW5nZSB0aGUgd2hvbGUgc3RydWN0dXJlXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBJbnB1dCh7XG5cdFx0XHRcdFx0XHR2YWx1ZTogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBJbnB1dCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRcdFx0XHRldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKT8udG9TdHJpbmcoKSBhcyBzdHJpbmdcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0bGlzdC5iaW5kSXRlbXMoe1xuXHRcdHBhdGg6IFwiL1wiLFxuXHRcdHRlbXBsYXRlOiBsaXN0SXRlbVxuXHR9KTtcblxuXHRyZXR1cm4gbGlzdDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5BZGFwdGlvbkRpYWxvZyhcblx0Y29uZmlnQ29udGV4dDogQ29udGV4dCxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWUsXG5cdHRpdGxlOiBzdHJpbmcsXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdGNvbmZpZ1BhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiLFxuXHRpbmZvVGV4dCA9IFwie3NhcC5mZS5pMThuPlJUQV9DT05GSUdVUkFUSU9OX0lORk9fTUVTU0FHRX1cIixcblx0c2l6ZT86IHsgd2lkdGg6IHN0cmluZzsgaGVpZ2h0OiBzdHJpbmcgfVxuKTogUHJvbWlzZTxQcm9wZXJ0eVZhbHVlPiB7XG5cdGNvbnN0IGxpc3QgPSBjcmVhdGVBZGFwdGlvbkRpYWxvZ0NvbnRlbnQoY29uZmlnQ29udGV4dCwgcHJvcGVydHlWYWx1ZXMsIHJlc291cmNlTW9kZWwsIGNvbmZpZ1BhdGgpO1xuXHRjb25zdCBjb250ZW50OiAoTGlzdCB8IE1lc3NhZ2VTdHJpcClbXSA9IFtdO1xuXHRjb25zdCBpbmZvcm1hdGlvbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZVN0cmlwKHtcblx0XHRzaG93SWNvbjogdHJ1ZSxcblx0XHR0eXBlOiBcIkluZm9ybWF0aW9uXCIsXG5cdFx0dGV4dDogaW5mb1RleHRcblx0fSk7XG5cdGluZm9ybWF0aW9uTWVzc2FnZS5hZGRTdHlsZUNsYXNzKFwic2FwVWlTbWFsbE1hcmdpbkJvdHRvbVwiKTtcblx0Y29udGVudC5wdXNoKGluZm9ybWF0aW9uTWVzc2FnZSk7XG5cdGNvbnRlbnQucHVzaChsaXN0KTtcblx0Y29uc3QgbGlzdEluZGV4ID0gY29udGVudC5pbmRleE9mKGxpc3QpO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGNvbnN0IGRpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0Y29udGVudFdpZHRoOiBzaXplID8gc2l6ZS53aWR0aCA6IFwiNTUwcHhcIixcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IHNpemUgPyBzaXplLmhlaWdodCA6IFwiMzAwcHhcIixcblx0XHRcdGNvbnRlbnQ6IGNvbnRlbnQsXG5cdFx0XHRidXR0b25zOiBbXG5cdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IFwie3NhcC5mZS5pMThuPlJUQV9DT05GSUdVUkFUSU9OX0FQUExZfVwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvLyBwZXJzaXN0IGNoYW5nZXMgZG9uZVxuXHRcdFx0XHRcdFx0dXBkYXRlQ29uZmlnTW9kZWwoY29uZmlnQ29udGV4dCwgZGlhbG9nLmdldENvbnRlbnQoKVtsaXN0SW5kZXhdLmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsLCBjb25maWdQYXRoKTtcblx0XHRcdFx0XHRcdGRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShwcm9wZXJ0eVZhbHVlcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fQ0FOQ0VMfVwiLFxuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdF1cblx0XHR9KTtcblx0XHRkaWFsb2cuc2V0TW9kZWwocmVzb3VyY2VNb2RlbCwgXCJzYXAuZmUuaTE4blwiKTtcblx0XHRkaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0ZGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaVJUQUJvcmRlclwiKTtcblx0XHRkaWFsb2cub3BlbigpO1xuXHRcdHJldHVybjtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ2hhbmdlcyhcblx0cHJvcGVydHlDaGFuZ2VzOiBwcm9wS2V5QW5kVmFsdWUsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYWdlOiBzdHJpbmcsXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nXG4pOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0bGV0IHNpbmdsZUNoYW5nZTogcHJvcEtleUFuZFZhbHVlID0ge307XG5cdGNvbnN0IGNoYW5nZXMgPSBbXTtcblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydHlDaGFuZ2VzKSkge1xuXHRcdHNpbmdsZUNoYW5nZSA9IHt9O1xuXHRcdHNpbmdsZUNoYW5nZVtrZXldID0gdmFsdWU7XG5cdFx0Y2hhbmdlcy5wdXNoKGdldENoYW5nZShzaW5nbGVDaGFuZ2UsIGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoKSk7XG5cdH1cblx0cmV0dXJuIGNoYW5nZXM7XG59XG5cbi8qKlxuICogRm9ybWF0IGVhY2ggY2hhbmdlIG1hZGUgdG8gZ2xvYmFsIHNldHRpbmdzIFwic2FwLmZlXCJcbiAqIFRoZSBzZXQgb2YgY2hhbmdlcyBhcmUgcHV0IGludG8gaW5kaXZpZHVhbCBjaGFuZ2VzIHRvIGVuc3VyZVxuICogdGhhdCBlYXJsaWVyIGNoYW5nZXMgYXJlIG5vdCBsb3N0IHdoZW4gdGhlc2UgYXJlIGxvYWRlZCBhdCBydW50aW1lLlxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIHBhZ2VcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2Ugc3RydWN0dXJlIHVzZWQgYnkgZmxleGliaWxpdHkgdG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NHbG9iYWxDaGFuZ2VzKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRsZXQgc2luZ2xlQ2hhbmdlOiBwcm9wS2V5QW5kVmFsdWUgPSB7fTtcblx0Y29uc3QgY2hhbmdlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eUNoYW5nZXMpKSB7XG5cdFx0c2luZ2xlQ2hhbmdlID0ge307XG5cdFx0c2luZ2xlQ2hhbmdlW2tleV0gPSB2YWx1ZTtcblx0XHRjaGFuZ2VzLnB1c2goZ2V0Q2hhbmdlKHNpbmdsZUNoYW5nZSwgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpKTtcblx0fVxuXHRyZXR1cm4gY2hhbmdlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYW5nZShcblx0cHJvcGVydHlDaGFuZ2VzOiBwcm9wS2V5QW5kVmFsdWUsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYWdlOiBzdHJpbmcsXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nXG4pOiBhZGFwdGlvbkNoYW5nZSB7XG5cdC8vIENoYW5nZXMgZm9yIGNvbnRyb2xzIGhhdmUgYSBwYXRoIHN0YXJ0aW5nIHdpdGggY29udHJvbENvbmZpZ3VyYXRpb24sIGZvbGxvd2VkIGJ5IGFuIGFubm90YXRpb24gcGF0aFxuXHQvLyBGb3IgdGhlIGxpc3QgcmVwb3J0IGNoYW5nZXMsIHRoZXJlIGlzIG5vIHBhdGggYmVjYXVzZSB0aGUgcHJvcGVydGllcyBhcmUgZGlyZWN0bHkgdW5kZXIgU2V0dGluZ3Ncblx0Ly8gZm9yIHRoZSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiIGluIHRoZSBtYW5pZmVzdC5cblx0aWYgKHByb3BlcnR5UGF0aCA9PT0gXCJcIikge1xuXHRcdHByb3BlcnR5UGF0aCA9IE9iamVjdC5rZXlzKHByb3BlcnR5Q2hhbmdlcylbMF07XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydHlQYXRoID0gcHJvcGVydHlQYXRoICsgXCIvXCIgKyBPYmplY3Qua2V5cyhwcm9wZXJ0eUNoYW5nZXMpWzBdO1xuXHR9XG5cdGNvbnN0IHZhbHVlID0gcHJvcGVydHlDaGFuZ2VzW09iamVjdC5rZXlzKHByb3BlcnR5Q2hhbmdlcylbMF1dO1xuXG5cdHJldHVybiBnZXRDaGFuZ2VTdHJ1Y3R1cmUoYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgsIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiB0aGUgY29udHJvbCBzZXR0aW5ncyB0aGF0IGFyZSBuZWVkZWRcbiAqIGZvciB0aGUgY2hhbmdlIHN0cnVjdHVyZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYW5nZXNcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcmV0dXJucyBUaGUgY2hhbmdlcyBpbiBhIHN0cnVjdHVyZSB1c2VkIGJ5IGZsZXhpYmlsaXR5IHRvb2xzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXBhcmF0ZUNoYW5nZXMocHJvcGVydHlDaGFuZ2VzOiBQcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udHJvbCk7XG5cdGNvbnN0IHBhZ2UgPSBnZXRQYWdlKGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgQ29udHJvbCk7XG5cdHJldHVybiBwcm9jZXNzQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXMsIGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiB0aGUgZ2xvYmFsIHNldHRpbmdzIHRoYXQgYXJlIG5lZWRlZFxuICogZm9yIHRoZSBjaGFuZ2Ugc3RydWN0dXJlLlxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VzIGluIGEgc3RydWN0dXJlIHVzZWQgYnkgZmxleGliaWxpdHkgdG9vbHNcbiAqL1xuZnVuY3Rpb24gc2VwYXJhdGVHbG9iYWxDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlWYWx1ZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wpO1xuXHRjb25zdCBwYWdlID0gXCJzYXAuZmVcIjtcblx0cmV0dXJuIHByb2Nlc3NHbG9iYWxDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlcywgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlKGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcge1xuXHRjb25zdCB2aWV3SWQgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNvbnRyb2wpLmdldElkKCkuc3BsaXQoXCI6OlwiKTtcblx0cmV0dXJuIHZpZXdJZFt2aWV3SWQubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0Q2hhbmdlcyA9IGZ1bmN0aW9uIChcblx0ZGVzaWdudGltZVNldHRpbmdzOiBEZXNpZ250aW1lU2V0dGluZ1tdLFxuXHR1bmNoYW5nZWREYXRhOiBQcm9wZXJ0eVZhbHVlLFxuXHRwcm9wZXJ0eVZhbHVlc0VudGVyZWQ6IFByb3BlcnR5VmFsdWUsXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb250cm9sOiBDb250cm9sLFxuXHRnbG9iYWxTZXR0aW5ncz86IERlc2lnbnRpbWVTZXR0aW5nW11cbik6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZXMgPSBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoZGVzaWdudGltZVNldHRpbmdzLCB1bmNoYW5nZWREYXRhLCBwcm9wZXJ0eVZhbHVlc0VudGVyZWQpO1xuXHQvLyBQdXQgZWFjaCBwcm9wZXJ0eSBpbnRvIGl0cyBvd24gY2hhbmdlLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBsb3NlIHByZXZpb3VzIGNoYW5nZXMuXG5cdGxldCBjaGFuZ2VzID0gc2VwYXJhdGVDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlcywgcHJvcGVydHlQYXRoLCBjb250cm9sKTtcblx0aWYgKGdsb2JhbFNldHRpbmdzKSB7XG5cdFx0Y29uc3QgZ2xvYmFsQ2hhbmdlcyA9IGdldENoYW5nZWRQcm9wZXJ0eVZhbHVlcyhnbG9iYWxTZXR0aW5ncywgdW5jaGFuZ2VkRGF0YSwgcHJvcGVydHlWYWx1ZXNFbnRlcmVkKTtcblx0XHRjb25zdCBnbG9iYWwgPSBzZXBhcmF0ZUdsb2JhbENoYW5nZXMoZ2xvYmFsQ2hhbmdlcywgcHJvcGVydHlQYXRoLCBjb250cm9sKTtcblx0XHRjaGFuZ2VzID0gY2hhbmdlcy5jb25jYXQoZ2xvYmFsKTtcblx0fVxuXHRpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNoYW5nZXM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3Qgbm9DaGFuZ2VzID0gZnVuY3Rpb24gKCk6IFtdIHtcblx0cmV0dXJuIFtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlvcmlUb29sc1J0YU1vZGUoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgcnRhIG1vZGUgaGFzIGJlZW4gc3BlY2lmaWVkIG9uIHVybCAoZm9yIGxvY2FsIHRlc3RpbmcpXG5cdGxldCB1cmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRjb25zdCBzaGVsbFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHR1cmxQYXJhbXMgPSBzaGVsbFNlcnZpY2U/LnBhcnNlUGFyYW1ldGVycz8uKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXHRyZXR1cm4gISF1cmxQYXJhbXMgJiYgdXJsUGFyYW1zW1wiZmlvcmktdG9vbHMtcnRhLW1vZGVcIl0/LlswXSA9PT0gXCJmb3JBZGFwdGF0aW9uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUQU1vZGUoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgcnRhIG1vZGUgaGFzIGJlZW4gc3BlY2lmaWVkIG9uIHVybCAoZm9yIGxvY2FsIHRlc3RpbmcpXG5cdGxldCB1cmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRjb25zdCBzaGVsbFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHR1cmxQYXJhbXMgPSBzaGVsbFNlcnZpY2U/LnBhcnNlUGFyYW1ldGVycz8uKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuXHRyZXR1cm4gISF1cmxQYXJhbXMgJiYgdXJsUGFyYW1zW1wic2FwLWZlLXJ0YS1tb2RlXCJdPy5bMF0gPT09IFwidHJ1ZVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ3NJZktleVVzZXIoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGl0ZW1zOiBTZXR0aW5nc0RhdGFbXSk6IFNldHRpbmdzRGF0YVtdIHtcblx0aWYgKCFpc0Zpb3JpVG9vbHNSdGFNb2RlKGFwcENvbXBvbmVudCkpIHtcblx0XHQvLyBub3QgdG9vbHMgPT4ga2V5IHVzZXJcblx0XHRyZXR1cm4gaXRlbXMuZmlsdGVyKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRyZXR1cm4gc2V0dGluZy5rZXlVc2VyO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBpdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uZmlnTW9kZWxQcmVwYXJlZChjb25maWdDb250ZXh0OiBDb250ZXh0LCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IGJvb2xlYW4ge1xuXHRpZiAoY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShwYXRoKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVDb25maWdNb2RlbChpdGVtczogU2V0dGluZ3NEYXRhW10sIGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogdm9pZCB7XG5cdGlmICghY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShwYXRoKSkge1xuXHRcdGNvbmZpZ0NvbnRleHQuc2V0UHJvcGVydHkocGF0aCwgaXRlbXMpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJzb25hbGl6YXRpb25TZXR0aW5nKGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNldHRpbmdzID0gY29uZmlnQ29udGV4dC5nZXRPYmplY3QocGF0aCk7XG5cdGNvbnN0IHBlcnNvbmFsaXphdGlvblNldHRpbmcgPSBzZXR0aW5ncy5maW5kKChzZXR0aW5nOiBTZXR0aW5nc0RhdGEpID0+IHtcblx0XHRyZXR1cm4gc2V0dGluZz8uY29udHJvbFswXT8uaWQgPT09IFwicGVyc29uYWxpemF0aW9uXCI7XG5cdH0pO1xuXHRpZiAocGVyc29uYWxpemF0aW9uU2V0dGluZykge1xuXHRcdHJldHVybiBwZXJzb25hbGl6YXRpb25TZXR0aW5nLmNvbnRyb2xbMF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNvbmZpZ01vZGVsKGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsIHNldHRpbmdzTW9kZWw6IEpTT05Nb2RlbCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiB2b2lkIHtcblx0Y29uc3QgdXBkYXRlZFNldHRpbmdzID0gZGVlcENsb25lKHNldHRpbmdzTW9kZWwuZ2V0RGF0YSgpKTtcblx0Y29uZmlnQ29udGV4dC5zZXRQcm9wZXJ0eShwYXRoLCB1cGRhdGVkU2V0dGluZ3MpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcGVydHlOYW1lc0FuZERlc2NyaXB0aW9ucyhwcm9wczogRGVzaWdudGltZVNldHRpbmdbXSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IERlc2lnbnRpbWVTZXR0aW5nW10ge1xuXHRwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG5cdFx0cHJvcC5uYW1lID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHByb3AubmFtZSk7XG5cdFx0cHJvcC5kZXNjcmlwdGlvbiA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChwcm9wLmRlc2NyaXB0aW9uKTtcblx0XHRpZiAocHJvcC5lbnVtcykge1xuXHRcdFx0cHJvcC5lbnVtcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnVtbSkge1xuXHRcdFx0XHRlbnVtbS5uYW1lID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KGVudW1tLm5hbWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcHJvcHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hbmlmZXN0Q2hhbmdlc0VuYWJsZWQoY29udHJvbDogQ29udHJvbCk6IGJvb2xlYW4ge1xuXHRsZXQgb3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IoY29udHJvbCkgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdGlmIChvd25lciA9PT0gdW5kZWZpbmVkICYmIGNvbnRyb2wuZ2V0UGFyZW50KCkpIHtcblx0XHQvLyBJbiBjYXNlIG9mIE1hc3NFZGl0LCBjb250cm9sIGlzIGEgc2FwLm0uRGlhbG9nIGZvciB3aGljaCB0aGVyZSBpcyBub3cgT3duZXJDb21wb25lbnQsIHNvIHdlIG5lZWQgdG8gY29uc2lkZXIgaXRzIHBhcmVudCBjb250cm9sXG5cdFx0b3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IoY29udHJvbC5nZXRQYXJlbnQoKSEpIGFzIFRlbXBsYXRlQ29tcG9uZW50O1xuXHR9XG5cdGNvbnN0IHNhcEZlTWFuaWZlc3QgPSBvd25lcj8uZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0cmV0dXJuIHNhcEZlTWFuaWZlc3Q/LmFwcD8uZGlzYWJsZU1hbmlmZXN0Q2hhbmdlcyAhPT0gdHJ1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFBQTtBQUNBO0FBQ0E7RUFrRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSx3QkFBd0JBLENBQ3ZDQyxrQkFBdUMsRUFDdkNDLGFBQTRCLEVBQzVCQyxjQUE2QixFQUNiO0lBQ2hCLE1BQU1DLGVBQThCLEdBQUcsQ0FBQyxDQUFDO0lBRXpDSCxrQkFBa0IsQ0FBQ0ksT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtNQUM3QyxJQUNFLE9BQU9KLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDQyxFQUFFLENBQUMsS0FBSyxRQUFRLElBQUlMLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDQyxFQUFFLENBQUMsS0FBS0osY0FBYyxDQUFDRyxPQUFPLENBQUNDLEVBQUUsQ0FBQyxJQUN6RyxPQUFPTCxhQUFhLENBQUNJLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLEtBQUssUUFBUSxJQUM3Q0MsSUFBSSxDQUFDQyxTQUFTLENBQUNQLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDQyxFQUFFLENBQUMsQ0FBQyxLQUFLQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ04sY0FBYyxDQUFDRyxPQUFPLENBQUNDLEVBQUUsQ0FBQyxDQUFFLEVBQ3pGO1FBQ0QsSUFBSUQsT0FBTyxDQUFDSSxXQUFXLElBQUlQLGNBQWMsQ0FBQ0csT0FBTyxDQUFDQyxFQUFFLENBQUMsS0FBS0QsT0FBTyxDQUFDSyxjQUFjLEVBQUU7VUFDakY7VUFDQSxNQUFNQyxZQUEyQixHQUFHLENBQUMsQ0FBQztVQUN0QyxJQUFJTixPQUFPLENBQUNJLFdBQVcsSUFBSUosT0FBTyxDQUFDSSxXQUFXLEVBQUVHLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0RQLE9BQU8sQ0FBQ0ksV0FBVyxDQUFDTCxPQUFPLENBQUMsVUFBVVMsZ0JBQWdCLEVBQUU7Y0FDdkRGLFlBQVksQ0FBQ0UsZ0JBQWdCLENBQUNDLElBQUksR0FBR0QsZ0JBQWdCLENBQUNDLElBQUksR0FBR0QsZ0JBQWdCLENBQUNQLEVBQUUsQ0FBQyxHQUNoRkosY0FBYyxDQUFDVyxnQkFBZ0IsQ0FBQ1AsRUFBRSxDQUFDO1lBQ3JDLENBQUMsQ0FBQztVQUNIO1VBQ0FILGVBQWUsQ0FBQ0UsT0FBTyxDQUFDUyxJQUFJLEdBQUdULE9BQU8sQ0FBQ1MsSUFBSSxHQUFHVCxPQUFPLENBQUNDLEVBQUUsQ0FBQyxHQUFHSyxZQUFZO1FBQ3pFLENBQUMsTUFBTSxJQUFJLENBQUNOLE9BQU8sQ0FBQ1UsVUFBVSxFQUFFO1VBQy9CWixlQUFlLENBQUNFLE9BQU8sQ0FBQ1MsSUFBSSxHQUFHVCxPQUFPLENBQUNTLElBQUksR0FBR1QsT0FBTyxDQUFDQyxFQUFFLENBQUMsR0FBR0osY0FBYyxDQUFDRyxPQUFPLENBQUNDLEVBQUUsQ0FBQztRQUN2RjtNQUNEO0lBQ0QsQ0FBQyxDQUFDO0lBQ0YsT0FBT0gsZUFBZTtFQUN2QjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQWEsUUFBQSxDQUFBakIsd0JBQUEsR0FBQUEsd0JBQUE7RUFRTyxTQUFTa0Isa0JBQWtCQSxDQUNqQ0MsWUFBMEIsRUFDMUJDLElBQVksRUFDWkMsWUFBb0IsRUFDcEJqQixlQUEwRSxFQUN6RDtJQUNqQixPQUFPO01BQ05lLFlBQVksRUFBRUEsWUFBWTtNQUMxQkcsUUFBUSxFQUFFSCxZQUFZO01BQ3RCSSxrQkFBa0IsRUFBRTtRQUNuQkMsdUJBQXVCLEVBQUUscUNBQXFDO1FBQzlEQyxPQUFPLEVBQUU7VUFDUkMsVUFBVSxFQUFFO1lBQ1hOLElBQUksRUFBRUEsSUFBSTtZQUNWTyxvQkFBb0IsRUFBRTtjQUNyQk4sWUFBWSxFQUFFQSxZQUFZO2NBQzFCTyxTQUFTLEVBQUUsUUFBUTtjQUNuQkMsYUFBYSxFQUFFekI7WUFDaEI7VUFDRDtRQUNEO01BQ0Q7SUFDRCxDQUFDO0VBQ0Y7RUFBQ2EsUUFBQSxDQUFBQyxrQkFBQSxHQUFBQSxrQkFBQTtFQUVELFNBQVNZLFlBQVlBLENBQUNDLElBQTZCLEVBQUVDLGFBQTRCLEVBQVE7SUFDeEYsS0FBSyxNQUFNQyxHQUFHLElBQUlGLElBQUksRUFBRTtNQUN2QixJQUFJRSxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU9GLElBQUksQ0FBQ0UsR0FBRyxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQ2xERixJQUFJLENBQUNFLEdBQUcsQ0FBQyxHQUFHRCxhQUFhLENBQUNFLE9BQU8sQ0FBQ0gsSUFBSSxDQUFDRSxHQUFHLENBQVcsQ0FBQztNQUN2RDtJQUNEO0VBQ0Q7RUFFQSxTQUFTRSxhQUFhQSxDQUFDQyxLQUFnQixFQUFFSixhQUE0QixFQUFRO0lBQzVFLE1BQU1LLFlBQVksR0FBR0QsS0FBSyxDQUFDRSxPQUFPLENBQUMsQ0FBbUI7SUFDdERELFlBQVksQ0FBQ2hDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO01BQ2pDd0IsWUFBWSxDQUFDeEIsT0FBTyxFQUFFMEIsYUFBYSxDQUFDO01BQ3BDMUIsT0FBTyxDQUFDaUMsT0FBTyxDQUFDbEMsT0FBTyxDQUFFbUMsV0FBVyxJQUFLO1FBQ3hDVixZQUFZLENBQUNVLFdBQVcsRUFBRVIsYUFBYSxDQUFDO1FBQ3hDUSxXQUFXLENBQUNDLElBQUksRUFBRXBDLE9BQU8sQ0FBRXFDLFFBQVEsSUFBSztVQUN2Q1osWUFBWSxDQUFDWSxRQUFRLEVBQUVWLGFBQWEsQ0FBQztRQUN0QyxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUM7RUFDSDtFQUVPLFNBQVNXLDJCQUEyQkEsQ0FDMUNDLGFBQXNCLEVBQ3RCekMsY0FBNkIsRUFDN0I2QixhQUE0QixFQUVyQjtJQUFBLElBRFBhLFVBQVUsR0FBQUMsU0FBQSxDQUFBakMsTUFBQSxRQUFBaUMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxvQkFBb0I7SUFFakMsTUFBTUUsYUFBYSxHQUFHLElBQUlDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDRCxhQUFhLENBQUNFLE9BQU8sQ0FBQ0MsU0FBUyxDQUFDUCxhQUFhLENBQUNRLFdBQVcsQ0FBQ1AsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN2RVYsYUFBYSxDQUFDYSxhQUFhLEVBQUVoQixhQUFhLENBQUM7SUFDM0MsTUFBTXFCLElBQUksR0FBRyxJQUFJQyxJQUFJLENBQUMsQ0FBQztJQUN2QkQsSUFBSSxDQUFDRSxRQUFRLENBQUNQLGFBQWEsQ0FBQztJQUU1QixNQUFNUSxRQUFRLEdBQUcsSUFBSUMsYUFBYSxDQUFDO01BQ2xDQyxLQUFLLEVBQUU7SUFDUixDQUFDLENBQUM7SUFFRkYsUUFBUSxDQUFDRyxXQUFXLENBQUM7TUFDcEI1QyxJQUFJLEVBQUUsU0FBUztNQUNmNkMsT0FBTyxFQUFFLFNBQUFBLENBQVU3QyxJQUFZLEVBQUU4QyxPQUE4QyxFQUE2QjtRQUMzRyxNQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQ1QsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN4QyxNQUFNN0MsRUFBRSxHQUFHc0QsT0FBTyxDQUFDVCxXQUFXLENBQUMsSUFBSSxDQUFDO1FBRXBDLFFBQVFVLElBQUk7VUFDWCxLQUFLLFFBQVE7WUFDWixJQUFJRCxPQUFPLENBQUNULFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtjQUNoQztjQUNBLE1BQU1yQixJQUFJLEdBQUcsSUFBSWdDLElBQUksQ0FBQztnQkFDckJDLElBQUksRUFBRSxRQUFRO2dCQUNkL0IsR0FBRyxFQUFFO2NBQ04sQ0FBQyxDQUFDO2NBRUYsTUFBTWdDLE1BQU0sR0FBRyxJQUFJQyxNQUFNLENBQUM7Z0JBQ3pCQyxXQUFXLEVBQUUsU0FBUztnQkFDdEJDLE1BQU0sRUFBRSxTQUFBQSxDQUFVQyxLQUFLLEVBQVE7a0JBQzlCbEUsY0FBYyxDQUFFLElBQUksQ0FBWW1FLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBd0IsR0FDakVELEtBQUssQ0FBQ0UsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUNqQ0MsTUFBTSxDQUFDLENBQXFCO2dCQUMvQjtjQUNELENBQUMsQ0FBQyxDQUFDRixJQUFJLENBQUMsSUFBSSxFQUFFL0QsRUFBRSxDQUFDO2NBRWpCMEQsTUFBTSxDQUFDUSxTQUFTLENBQUM7Z0JBQ2hCMUQsSUFBSSxFQUFFLE1BQU07Z0JBQ1oyRCxRQUFRLEVBQUUzQztjQUNYLENBQUMsQ0FBQztjQUNGLE9BQU9rQyxNQUFNO1lBQ2QsQ0FBQyxNQUFNO2NBQ047Y0FDQSxPQUFPLElBQUlVLEtBQUssQ0FBQztnQkFDaEJDLEtBQUssRUFBRSxTQUFTO2dCQUNoQlIsTUFBTSxFQUFFLFNBQUFBLENBQVVDLEtBQUssRUFBUTtrQkFDOUJsRSxjQUFjLENBQUUsSUFBSSxDQUFXbUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUF3QixHQUFHRCxLQUFLLENBQUNFLFlBQVksQ0FBQyxPQUFPLENBQ3RGO2dCQUNUO2NBQ0QsQ0FBQyxDQUFDLENBQUNELElBQUksQ0FBQyxJQUFJLEVBQUUvRCxFQUFFLENBQUM7WUFDbEI7VUFDRCxLQUFLLFVBQVU7WUFDZDtZQUNBLE1BQU1zRSxXQUFXLEdBQUcsSUFBSUMsVUFBVSxDQUFDO2NBQ2xDQyxLQUFLLEVBQUUsS0FBSztjQUNaQyxhQUFhLEVBQUUsS0FBSztjQUNwQkMsYUFBYSxFQUFFLElBQUk7Y0FDbkJDLE1BQU0sRUFBRSxDQUFDL0UsY0FBYyxFQUFFZ0Ysb0JBQW9CLEVBQWNDLEdBQUcsQ0FBRUMsa0JBQWtCLElBQUs7Z0JBQ3RGLE9BQU8sSUFBSUMsS0FBSyxDQUFDO2tCQUFFdEIsSUFBSSxFQUFFcUIsa0JBQWtCO2tCQUFFcEQsR0FBRyxFQUFFb0Q7Z0JBQW1CLENBQUMsQ0FBQztjQUN4RSxDQUFDLENBQUM7Y0FDRkUsV0FBVyxFQUFFLFNBQUFBLENBQVVsQixLQUFrQyxFQUFRO2dCQUNoRSxNQUFNbUIsS0FBSyxHQUFHckYsY0FBYyxDQUFFLElBQUksQ0FBZ0JtRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQWE7Z0JBQ3pFLElBQUtELEtBQUssQ0FBQ0UsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFjMUQsTUFBTSxHQUFHLENBQUMsRUFBRTtrQkFDL0QyRSxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDcEIsS0FBSyxFQUFFRSxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQWEsQ0FBQyxDQUFDLEVBQUVuQixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25GLENBQUMsTUFBTSxJQUFLaUIsS0FBSyxDQUFDRSxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQWMxRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO2tCQUN4RTJFLEtBQUssQ0FBQ0UsTUFBTSxDQUFDRixLQUFLLENBQUNHLE9BQU8sQ0FBQyxDQUFDdEIsS0FBSyxFQUFFRSxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQWEsQ0FBQyxDQUFDLEVBQUVuQixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pHO2NBQ0Q7WUFDRCxDQUFDLENBQUMsQ0FBQ2tCLElBQUksQ0FBQyxJQUFJLEVBQUUvRCxFQUFFLENBQUM7WUFDakJzRSxXQUFXLENBQUNlLFlBQVksQ0FBQyxVQUFVQyxJQUFzQixFQUFFO2NBQzFELE1BQU03QixJQUFJLEdBQUc2QixJQUFJLENBQUM3QixJQUFJO2NBQ3RCLE9BQU8sSUFBSXNCLEtBQUssQ0FBQztnQkFDaEJyRCxHQUFHLEVBQUUrQixJQUFJO2dCQUNUQSxJQUFJLEVBQUVBO2NBQ1AsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsT0FBT2EsV0FBVztVQUNuQixLQUFLLFFBQVE7WUFDWjtZQUNBLE9BQU8sSUFBSUYsS0FBSyxDQUFDO2NBQ2hCQyxLQUFLLEVBQUUsU0FBUztjQUNoQmQsSUFBSSxFQUFFLFFBQVE7Y0FDZE0sTUFBTSxFQUFFLFNBQUFBLENBQVVDLEtBQUssRUFBUTtnQkFDOUJsRSxjQUFjLENBQUUsSUFBSSxDQUFXbUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUF3QixHQUFHRCxLQUFLLENBQUNFLFlBQVksQ0FBQyxPQUFPLENBQ3RGO2NBQ1Q7WUFDRCxDQUFDLENBQUMsQ0FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRS9ELEVBQUUsQ0FBQztVQUNsQixLQUFLLFNBQVM7WUFDYjtZQUNBLE9BQU8sSUFBSXVGLFFBQVEsQ0FBQztjQUNuQkMsUUFBUSxFQUFFLFNBQVM7Y0FDbkI5QixNQUFNLEVBQUUsU0FBQUEsQ0FBVUksS0FBSyxFQUFRO2dCQUM5QmxFLGNBQWMsQ0FBRSxJQUFJLENBQWNtRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQXdCLEdBQUdELEtBQUssQ0FBQ0UsWUFBWSxDQUN4RixVQUNELENBQXFCO2NBQ3RCO1lBQ0QsQ0FBQyxDQUFDLENBQUNELElBQUksQ0FBQyxJQUFJLEVBQUUvRCxFQUFFLENBQUM7VUFDbEIsS0FBSyxpQkFBaUI7WUFDckI7WUFDQTtZQUNBO1lBQ0E7WUFDQSxNQUFNd0IsSUFBSSxHQUFHLElBQUlnQyxJQUFJLENBQUM7Y0FDckJDLElBQUksRUFBRSxRQUFRO2NBQ2QvQixHQUFHLEVBQUU7WUFDTixDQUFDLENBQUM7WUFFRixNQUFNZ0MsTUFBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQztjQUN6QkMsV0FBVyxFQUFFLFNBQVM7Y0FDdEJDLE1BQU0sRUFBRSxTQUFBQSxDQUFVQyxLQUFLLEVBQVE7Z0JBQzlCLElBQUlPLEtBQUssR0FBSVAsS0FBSyxDQUFDRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQVVDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRTtnQkFDQSxJQUFJSSxLQUFLLENBQUNvQixXQUFXLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBSXBCLEtBQUssQ0FBQ29CLFdBQVcsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO2tCQUN0RXBCLEtBQUssR0FBR3BFLElBQUksQ0FBQ3lGLEtBQUssQ0FBQ3JCLEtBQUssQ0FBQ29CLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDO2dCQUNBN0YsY0FBYyxDQUFFLElBQUksQ0FBWW1FLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBd0IsR0FBR00sS0FBSztjQUMzRTtZQUNELENBQUMsQ0FBQyxDQUFDTixJQUFJLENBQUMsSUFBSSxFQUFFL0QsRUFBRSxDQUFDO1lBRWpCMEQsTUFBTSxDQUFDUSxTQUFTLENBQUM7Y0FDaEIxRCxJQUFJLEVBQUUsTUFBTTtjQUNaMkQsUUFBUSxFQUFFM0M7WUFDWCxDQUFDLENBQUM7WUFDRixPQUFPa0MsTUFBTTtVQUNkLEtBQUssTUFBTTtZQUNWO1lBQ0E7WUFDQTtZQUNBO1lBQ0EsT0FBTyxJQUFJVSxLQUFLLENBQUM7Y0FDaEJDLEtBQUssRUFBRSxTQUFTO2NBQ2hCUixNQUFNLEVBQUUsU0FBQUEsQ0FBVUMsS0FBSyxFQUFRO2dCQUM5QmxFLGNBQWMsQ0FBRSxJQUFJLENBQVdtRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQXdCLEdBQUc5RCxJQUFJLENBQUN5RixLQUFLLENBQzdFNUIsS0FBSyxDQUFDRSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUyQixRQUFRLENBQUMsQ0FDdkMsQ0FBQztjQUNGO1lBQ0QsQ0FBQyxDQUFDLENBQUM1QixJQUFJLENBQUMsSUFBSSxFQUFFL0QsRUFBRSxDQUFDO1VBQ2xCO1lBQ0M7UUFDRjtNQUNEO0lBQ0QsQ0FBQyxDQUFDO0lBRUY4QyxJQUFJLENBQUNvQixTQUFTLENBQUM7TUFDZDFELElBQUksRUFBRSxHQUFHO01BQ1QyRCxRQUFRLEVBQUVsQjtJQUNYLENBQUMsQ0FBQztJQUVGLE9BQU9ILElBQUk7RUFDWjtFQUFDcEMsUUFBQSxDQUFBMEIsMkJBQUEsR0FBQUEsMkJBQUE7RUFFTSxlQUFld0Qsa0JBQWtCQSxDQUN2Q3ZELGFBQXNCLEVBQ3RCekMsY0FBNkIsRUFDN0JpRyxLQUFhLEVBQ2JwRSxhQUE0QixFQUlIO0lBQUEsSUFIekJhLFVBQVUsR0FBQUMsU0FBQSxDQUFBakMsTUFBQSxRQUFBaUMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxvQkFBb0I7SUFBQSxJQUNqQ3VELFFBQVEsR0FBQXZELFNBQUEsQ0FBQWpDLE1BQUEsUUFBQWlDLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsOENBQThDO0lBQUEsSUFDekR3RCxJQUF3QyxHQUFBeEQsU0FBQSxDQUFBakMsTUFBQSxPQUFBaUMsU0FBQSxNQUFBQyxTQUFBO0lBRXhDLE1BQU1NLElBQUksR0FBR1YsMkJBQTJCLENBQUNDLGFBQWEsRUFBRXpDLGNBQWMsRUFBRTZCLGFBQWEsRUFBRWEsVUFBVSxDQUFDO0lBQ2xHLE1BQU1wQixPQUFnQyxHQUFHLEVBQUU7SUFDM0MsTUFBTThFLGtCQUFrQixHQUFHLElBQUlDLFlBQVksQ0FBQztNQUMzQ0MsUUFBUSxFQUFFLElBQUk7TUFDZDNDLElBQUksRUFBRSxhQUFhO01BQ25CRSxJQUFJLEVBQUVxQztJQUNQLENBQUMsQ0FBQztJQUNGRSxrQkFBa0IsQ0FBQ0csYUFBYSxDQUFDLHdCQUF3QixDQUFDO0lBQzFEakYsT0FBTyxDQUFDZ0UsSUFBSSxDQUFDYyxrQkFBa0IsQ0FBQztJQUNoQzlFLE9BQU8sQ0FBQ2dFLElBQUksQ0FBQ3BDLElBQUksQ0FBQztJQUNsQixNQUFNc0QsU0FBUyxHQUFHbEYsT0FBTyxDQUFDa0UsT0FBTyxDQUFDdEMsSUFBSSxDQUFDO0lBQ3ZDLE9BQU8sSUFBSXVELE9BQU8sQ0FBQyxVQUFVQyxPQUFPLEVBQUVDLE1BQU0sRUFBRTtNQUM3QyxNQUFNQyxNQUFNLEdBQUcsSUFBSUMsTUFBTSxDQUFDO1FBQ3pCWixLQUFLLEVBQUVBLEtBQUs7UUFDWmEsWUFBWSxFQUFFWCxJQUFJLEdBQUdBLElBQUksQ0FBQ3ZCLEtBQUssR0FBRyxPQUFPO1FBQ3pDbUMsYUFBYSxFQUFFWixJQUFJLEdBQUdBLElBQUksQ0FBQ2EsTUFBTSxHQUFHLE9BQU87UUFDM0MxRixPQUFPLEVBQUVBLE9BQU87UUFDaEIyRixPQUFPLEVBQUUsQ0FDUixJQUFJQyxNQUFNLENBQUM7VUFDVnJELElBQUksRUFBRSx1Q0FBdUM7VUFDN0NGLElBQUksRUFBRSxZQUFZO1VBQ2xCd0QsS0FBSyxFQUFFLFNBQUFBLENBQUEsRUFBa0I7WUFDeEI7WUFDQUMsaUJBQWlCLENBQUMzRSxhQUFhLEVBQUVtRSxNQUFNLENBQUNTLFVBQVUsQ0FBQyxDQUFDLENBQUNiLFNBQVMsQ0FBQyxDQUFDYyxRQUFRLENBQUMsQ0FBQyxFQUFlNUUsVUFBVSxDQUFDO1lBQ3BHa0UsTUFBTSxDQUFDVyxLQUFLLENBQUMsQ0FBQztZQUNkYixPQUFPLENBQUMxRyxjQUFjLENBQUM7VUFDeEI7UUFDRCxDQUFDLENBQUMsRUFDRixJQUFJa0gsTUFBTSxDQUFDO1VBQ1ZyRCxJQUFJLEVBQUUsd0NBQXdDO1VBQzlDc0QsS0FBSyxFQUFFLFNBQUFBLENBQUEsRUFBa0I7WUFDeEJQLE1BQU0sQ0FBQ1csS0FBSyxDQUFDLENBQUM7WUFDZFosTUFBTSxDQUFDLENBQUM7VUFDVDtRQUNELENBQUMsQ0FBQztNQUVKLENBQUMsQ0FBQztNQUNGQyxNQUFNLENBQUN4RCxRQUFRLENBQUN2QixhQUFhLEVBQUUsYUFBYSxDQUFDO01BQzdDK0UsTUFBTSxDQUFDTCxhQUFhLENBQUMscUJBQXFCLENBQUM7TUFDM0NLLE1BQU0sQ0FBQ0wsYUFBYSxDQUFDLGdCQUFnQixDQUFDO01BQ3RDSyxNQUFNLENBQUNZLElBQUksQ0FBQyxDQUFDO01BQ2I7SUFDRCxDQUFDLENBQUM7RUFDSDtFQUFDMUcsUUFBQSxDQUFBa0Ysa0JBQUEsR0FBQUEsa0JBQUE7RUFFTSxTQUFTeUIsY0FBY0EsQ0FDN0J4SCxlQUFnQyxFQUNoQ2UsWUFBMEIsRUFDMUJDLElBQVksRUFDWkMsWUFBb0IsRUFDRDtJQUNuQixJQUFJd0csWUFBNkIsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTUMsT0FBTyxHQUFHLEVBQUU7SUFDbEIsS0FBSyxNQUFNLENBQUM3RixHQUFHLEVBQUUyQyxLQUFLLENBQUMsSUFBSW1ELE1BQU0sQ0FBQ0MsT0FBTyxDQUFDNUgsZUFBZSxDQUFDLEVBQUU7TUFDM0R5SCxZQUFZLEdBQUcsQ0FBQyxDQUFDO01BQ2pCQSxZQUFZLENBQUM1RixHQUFHLENBQUMsR0FBRzJDLEtBQUs7TUFDekJrRCxPQUFPLENBQUNyQyxJQUFJLENBQUN3QyxTQUFTLENBQUNKLFlBQVksRUFBRTFHLFlBQVksRUFBRUMsSUFBSSxFQUFFQyxZQUFZLENBQUMsQ0FBQztJQUN4RTtJQUNBLE9BQU95RyxPQUFPO0VBQ2Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFUQTdHLFFBQUEsQ0FBQTJHLGNBQUEsR0FBQUEsY0FBQTtFQVVPLFNBQVNNLG9CQUFvQkEsQ0FDbkM5SCxlQUFnQyxFQUNoQ2UsWUFBMEIsRUFDMUJDLElBQVksRUFDWkMsWUFBb0IsRUFDRDtJQUNuQixJQUFJd0csWUFBNkIsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTUMsT0FBTyxHQUFHLEVBQUU7SUFDbEIsS0FBSyxNQUFNLENBQUM3RixHQUFHLEVBQUUyQyxLQUFLLENBQUMsSUFBSW1ELE1BQU0sQ0FBQ0MsT0FBTyxDQUFDNUgsZUFBZSxDQUFDLEVBQUU7TUFDM0R5SCxZQUFZLEdBQUcsQ0FBQyxDQUFDO01BQ2pCQSxZQUFZLENBQUM1RixHQUFHLENBQUMsR0FBRzJDLEtBQUs7TUFDekJrRCxPQUFPLENBQUNyQyxJQUFJLENBQUN3QyxTQUFTLENBQUNKLFlBQVksRUFBRTFHLFlBQVksRUFBRUMsSUFBSSxFQUFFQyxZQUFZLENBQUMsQ0FBQztJQUN4RTtJQUNBLE9BQU95RyxPQUFPO0VBQ2Y7RUFBQzdHLFFBQUEsQ0FBQWlILG9CQUFBLEdBQUFBLG9CQUFBO0VBRU0sU0FBU0QsU0FBU0EsQ0FDeEI3SCxlQUFnQyxFQUNoQ2UsWUFBMEIsRUFDMUJDLElBQVksRUFDWkMsWUFBb0IsRUFDSDtJQUNqQjtJQUNBO0lBQ0E7SUFDQSxJQUFJQSxZQUFZLEtBQUssRUFBRSxFQUFFO01BQ3hCQSxZQUFZLEdBQUcwRyxNQUFNLENBQUNJLElBQUksQ0FBQy9ILGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDLE1BQU07TUFDTmlCLFlBQVksR0FBR0EsWUFBWSxHQUFHLEdBQUcsR0FBRzBHLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDL0gsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFO0lBQ0EsTUFBTXdFLEtBQUssR0FBR3hFLGVBQWUsQ0FBQzJILE1BQU0sQ0FBQ0ksSUFBSSxDQUFDL0gsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsT0FBT2Msa0JBQWtCLENBQUNDLFlBQVksRUFBRUMsSUFBSSxFQUFFQyxZQUFZLEVBQUV1RCxLQUFLLENBQUM7RUFDbkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBM0QsUUFBQSxDQUFBZ0gsU0FBQSxHQUFBQSxTQUFBO0VBUU8sU0FBU0csZUFBZUEsQ0FBQ2hJLGVBQThCLEVBQUVpQixZQUFvQixFQUFFa0IsT0FBZ0IsRUFBb0I7SUFDekgsTUFBTXBCLFlBQVksR0FBR2tILFdBQVcsQ0FBQ0MsZUFBZSxDQUFDL0YsT0FBTyxDQUFDO0lBQ3pELE1BQU1uQixJQUFJLEdBQUdtSCxPQUFPLENBQUNoRyxPQUFPLENBQUNpRyxTQUFTLENBQUMsQ0FBWSxDQUFDO0lBQ3BELE9BQU9aLGNBQWMsQ0FBQ3hILGVBQWUsRUFBRWUsWUFBWSxFQUFFQyxJQUFJLEVBQUVDLFlBQVksQ0FBQztFQUN6RTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEFKLFFBQUEsQ0FBQW1ILGVBQUEsR0FBQUEsZUFBQTtFQVFBLFNBQVNLLHFCQUFxQkEsQ0FBQ3JJLGVBQThCLEVBQUVpQixZQUFvQixFQUFFa0IsT0FBZ0IsRUFBb0I7SUFDeEgsTUFBTXBCLFlBQVksR0FBR2tILFdBQVcsQ0FBQ0MsZUFBZSxDQUFDL0YsT0FBTyxDQUFDO0lBQ3pELE1BQU1uQixJQUFJLEdBQUcsUUFBUTtJQUNyQixPQUFPOEcsb0JBQW9CLENBQUM5SCxlQUFlLEVBQUVlLFlBQVksRUFBRUMsSUFBSSxFQUFFQyxZQUFZLENBQUM7RUFDL0U7RUFFQSxTQUFTa0gsT0FBT0EsQ0FBQ2hHLE9BQWdCLEVBQVU7SUFDMUMsTUFBTW1HLE1BQU0sR0FBR0wsV0FBVyxDQUFDTSxhQUFhLENBQUNwRyxPQUFPLENBQUMsQ0FBQ3FHLEtBQUssQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDckUsT0FBT0gsTUFBTSxDQUFDQSxNQUFNLENBQUM3SCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2pDO0VBRU8sTUFBTWlJLGNBQWMsR0FBRyxTQUFBQSxDQUM3QjdJLGtCQUF1QyxFQUN2Q0MsYUFBNEIsRUFDNUI2SSxxQkFBb0MsRUFDcEMxSCxZQUFvQixFQUNwQmtCLE9BQWdCLEVBQ2hCeUcsY0FBb0MsRUFDakI7SUFDbkIsTUFBTTVJLGVBQWUsR0FBR0osd0JBQXdCLENBQUNDLGtCQUFrQixFQUFFQyxhQUFhLEVBQUU2SSxxQkFBcUIsQ0FBQztJQUMxRztJQUNBLElBQUlqQixPQUFPLEdBQUdNLGVBQWUsQ0FBQ2hJLGVBQWUsRUFBRWlCLFlBQVksRUFBRWtCLE9BQU8sQ0FBQztJQUNyRSxJQUFJeUcsY0FBYyxFQUFFO01BQ25CLE1BQU1DLGFBQWEsR0FBR2pKLHdCQUF3QixDQUFDZ0osY0FBYyxFQUFFOUksYUFBYSxFQUFFNkkscUJBQXFCLENBQUM7TUFDcEcsTUFBTUcsTUFBTSxHQUFHVCxxQkFBcUIsQ0FBQ1EsYUFBYSxFQUFFNUgsWUFBWSxFQUFFa0IsT0FBTyxDQUFDO01BQzFFdUYsT0FBTyxHQUFHQSxPQUFPLENBQUNxQixNQUFNLENBQUNELE1BQU0sQ0FBQztJQUNqQztJQUNBLElBQUlwQixPQUFPLENBQUNqSCxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3ZCLE9BQU9pSCxPQUFPO0lBQ2YsQ0FBQyxNQUFNO01BQ04sT0FBTyxFQUFFO0lBQ1Y7RUFDRCxDQUFDO0VBQUM3RyxRQUFBLENBQUE2SCxjQUFBLEdBQUFBLGNBQUE7RUFFSyxNQUFNTSxTQUFTLEdBQUcsU0FBQUEsQ0FBQSxFQUFnQjtJQUN4QyxPQUFPLEVBQUU7RUFDVixDQUFDO0VBQUNuSSxRQUFBLENBQUFtSSxTQUFBLEdBQUFBLFNBQUE7RUFFSyxTQUFTQyxtQkFBbUJBLENBQUNsSSxZQUEwQixFQUFXO0lBQ3hFO0lBQ0EsSUFBSW1JLFNBQW1DLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU1DLFlBQVksR0FBR3BJLFlBQVksQ0FBQ3FJLGdCQUFnQixDQUFDLENBQUM7SUFDcERGLFNBQVMsR0FBR0MsWUFBWSxFQUFFRSxlQUFlLEdBQUdDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxNQUFNLENBQUM7SUFDbkUsT0FBTyxDQUFDLENBQUNOLFNBQVMsSUFBSUEsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssZUFBZTtFQUNqRjtFQUFDckksUUFBQSxDQUFBb0ksbUJBQUEsR0FBQUEsbUJBQUE7RUFFTSxTQUFTUSxTQUFTQSxDQUFDMUksWUFBMEIsRUFBVztJQUM5RDtJQUNBLElBQUltSSxTQUFtQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNQyxZQUFZLEdBQUdwSSxZQUFZLENBQUNxSSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BERixTQUFTLEdBQUdDLFlBQVksRUFBRUUsZUFBZSxHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDO0lBQ25FLE9BQU8sQ0FBQyxDQUFDTixTQUFTLElBQUlBLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU07RUFDbkU7RUFBQ3JJLFFBQUEsQ0FBQTRJLFNBQUEsR0FBQUEsU0FBQTtFQUVNLFNBQVNDLG9CQUFvQkEsQ0FBQzNJLFlBQTBCLEVBQUU0SSxLQUFxQixFQUFrQjtJQUN2RyxJQUFJLENBQUNWLG1CQUFtQixDQUFDbEksWUFBWSxDQUFDLEVBQUU7TUFDdkM7TUFDQSxPQUFPNEksS0FBSyxDQUFDQyxNQUFNLENBQUUxSixPQUFPLElBQUs7UUFDaEMsT0FBT0EsT0FBTyxDQUFDMkosT0FBTztNQUN2QixDQUFDLENBQUM7SUFDSDtJQUNBLE9BQU9GLEtBQUs7RUFDYjtFQUFDOUksUUFBQSxDQUFBNkksb0JBQUEsR0FBQUEsb0JBQUE7RUFFTSxTQUFTSSxxQkFBcUJBLENBQUN0SCxhQUFzQixFQUF3QztJQUFBLElBQXRDN0IsSUFBSSxHQUFBK0IsU0FBQSxDQUFBakMsTUFBQSxRQUFBaUMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxvQkFBb0I7SUFDeEYsSUFBSUYsYUFBYSxDQUFDUSxXQUFXLENBQUNyQyxJQUFJLENBQUMsRUFBRTtNQUNwQyxPQUFPLElBQUk7SUFDWjtJQUNBLE9BQU8sS0FBSztFQUNiO0VBQUNFLFFBQUEsQ0FBQWlKLHFCQUFBLEdBQUFBLHFCQUFBO0VBRU0sU0FBU0Msa0JBQWtCQSxDQUFDSixLQUFxQixFQUFFbkgsYUFBc0IsRUFBcUM7SUFBQSxJQUFuQzdCLElBQUksR0FBQStCLFNBQUEsQ0FBQWpDLE1BQUEsUUFBQWlDLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsb0JBQW9CO0lBQzVHLElBQUksQ0FBQ0YsYUFBYSxDQUFDUSxXQUFXLENBQUNyQyxJQUFJLENBQUMsRUFBRTtNQUNyQzZCLGFBQWEsQ0FBQ3dILFdBQVcsQ0FBQ3JKLElBQUksRUFBRWdKLEtBQUssQ0FBQztJQUN2QztFQUNEO0VBQUM5SSxRQUFBLENBQUFrSixrQkFBQSxHQUFBQSxrQkFBQTtFQUVNLFNBQVNFLHlCQUF5QkEsQ0FBQ3pILGFBQXNCLEVBQTZEO0lBQUEsSUFBM0Q3QixJQUFJLEdBQUErQixTQUFBLENBQUFqQyxNQUFBLFFBQUFpQyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLG9CQUFvQjtJQUM1RixNQUFNd0gsUUFBUSxHQUFHMUgsYUFBYSxDQUFDMkgsU0FBUyxDQUFDeEosSUFBSSxDQUFDO0lBQzlDLE1BQU15SixzQkFBc0IsR0FBR0YsUUFBUSxDQUFDRyxJQUFJLENBQUVuSyxPQUFxQixJQUFLO01BQ3ZFLE9BQU9BLE9BQU8sRUFBRWlDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRWhDLEVBQUUsS0FBSyxpQkFBaUI7SUFDckQsQ0FBQyxDQUFDO0lBQ0YsSUFBSWlLLHNCQUFzQixFQUFFO01BQzNCLE9BQU9BLHNCQUFzQixDQUFDakksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDcUMsS0FBSztJQUMvQztJQUNBLE9BQU83QixTQUFTO0VBQ2pCO0VBQUM5QixRQUFBLENBQUFvSix5QkFBQSxHQUFBQSx5QkFBQTtFQUVNLFNBQVM5QyxpQkFBaUJBLENBQUMzRSxhQUFzQixFQUFFSSxhQUF3QixFQUFxQztJQUFBLElBQW5DakMsSUFBSSxHQUFBK0IsU0FBQSxDQUFBakMsTUFBQSxRQUFBaUMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxvQkFBb0I7SUFDOUcsTUFBTTRILGVBQWUsR0FBR3ZILFNBQVMsQ0FBQ0gsYUFBYSxDQUFDVixPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFETSxhQUFhLENBQUN3SCxXQUFXLENBQUNySixJQUFJLEVBQUUySixlQUFlLENBQUM7RUFDakQ7RUFBQ3pKLFFBQUEsQ0FBQXNHLGlCQUFBLEdBQUFBLGlCQUFBO0VBRU0sU0FBU29ELCtCQUErQkEsQ0FBQ0MsS0FBMEIsRUFBRTVJLGFBQTRCLEVBQXVCO0lBQzlINEksS0FBSyxDQUFDdkssT0FBTyxDQUFDLFVBQVV3SyxJQUFJLEVBQUU7TUFDN0JBLElBQUksQ0FBQ0MsSUFBSSxHQUFHOUksYUFBYSxDQUFDRSxPQUFPLENBQUMySSxJQUFJLENBQUNDLElBQUksQ0FBQztNQUM1Q0QsSUFBSSxDQUFDRSxXQUFXLEdBQUcvSSxhQUFhLENBQUNFLE9BQU8sQ0FBQzJJLElBQUksQ0FBQ0UsV0FBVyxDQUFDO01BQzFELElBQUlGLElBQUksQ0FBQ0csS0FBSyxFQUFFO1FBQ2ZILElBQUksQ0FBQ0csS0FBSyxDQUFDM0ssT0FBTyxDQUFDLFVBQVU0SyxLQUFLLEVBQUU7VUFDbkNBLEtBQUssQ0FBQ0gsSUFBSSxHQUFHOUksYUFBYSxDQUFDRSxPQUFPLENBQUMrSSxLQUFLLENBQUNILElBQUksQ0FBQztRQUMvQyxDQUFDLENBQUM7TUFDSDtJQUNELENBQUMsQ0FBQztJQUVGLE9BQU9GLEtBQUs7RUFDYjtFQUFDM0osUUFBQSxDQUFBMEosK0JBQUEsR0FBQUEsK0JBQUE7RUFFTSxTQUFTTyx3QkFBd0JBLENBQUMzSSxPQUFnQixFQUFXO0lBQ25FLElBQUk0SSxLQUFLLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUM5SSxPQUFPLENBQXNCO0lBQ3hFLElBQUk0SSxLQUFLLEtBQUtwSSxTQUFTLElBQUlSLE9BQU8sQ0FBQ2lHLFNBQVMsQ0FBQyxDQUFDLEVBQUU7TUFDL0M7TUFDQTJDLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQzlJLE9BQU8sQ0FBQ2lHLFNBQVMsQ0FBQyxDQUFFLENBQXNCO0lBQ2xGO0lBQ0EsTUFBTThDLGFBQWEsR0FBR0gsS0FBSyxFQUFFN0MsZUFBZSxDQUFDLENBQUMsQ0FBQ2lELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN6RSxPQUFPRCxhQUFhLEVBQUVFLEdBQUcsRUFBRUMsc0JBQXNCLEtBQUssSUFBSTtFQUMzRDtFQUFDeEssUUFBQSxDQUFBaUssd0JBQUEsR0FBQUEsd0JBQUE7RUFBQSxPQUFBakssUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
480
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJ1bmNoYW5nZWREYXRhIiwicHJvcGVydHlWYWx1ZXMiLCJwcm9wZXJ0eUNoYW5nZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIndyaXRlT2JqZWN0Iiwid3JpdGVPYmplY3RGb3IiLCJjaGFuZ2VPYmplY3QiLCJsZW5ndGgiLCJzZXR0aW5nc1RvZ2V0aGVyIiwicGF0aCIsInNraXBDaGFuZ2UiLCJfZXhwb3J0cyIsImdldENoYW5nZVN0cnVjdHVyZSIsImFwcENvbXBvbmVudCIsInBhZ2UiLCJwcm9wZXJ0eVBhdGgiLCJzZWxlY3RvciIsImNoYW5nZVNwZWNpZmljRGF0YSIsImFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlIiwiY29udGVudCIsInBhcmFtZXRlcnMiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5VmFsdWUiLCJzZXRMb2NhbFRleHQiLCJpdGVtIiwicmVzb3VyY2VNb2RlbCIsImtleSIsImdldFRleHQiLCJzZXRMb2NhbFRleHRzIiwibW9kZWwiLCJzZXR0aW5nc0RhdGEiLCJnZXREYXRhIiwiY29udHJvbCIsImNvbnRyb2xEYXRhIiwiZW51bSIsImVudW1EYXRhIiwiY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50IiwiY29uZmlnQ29udGV4dCIsImNvbmZpZ1BhdGgiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZXR0aW5nc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImRlZXBDbG9uZSIsImdldFByb3BlcnR5IiwibGlzdCIsIkxpc3QiLCJzZXRNb2RlbCIsInVwZGF0ZVBlcnNvbmFsaXphdGlvbkRlcGVuZGVudENvbnRyb2xzIiwic2VsZWN0ZWRWYWx1ZSIsImRlcGVuZGVudENvbnRyb2xzIiwiaXNPd25TZXR0aW5ncyIsImNvbnRyb2xJZCIsImxpc3RJdGVtcyIsImdldEl0ZW1zIiwiZ2V0Q29udGVudCIsImRhdGEiLCJzZXRTZWxlY3RlZCIsImxpc3RJdGVtIiwiSW5wdXRMaXN0SXRlbSIsImxhYmVsIiwiYmluZENvbnRlbnQiLCJmYWN0b3J5IiwiY29udGV4dCIsInR5cGUiLCJJdGVtIiwidGV4dCIsInNlbGVjdCIsIlNlbGVjdCIsInNlbGVjdGVkS2V5IiwiY2hhbmdlIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRLZXkiLCJiaW5kSXRlbXMiLCJ0ZW1wbGF0ZSIsIklucHV0IiwidmFsdWUiLCJvTXVsdGlJbnB1dCIsIk11bHRpSW5wdXQiLCJ3aWR0aCIsInNob3dWYWx1ZUhlbHAiLCJzaG93Q2xlYXJJY29uIiwidG9rZW5zIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJUb2tlbiIsInRva2VuVXBkYXRlIiwiYXJyYXkiLCJwdXNoIiwic3BsaWNlIiwiaW5kZXhPZiIsImFkZFZhbGlkYXRvciIsImFyZ3MiLCJDaGVja0JveCIsInNlbGVjdGVkIiwidG9Mb3dlckNhc2UiLCJwYXJzZSIsInRvU3RyaW5nIiwib3BlbkFkYXB0aW9uRGlhbG9nIiwidGl0bGUiLCJpbmZvVGV4dCIsInNpemUiLCJpbmZvcm1hdGlvbk1lc3NhZ2UiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImFkZFN0eWxlQ2xhc3MiLCJsaXN0SW5kZXgiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImRpYWxvZyIsIkRpYWxvZyIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJoZWlnaHQiLCJidXR0b25zIiwiQnV0dG9uIiwicHJlc3MiLCJ1cGRhdGVDb25maWdNb2RlbCIsImdldE1vZGVsIiwiY2xvc2UiLCJvcGVuIiwicHJvY2Vzc0NoYW5nZXMiLCJzaW5nbGVDaGFuZ2UiLCJjaGFuZ2VzIiwiT2JqZWN0IiwiZW50cmllcyIsImdldENoYW5nZSIsInByb2Nlc3NHbG9iYWxDaGFuZ2VzIiwia2V5cyIsInNlcGFyYXRlQ2hhbmdlcyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0UGFnZSIsImdldFBhcmVudCIsInNlcGFyYXRlR2xvYmFsQ2hhbmdlcyIsInZpZXdJZCIsImdldFRhcmdldFZpZXciLCJnZXRJZCIsInNwbGl0IiwiZXh0cmFjdENoYW5nZXMiLCJwcm9wZXJ0eVZhbHVlc0VudGVyZWQiLCJnbG9iYWxTZXR0aW5ncyIsImdsb2JhbENoYW5nZXMiLCJnbG9iYWwiLCJjb25jYXQiLCJub0NoYW5nZXMiLCJpc0Zpb3JpVG9vbHNSdGFNb2RlIiwidXJsUGFyYW1zIiwic2hlbGxTZXJ2aWNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInBhcnNlUGFyYW1ldGVycyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaXNSVEFNb2RlIiwiZ2V0U2V0dGluZ3NJZktleVVzZXIiLCJpdGVtcyIsImZpbHRlciIsImtleVVzZXIiLCJpc0NvbmZpZ01vZGVsUHJlcGFyZWQiLCJwcmVwYXJlQ29uZmlnTW9kZWwiLCJzZXRQcm9wZXJ0eSIsImdldFBlcnNvbmFsaXphdGlvblNldHRpbmciLCJzZXR0aW5ncyIsImdldE9iamVjdCIsInBlcnNvbmFsaXphdGlvblNldHRpbmciLCJmaW5kIiwidXBkYXRlZFNldHRpbmdzIiwiZ2V0UHJvcGVydHlOYW1lc0FuZERlc2NyaXB0aW9ucyIsInByb3BzIiwicHJvcCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImVudW1zIiwiZW51bW0iLCJpc01hbmlmZXN0Q2hhbmdlc0VuYWJsZWQiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwic2FwRmVNYW5pZmVzdCIsImdldE1hbmlmZXN0RW50cnkiLCJhcHAiLCJkaXNhYmxlTWFuaWZlc3RDaGFuZ2VzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZXNpZ250aW1lLmhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFJldXNlIGZ1bmN0aW9ucyBmb3IgZGVzaWdudGltZSBhZGFwdGlvblxuICovXG5cbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgSW5wdXRMaXN0SXRlbSBmcm9tIFwic2FwL20vSW5wdXRMaXN0SXRlbVwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQgfSBmcm9tIFwic2FwL20vTXVsdGlJbnB1dFwiO1xuaW1wb3J0IE11bHRpSW5wdXQgZnJvbSBcInNhcC9tL011bHRpSW5wdXRcIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvbS9Ub2tlblwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBhZGFwdGlvbkNoYW5nZSA9IHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdHNlbGVjdG9yOiBBcHBDb21wb25lbnQ7XG5cdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdGFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlOiBcImFwcGRlc2NyX2ZlX2NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYWdlOiBzdHJpbmc7XG5cdFx0XHRcdGVudGl0eVByb3BlcnR5Q2hhbmdlOiB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVzaWdudGltZVNldHRpbmdFbnVtcyA9IHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlc2lnbnRpbWVTZXR0aW5nID0ge1xuXHRpZDogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdHJlc3RyaWN0ZWRUbz86IFRlbXBsYXRlVHlwZVtdO1xuXHR2YWx1ZTogdW5rbm93bjtcblx0dHlwZT86IHN0cmluZztcblx0ZW51bXM/OiBEZXNpZ250aW1lU2V0dGluZ0VudW1zW107XG5cdHNraXBDaGFuZ2U/OiBib29sZWFuO1xuXHR3cml0ZU9iamVjdEZvcj86IHN0cmluZztcblx0d3JpdGVPYmplY3Q/OiB7IGlkOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfVtdO1xuXHRrZXlVc2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VmFsdWUgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc0RhdGEgPSB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRvb2x0aXA6IHN0cmluZztcblx0Y29udHJvbDogQ29udHJvbERhdGFbXTtcblx0a2V5VXNlcj86IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRyb2xEYXRhID0ge1xuXHR0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVudW06IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXSB8IHVuZGVmaW5lZDtcblx0dmFsdWU6IHVua25vd247XG5cdGlkOiBzdHJpbmc7XG59O1xuXG50eXBlIHByb3BLZXlBbmRWYWx1ZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkIH07XG5cbi8qKlxuICogSWRlbnRpZnkgd2hpY2ggc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLlxuICogQHBhcmFtIGRlc2lnbnRpbWVTZXR0aW5nc1xuICogQHBhcmFtIHVuY2hhbmdlZERhdGFcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlc1xuICogIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlcmUgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgc3RhcnRpbmcgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVcbik6IFByb3BlcnR5VmFsdWUge1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUgPSB7fTtcblxuXHRkZXNpZ250aW1lU2V0dGluZ3MuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGluZykge1xuXHRcdGlmIChcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSAhPT0gXCJvYmplY3RcIiAmJiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdICE9PSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSkgfHxcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0pKVxuXHRcdCkge1xuXHRcdFx0aWYgKHNldHRpbmcud3JpdGVPYmplY3QgJiYgcHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0gPT09IHNldHRpbmcud3JpdGVPYmplY3RGb3IpIHtcblx0XHRcdFx0Ly8gV2Ugd3JpdGUgYW4gb2JqZWN0IGZvciB0aGlzIHNldHRpbmdcblx0XHRcdFx0Y29uc3QgY2hhbmdlT2JqZWN0OiBQcm9wZXJ0eVZhbHVlID0ge307XG5cdFx0XHRcdGlmIChzZXR0aW5nLndyaXRlT2JqZWN0ICYmIHNldHRpbmcud3JpdGVPYmplY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZXR0aW5nLndyaXRlT2JqZWN0LmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmdzVG9nZXRoZXIpIHtcblx0XHRcdFx0XHRcdGNoYW5nZU9iamVjdFtzZXR0aW5nc1RvZ2V0aGVyLnBhdGggPyBzZXR0aW5nc1RvZ2V0aGVyLnBhdGggOiBzZXR0aW5nc1RvZ2V0aGVyLmlkXSA9XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NldHRpbmdzVG9nZXRoZXIuaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5Q2hhbmdlc1tzZXR0aW5nLnBhdGggPyBzZXR0aW5nLnBhdGggOiBzZXR0aW5nLmlkXSA9IGNoYW5nZU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoIXNldHRpbmcuc2tpcENoYW5nZSkge1xuXHRcdFx0XHRwcm9wZXJ0eUNoYW5nZXNbc2V0dGluZy5wYXRoID8gc2V0dGluZy5wYXRoIDogc2V0dGluZy5pZF0gPSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcHJvcGVydHlDaGFuZ2VzO1xufVxuLyoqXG4gKiBDb252ZXJ0IHNhcC5mZSBjaGFuZ2UgaW50byBhIHN0cnVjdHVyZSByZXF1aXJlZCBieSB0aGUgZmxleGliaWxpdHkgdG9vbHMuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlU3RydWN0dXJlKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cHJvcGVydHlDaGFuZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWRcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0cmV0dXJuIHtcblx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRzZWxlY3RvcjogYXBwQ29tcG9uZW50LFxuXHRcdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdFx0YXBwRGVzY3JpcHRvckNoYW5nZVR5cGU6IFwiYXBwZGVzY3JfZmVfY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIixcblx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2UsXG5cdFx0XHRcdFx0ZW50aXR5UHJvcGVydHlDaGFuZ2U6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBcIlVQU0VSVFwiLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogcHJvcGVydHlDaGFuZ2VzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBzZXRMb2NhbFRleHQoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuXHRcdGlmIChrZXkgIT09IFwiaWRcIiAmJiB0eXBlb2YgaXRlbVtrZXldID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpdGVtW2tleV0gPSByZXNvdXJjZU1vZGVsLmdldFRleHQoaXRlbVtrZXldIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldExvY2FsVGV4dHMobW9kZWw6IEpTT05Nb2RlbCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuXHRjb25zdCBzZXR0aW5nc0RhdGEgPSBtb2RlbC5nZXREYXRhKCkgYXMgU2V0dGluZ3NEYXRhW107XG5cdHNldHRpbmdzRGF0YS5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XG5cdFx0c2V0TG9jYWxUZXh0KHNldHRpbmcsIHJlc291cmNlTW9kZWwpO1xuXHRcdHNldHRpbmcuY29udHJvbC5mb3JFYWNoKChjb250cm9sRGF0YSkgPT4ge1xuXHRcdFx0c2V0TG9jYWxUZXh0KGNvbnRyb2xEYXRhLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGNvbnRyb2xEYXRhLmVudW0/LmZvckVhY2goKGVudW1EYXRhKSA9PiB7XG5cdFx0XHRcdHNldExvY2FsVGV4dChlbnVtRGF0YSwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGlvbkRpYWxvZ0NvbnRlbnQoXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIlxuKTogTGlzdCB7XG5cdGNvbnN0IHNldHRpbmdzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdHNldHRpbmdzTW9kZWwuc2V0RGF0YShkZWVwQ2xvbmUoY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShjb25maWdQYXRoKSkpO1xuXHRzZXRMb2NhbFRleHRzKHNldHRpbmdzTW9kZWwsIHJlc291cmNlTW9kZWwpO1xuXHRjb25zdCBsaXN0ID0gbmV3IExpc3QoKTtcblx0bGlzdC5zZXRNb2RlbChzZXR0aW5nc01vZGVsKTtcblxuXHQvLyBGdW5jdGlvbiB0byBjbGVhciBwZXJzb25hbGl6YXRpb24gZGVwZW5kZW50IGNvbnRyb2xzIHdoZW4gXCJPd24gU2V0dGluZ3NcIiBpcyBzZWxlY3RlZFxuXHRjb25zdCB1cGRhdGVQZXJzb25hbGl6YXRpb25EZXBlbmRlbnRDb250cm9scyA9IChzZWxlY3RlZFZhbHVlOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRjb25zdCBkZXBlbmRlbnRDb250cm9scyA9IFtcInBlcnNvbmFsaXphdGlvblNvcnRcIiwgXCJwZXJzb25hbGl6YXRpb25Db2x1bW5cIiwgXCJwZXJzb25hbGl6YXRpb25GaWx0ZXJcIiwgXCJwZXJzb25hbGl6YXRpb25Hcm91cFwiXTtcblx0XHRjb25zdCBpc093blNldHRpbmdzID0gc2VsZWN0ZWRWYWx1ZSA9PT0gXCJPd24gU2V0dGluZ3NcIjtcblx0XHRpZiAoaXNPd25TZXR0aW5ncykge1xuXHRcdFx0ZGVwZW5kZW50Q29udHJvbHMuZm9yRWFjaCgoY29udHJvbElkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxpc3RJdGVtcyA9IGxpc3QuZ2V0SXRlbXMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGxpc3RJdGVtcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnQgPSAoaXRlbSBhcyBJbnB1dExpc3RJdGVtKS5nZXRDb250ZW50KCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sLmRhdGEoXCJpZFwiKSA9PT0gY29udHJvbElkKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgoY29udHJvbCBhcyBDaGVja0JveCkuc2V0U2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBDaGVja0JveCkuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW2NvbnRyb2xJZF0gPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBsaXN0SXRlbSA9IG5ldyBJbnB1dExpc3RJdGVtKHtcblx0XHRsYWJlbDogXCJ7bGFiZWx9XCJcblx0fSk7XG5cblx0bGlzdEl0ZW0uYmluZENvbnRlbnQoe1xuXHRcdHBhdGg6IFwiY29udHJvbFwiLFxuXHRcdGZhY3Rvcnk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IHsgZ2V0UHJvcGVydHkobmFtZTogc3RyaW5nKTogc3RyaW5nIH0gLyogc2FwLnVpLm1vZGVsLkNvbnRleHQgKi8pIHtcblx0XHRcdGNvbnN0IHR5cGUgPSBjb250ZXh0LmdldFByb3BlcnR5KFwidHlwZVwiKTtcblx0XHRcdGNvbnN0IGlkID0gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkXCIpO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiZW51bVwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgc2VsZWN0IGxpc3QgZm9yIG11bHRpcGxlIG9wdGlvbnMgdG8gc2VsZWN0XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV3IEl0ZW0oe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBcIntuYW1lfVwiLFxuXHRcdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ID0gbmV3IFNlbGVjdCh7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBTZWxlY3QpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IChcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInNlbGVjdGVkSXRlbVwiKSBhcyBJdGVtXG5cdFx0XHRcdFx0XHRcdFx0KS5nZXRLZXkoKSBhcyBzdHJpbmcgJiBib29sZWFuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3QuYmluZEl0ZW1zKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgdGV4dCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSBhcyBzdHJpbmcgJlxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9vbGVhbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdbXVwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBtdWx0aSBpbnB1dCBmaWVsZCBmb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IG9NdWx0aUlucHV0ID0gbmV3IE11bHRpSW5wdXQoe1xuXHRcdFx0XHRcdFx0d2lkdGg6IFwiNzAlXCIsXG5cdFx0XHRcdFx0XHRzaG93VmFsdWVIZWxwOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNob3dDbGVhckljb246IHRydWUsXG5cdFx0XHRcdFx0XHR0b2tlbnM6IChwcm9wZXJ0eVZhbHVlcz8ubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgc3RyaW5nW10pLm1hcCgobmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oeyB0ZXh0OiBuYXZpZ2F0aW9uUHJvcGVydHksIGtleTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0b2tlblVwZGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBNdWx0aUlucHV0KS5kYXRhKFwiaWRcIildIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHRcdFx0XHRpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyYXkucHVzaCgoZXZlbnQ/LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pWzBdPy5nZXRQcm9wZXJ0eShcImtleVwiKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSk/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhPZigoZXZlbnQ/LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSlbMF0/LmdldFByb3BlcnR5KFwia2V5XCIpKSwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRcdG9NdWx0aUlucHV0LmFkZFZhbGlkYXRvcihmdW5jdGlvbiAoYXJnczogeyB0ZXh0OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFyZ3MudGV4dDtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRleHRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBvTXVsdGlJbnB1dDtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgbnVtYmVyIGNoYW5nZXNcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiTnVtYmVyXCIsXG5cdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBJbnB1dCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikgYXMgc3RyaW5nICZcblx0XHRcdFx0XHRcdFx0XHRib29sZWFuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIHRydWUvZmFsc2UgdmFsdWVzXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBDaGVja0JveCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBDaGVja0JveCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFwic2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFx0XHQpIGFzIHN0cmluZyAmIGJvb2xlYW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5PclN0cmluZ1wiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNlbGVjdCBsaXN0IGZvciBib29sZWFuIGFuZCBzdHJpbmcgb3B0aW9ucyB0byBzZWxlY3Rcblx0XHRcdFx0XHQvLyBUaGlzIHR5cGUgaXMgYXQgdGhlIG1vbWVudCBvbmx5IHVzZWQgZm9yIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyB3aGljaCBjYW4gYmUgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSBvciBhbiBvYmplY3Rcblx0XHRcdFx0XHQvLyBUaGUgc2VsZWN0IGxpc3QgaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0cnVlLCBmYWxzZSBhbmQgXCJPd24gU2V0dGluZ3NcIlxuXHRcdFx0XHRcdC8vIElmIFwiT3duIFNldHRpbmdzXCIgaXMgc2VsZWN0ZWQsIHRoZSBwZXJzb25hbGl6YXRpb24gb2JqZWN0IGlzIHdyaXR0ZW4sIG90aGVyd2lzZSB0aGUgYm9vbGVhbiBpcyB3cml0dGVuICh1bmRlZmluZWQgY2Fubm90IGJlIHdyaXR0ZW4gaW4gYSBtYW5pZmVzdCBjaGFuZ2UpXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IG5ldyBJdGVtKHtcblx0XHRcdFx0XHRcdHRleHQ6IFwie25hbWV9XCIsXG5cdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRjb25zdCBzZWxlY3QgPSBuZXcgU2VsZWN0KHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZEl0ZW1cIikgYXMgSXRlbSkuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0XHRcdC8vIENvbnZlcnQgc3RyaW5nIHRvIGJvb2xlYW4gaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgU2VsZWN0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBoYW5kbGluZyBmb3IgcGVyc29uYWxpemF0aW9uIHNldHRpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCh0aGlzIGFzIFNlbGVjdCkuZGF0YShcImlkXCIpID09PSBcInBlcnNvbmFsaXphdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dXBkYXRlUGVyc29uYWxpemF0aW9uRGVwZW5kZW50Q29udHJvbHModmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblxuXHRcdFx0XHRcdHNlbGVjdC5iaW5kSXRlbXMoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogaXRlbVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdGNhc2UgXCJqc29uXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGFuIGlucHV0IGZvciBqc29uIG9iamVjdCBkZXNjcmlwdGlvbnNcblx0XHRcdFx0XHQvLyBBIHRleHQgYXJlYSB3b3VsZCBoYXZlIGJlZW4gYmV0dGVyIGJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgSW5wdXRMaXN0SXRlbVxuXHRcdFx0XHRcdC8vIHdlIHdvdWxkIGhhdmUgbmVlZGVkIGEgQ3VzdG9tTGlzdEl0ZW0gaW5zdGVhZFxuXHRcdFx0XHRcdC8vIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiB0b28gbXVjaCBlZmZvcnQgYXMgd2Ugd291bGQgaGF2ZSBuZWVkZWQgdG8gY2hhbmdlIHRoZSB3aG9sZSBzdHJ1Y3R1cmVcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInZhbHVlXCIpPy50b1N0cmluZygpIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRsaXN0LmJpbmRJdGVtcyh7XG5cdFx0cGF0aDogXCIvXCIsXG5cdFx0dGVtcGxhdGU6IGxpc3RJdGVtXG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFkYXB0aW9uRGlhbG9nKFxuXHRjb25maWdDb250ZXh0OiBDb250ZXh0LFxuXHRwcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZSxcblx0dGl0bGU6IHN0cmluZyxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0Y29uZmlnUGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIsXG5cdGluZm9UZXh0ID0gXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fSU5GT19NRVNTQUdFfVwiLFxuXHRzaXplPzogeyB3aWR0aDogc3RyaW5nOyBoZWlnaHQ6IHN0cmluZyB9XG4pOiBQcm9taXNlPFByb3BlcnR5VmFsdWU+IHtcblx0Y29uc3QgbGlzdCA9IGNyZWF0ZUFkYXB0aW9uRGlhbG9nQ29udGVudChjb25maWdDb250ZXh0LCBwcm9wZXJ0eVZhbHVlcywgcmVzb3VyY2VNb2RlbCwgY29uZmlnUGF0aCk7XG5cdGNvbnN0IGNvbnRlbnQ6IChMaXN0IHwgTWVzc2FnZVN0cmlwKVtdID0gW107XG5cdGNvbnN0IGluZm9ybWF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlU3RyaXAoe1xuXHRcdHNob3dJY29uOiB0cnVlLFxuXHRcdHR5cGU6IFwiSW5mb3JtYXRpb25cIixcblx0XHR0ZXh0OiBpbmZvVGV4dFxuXHR9KTtcblx0aW5mb3JtYXRpb25NZXNzYWdlLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaVNtYWxsTWFyZ2luQm90dG9tXCIpO1xuXHRjb250ZW50LnB1c2goaW5mb3JtYXRpb25NZXNzYWdlKTtcblx0Y29udGVudC5wdXNoKGxpc3QpO1xuXHRjb25zdCBsaXN0SW5kZXggPSBjb250ZW50LmluZGV4T2YobGlzdCk7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Y29uc3QgZGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRjb250ZW50V2lkdGg6IHNpemUgPyBzaXplLndpZHRoIDogXCI1NTBweFwiLFxuXHRcdFx0Y29udGVudEhlaWdodDogc2l6ZSA/IHNpemUuaGVpZ2h0IDogXCIzMDBweFwiLFxuXHRcdFx0Y29udGVudDogY29udGVudCxcblx0XHRcdGJ1dHRvbnM6IFtcblx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fQVBQTFl9XCIsXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIHBlcnNpc3QgY2hhbmdlcyBkb25lXG5cdFx0XHRcdFx0XHR1cGRhdGVDb25maWdNb2RlbChjb25maWdDb250ZXh0LCBkaWFsb2cuZ2V0Q29udGVudCgpW2xpc3RJbmRleF0uZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwsIGNvbmZpZ1BhdGgpO1xuXHRcdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHByb3BlcnR5VmFsdWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHR0ZXh0OiBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9DQU5DRUx9XCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XVxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbChyZXNvdXJjZU1vZGVsLCBcInNhcC5mZS5pMThuXCIpO1xuXHRcdGRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRkaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpUlRBQm9yZGVyXCIpO1xuXHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0cmV0dXJuO1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2VzKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRsZXQgc2luZ2xlQ2hhbmdlOiBwcm9wS2V5QW5kVmFsdWUgPSB7fTtcblx0Y29uc3QgY2hhbmdlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eUNoYW5nZXMpKSB7XG5cdFx0c2luZ2xlQ2hhbmdlID0ge307XG5cdFx0c2luZ2xlQ2hhbmdlW2tleV0gPSB2YWx1ZTtcblx0XHRjaGFuZ2VzLnB1c2goZ2V0Q2hhbmdlKHNpbmdsZUNoYW5nZSwgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpKTtcblx0fVxuXHRyZXR1cm4gY2hhbmdlcztcbn1cblxuLyoqXG4gKiBGb3JtYXQgZWFjaCBjaGFuZ2UgbWFkZSB0byBnbG9iYWwgc2V0dGluZ3MgXCJzYXAuZmVcIlxuICogVGhlIHNldCBvZiBjaGFuZ2VzIGFyZSBwdXQgaW50byBpbmRpdmlkdWFsIGNoYW5nZXMgdG8gZW5zdXJlXG4gKiB0aGF0IGVhcmxpZXIgY2hhbmdlcyBhcmUgbm90IGxvc3Qgd2hlbiB0aGVzZSBhcmUgbG9hZGVkIGF0IHJ1bnRpbWUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dsb2JhbENoYW5nZXMoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGxldCBzaW5nbGVDaGFuZ2U6IHByb3BLZXlBbmRWYWx1ZSA9IHt9O1xuXHRjb25zdCBjaGFuZ2VzID0gW107XG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Q2hhbmdlcykpIHtcblx0XHRzaW5nbGVDaGFuZ2UgPSB7fTtcblx0XHRzaW5nbGVDaGFuZ2Vba2V5XSA9IHZhbHVlO1xuXHRcdGNoYW5nZXMucHVzaChnZXRDaGFuZ2Uoc2luZ2xlQ2hhbmdlLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCkpO1xuXHR9XG5cdHJldHVybiBjaGFuZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0Ly8gQ2hhbmdlcyBmb3IgY29udHJvbHMgaGF2ZSBhIHBhdGggc3RhcnRpbmcgd2l0aCBjb250cm9sQ29uZmlndXJhdGlvbiwgZm9sbG93ZWQgYnkgYW4gYW5ub3RhdGlvbiBwYXRoXG5cdC8vIEZvciB0aGUgbGlzdCByZXBvcnQgY2hhbmdlcywgdGhlcmUgaXMgbm8gcGF0aCBiZWNhdXNlIHRoZSBwcm9wZXJ0aWVzIGFyZSBkaXJlY3RseSB1bmRlciBTZXR0aW5nc1xuXHQvLyBmb3IgdGhlIFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIgaW4gdGhlIG1hbmlmZXN0LlxuXHRpZiAocHJvcGVydHlQYXRoID09PSBcIlwiKSB7XG5cdFx0cHJvcGVydHlQYXRoID0gT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXTtcblx0fSBlbHNlIHtcblx0XHRwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGggKyBcIi9cIiArIE9iamVjdC5rZXlzKHByb3BlcnR5Q2hhbmdlcylbMF07XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBwcm9wZXJ0eUNoYW5nZXNbT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXV07XG5cblx0cmV0dXJuIGdldENoYW5nZVN0cnVjdHVyZShhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCwgdmFsdWUpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyYW1ldGVycyBvdGhlciB0aGFuIHRoZSBjb250cm9sIHNldHRpbmdzIHRoYXQgYXJlIG5lZWRlZFxuICogZm9yIHRoZSBjaGFuZ2Ugc3RydWN0dXJlLlxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VzIGluIGEgc3RydWN0dXJlIHVzZWQgYnkgZmxleGliaWxpdHkgdG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBDb250cm9sKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKTtcblx0Y29uc3QgcGFnZSA9IGdldFBhZ2UoY29udHJvbC5nZXRQYXJlbnQoKSBhcyBDb250cm9sKTtcblx0cmV0dXJuIHByb2Nlc3NDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlcywgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyYW1ldGVycyBvdGhlciB0aGFuIHRoZSBnbG9iYWwgc2V0dGluZ3MgdGhhdCBhcmUgbmVlZGVkXG4gKiBmb3IgdGhlIGNoYW5nZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgVGhlIGNoYW5nZXMgaW4gYSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5mdW5jdGlvbiBzZXBhcmF0ZUdsb2JhbENoYW5nZXMocHJvcGVydHlDaGFuZ2VzOiBQcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udHJvbCk7XG5cdGNvbnN0IHBhZ2UgPSBcInNhcC5mZVwiO1xuXHRyZXR1cm4gcHJvY2Vzc0dsb2JhbENoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2UoY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB7XG5cdGNvbnN0IHZpZXdJZCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY29udHJvbCkuZ2V0SWQoKS5zcGxpdChcIjo6XCIpO1xuXHRyZXR1cm4gdmlld0lkW3ZpZXdJZC5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RDaGFuZ2VzID0gZnVuY3Rpb24gKFxuXHRkZXNpZ250aW1lU2V0dGluZ3M6IERlc2lnbnRpbWVTZXR0aW5nW10sXG5cdHVuY2hhbmdlZERhdGE6IFByb3BlcnR5VmFsdWUsXG5cdHByb3BlcnR5VmFsdWVzRW50ZXJlZDogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdGdsb2JhbFNldHRpbmdzPzogRGVzaWdudGltZVNldHRpbmdbXVxuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IHByb3BlcnR5Q2hhbmdlcyA9IGdldENoYW5nZWRQcm9wZXJ0eVZhbHVlcyhkZXNpZ250aW1lU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCk7XG5cdC8vIFB1dCBlYWNoIHByb3BlcnR5IGludG8gaXRzIG93biBjaGFuZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGxvc2UgcHJldmlvdXMgY2hhbmdlcy5cblx0bGV0IGNoYW5nZXMgPSBzZXBhcmF0ZUNoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHRpZiAoZ2xvYmFsU2V0dGluZ3MpIHtcblx0XHRjb25zdCBnbG9iYWxDaGFuZ2VzID0gZ2V0Q2hhbmdlZFByb3BlcnR5VmFsdWVzKGdsb2JhbFNldHRpbmdzLCB1bmNoYW5nZWREYXRhLCBwcm9wZXJ0eVZhbHVlc0VudGVyZWQpO1xuXHRcdGNvbnN0IGdsb2JhbCA9IHNlcGFyYXRlR2xvYmFsQ2hhbmdlcyhnbG9iYWxDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHRcdGNoYW5nZXMgPSBjaGFuZ2VzLmNvbmNhdChnbG9iYWwpO1xuXHR9XG5cdGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY2hhbmdlcztcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCBub0NoYW5nZXMgPSBmdW5jdGlvbiAoKTogW10ge1xuXHRyZXR1cm4gW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaW9yaVRvb2xzUnRhTW9kZShhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBydGEgbW9kZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gdXJsIChmb3IgbG9jYWwgdGVzdGluZylcblx0bGV0IHVybFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdHVybFBhcmFtcyA9IHNoZWxsU2VydmljZT8ucGFyc2VQYXJhbWV0ZXJzPy4od2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdHJldHVybiAhIXVybFBhcmFtcyAmJiB1cmxQYXJhbXNbXCJmaW9yaS10b29scy1ydGEtbW9kZVwiXT8uWzBdID09PSBcImZvckFkYXB0YXRpb25cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRBTW9kZShhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBydGEgbW9kZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gdXJsIChmb3IgbG9jYWwgdGVzdGluZylcblx0bGV0IHVybFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdHVybFBhcmFtcyA9IHNoZWxsU2VydmljZT8ucGFyc2VQYXJhbWV0ZXJzPy4od2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdHJldHVybiAhIXVybFBhcmFtcyAmJiB1cmxQYXJhbXNbXCJzYXAtZmUtcnRhLW1vZGVcIl0/LlswXSA9PT0gXCJ0cnVlXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nc0lmS2V5VXNlcihhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgaXRlbXM6IFNldHRpbmdzRGF0YVtdKTogU2V0dGluZ3NEYXRhW10ge1xuXHRpZiAoIWlzRmlvcmlUb29sc1J0YU1vZGUoYXBwQ29tcG9uZW50KSkge1xuXHRcdC8vIG5vdCB0b29scyA9PiBrZXkgdXNlclxuXHRcdHJldHVybiBpdGVtcy5maWx0ZXIoKHNldHRpbmcpID0+IHtcblx0XHRcdHJldHVybiBzZXR0aW5nLmtleVVzZXI7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGl0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25maWdNb2RlbFByZXBhcmVkKGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogYm9vbGVhbiB7XG5cdGlmIChjb25maWdDb250ZXh0LmdldFByb3BlcnR5KHBhdGgpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZ01vZGVsKGl0ZW1zOiBTZXR0aW5nc0RhdGFbXSwgY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiB2b2lkIHtcblx0aWYgKCFjb25maWdDb250ZXh0LmdldFByb3BlcnR5KHBhdGgpKSB7XG5cdFx0Y29uZmlnQ29udGV4dC5zZXRQcm9wZXJ0eShwYXRoLCBpdGVtcyk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNvbmFsaXphdGlvblNldHRpbmcoY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc2V0dGluZ3MgPSBjb25maWdDb250ZXh0LmdldE9iamVjdChwYXRoKTtcblx0Y29uc3QgcGVyc29uYWxpemF0aW9uU2V0dGluZyA9IHNldHRpbmdzLmZpbmQoKHNldHRpbmc6IFNldHRpbmdzRGF0YSkgPT4ge1xuXHRcdHJldHVybiBzZXR0aW5nPy5jb250cm9sWzBdPy5pZCA9PT0gXCJwZXJzb25hbGl6YXRpb25cIjtcblx0fSk7XG5cdGlmIChwZXJzb25hbGl6YXRpb25TZXR0aW5nKSB7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblNldHRpbmcuY29udHJvbFswXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ29uZmlnTW9kZWwoY29uZmlnQ29udGV4dDogQ29udGV4dCwgc2V0dGluZ3NNb2RlbDogSlNPTk1vZGVsLCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IHZvaWQge1xuXHRjb25zdCB1cGRhdGVkU2V0dGluZ3MgPSBkZWVwQ2xvbmUoc2V0dGluZ3NNb2RlbC5nZXREYXRhKCkpO1xuXHRjb25maWdDb250ZXh0LnNldFByb3BlcnR5KHBhdGgsIHVwZGF0ZWRTZXR0aW5ncyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zKHByb3BzOiBEZXNpZ250aW1lU2V0dGluZ1tdLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogRGVzaWdudGltZVNldHRpbmdbXSB7XG5cdHByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcblx0XHRwcm9wLm5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQocHJvcC5uYW1lKTtcblx0XHRwcm9wLmRlc2NyaXB0aW9uID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHByb3AuZGVzY3JpcHRpb24pO1xuXHRcdGlmIChwcm9wLmVudW1zKSB7XG5cdFx0XHRwcm9wLmVudW1zLmZvckVhY2goZnVuY3Rpb24gKGVudW1tKSB7XG5cdFx0XHRcdGVudW1tLm5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoZW51bW0ubmFtZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBwcm9wcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFuaWZlc3RDaGFuZ2VzRW5hYmxlZChjb250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGxldCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0aWYgKG93bmVyID09PSB1bmRlZmluZWQgJiYgY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdC8vIEluIGNhc2Ugb2YgTWFzc0VkaXQsIGNvbnRyb2wgaXMgYSBzYXAubS5EaWFsb2cgZm9yIHdoaWNoIHRoZXJlIGlzIG5vdyBPd25lckNvbXBvbmVudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBpdHMgcGFyZW50IGNvbnRyb2xcblx0XHRvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sLmdldFBhcmVudCgpISkgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdH1cblx0Y29uc3Qgc2FwRmVNYW5pZmVzdCA9IG93bmVyPy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gc2FwRmVNYW5pZmVzdD8uYXBwPy5kaXNhYmxlTWFuaWZlc3RDaGFuZ2VzICE9PSB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQUFBO0FBQ0E7QUFDQTtFQWtGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLHdCQUF3QkEsQ0FDdkNDLGtCQUF1QyxFQUN2Q0MsYUFBNEIsRUFDNUJDLGNBQTZCLEVBQ2I7SUFDaEIsTUFBTUMsZUFBOEIsR0FBRyxDQUFDLENBQUM7SUFFekNILGtCQUFrQixDQUFDSSxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQzdDLElBQ0UsT0FBT0osYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsSUFBSUwsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLSixjQUFjLENBQUNHLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLElBQ3pHLE9BQU9MLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDQyxFQUFFLENBQUMsS0FBSyxRQUFRLElBQzdDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1AsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxDQUFDLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTixjQUFjLENBQUNHLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLENBQUUsRUFDekY7UUFDRCxJQUFJRCxPQUFPLENBQUNJLFdBQVcsSUFBSVAsY0FBYyxDQUFDRyxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLRCxPQUFPLENBQUNLLGNBQWMsRUFBRTtVQUNqRjtVQUNBLE1BQU1DLFlBQTJCLEdBQUcsQ0FBQyxDQUFDO1VBQ3RDLElBQUlOLE9BQU8sQ0FBQ0ksV0FBVyxJQUFJSixPQUFPLENBQUNJLFdBQVcsRUFBRUcsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRFAsT0FBTyxDQUFDSSxXQUFXLENBQUNMLE9BQU8sQ0FBQyxVQUFVUyxnQkFBZ0IsRUFBRTtjQUN2REYsWUFBWSxDQUFDRSxnQkFBZ0IsQ0FBQ0MsSUFB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QUFDSCxhQUFhLENBQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMURNLGFBQWEsQ0FBQ2dJLFdBQVcsQ0FBQzdKLElBQUksRUFBRW1LLGVBQWUsQ0FBQztFQUNqRDtFQUFDakssUUFBQSxDQUFBK0csaUJBQUEsR0FBQUEsaUJBQUE7RUFFTSxTQUFTbUQsK0JBQStCQSxDQUFDQyxLQUEwQixFQUFFcEosYUFBNEIsRUFBdUI7SUFDOUhvSixLQUFLLENBQUMvSyxPQUFPLENBQUMsVUFBVWdMLElBQUksRUFBRTtNQUM3QkEsSUFBSSxDQUFDQyxJQUFJLEdBQUd0SixhQUFhLENBQUNFLE9BQU8sQ0FBQ21KLElBQUksQ0FBQ0MsSUFBSSxDQUFDO01BQzVDRCxJQUFJLENBQUNFLFdBQVcsR0FBR3ZKLGFBQWEsQ0FBQ0UsT0FBTyxDQUFDbUosSUFBSSxDQUFDRSxXQUFXLENBQUM7TUFDMUQsSUFBSUYsSUFBSSxDQUFDRyxLQUFLLEVBQUU7UUFDZkgsSUFBSSxDQUFDRyxLQUFLLENBQUNuTCxPQUFPLENBQUMsVUFBVW9MLEtBQUssRUFBRTtVQUNuQ0EsS0FBSyxDQUFDSCxJQUFJLEdBQUd0SixhQUFhLENBQUNFLE9BQU8sQ0FBQ3VKLEtBQUssQ0FBQ0gsSUFBSSxDQUFDO1FBQy9DLENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQyxDQUFDO0lBRUYsT0FBT0YsS0FBSztFQUNiO0VBQUNuSyxRQUFBLENBQUFrSywrQkFBQSxHQUFBQSwrQkFBQTtFQUVNLFNBQVNPLHdCQUF3QkEsQ0FBQ25KLE9BQWdCLEVBQVc7SUFDbkUsSUFBSW9KLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ3RKLE9BQU8sQ0FBc0I7SUFDeEUsSUFBSW9KLEtBQUssS0FBSzVJLFNBQVMsSUFBSVIsT0FBTyxDQUFDeUcsU0FBUyxDQUFDLENBQUMsRUFBRTtNQUMvQztNQUNBMkMsS0FBSyxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDdEosT0FBTyxDQUFDeUcsU0FBUyxDQUFDLENBQUUsQ0FBc0I7SUFDbEY7SUFDQSxNQUFNOEMsYUFBYSxHQUFHSCxLQUFLLEVBQUU3QyxlQUFlLENBQUMsQ0FBQyxDQUFDaUQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0lBQ3pFLE9BQU9ELGFBQWEsRUFBRUUsR0FBRyxFQUFFQyxzQkFBc0IsS0FBSyxJQUFJO0VBQzNEO0VBQUNoTCxRQUFBLENBQUF5Syx3QkFBQSxHQUFBQSx3QkFBQTtFQUFBLE9BQUF6SyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -185,6 +185,29 @@ export function createAdaptionDialogContent(
185
185
  const list = new List();
186
186
  list.setModel(settingsModel);
187
187
 
188
+ // Function to clear personalization dependent controls when "Own Settings" is selected
189
+ const updatePersonalizationDependentControls = (selectedValue: string): void => {
190
+ const dependentControls = ["personalizationSort", "personalizationColumn", "personalizationFilter", "personalizationGroup"];
191
+ const isOwnSettings = selectedValue === "Own Settings";
192
+ if (isOwnSettings) {
193
+ dependentControls.forEach((controlId) => {
194
+ const listItems = list.getItems();
195
+ for (const item of listItems) {
196
+ const content = (item as InputListItem).getContent();
197
+ for (const control of content) {
198
+ if (control.data("id") === controlId) {
199
+ if ((control as CheckBox).setSelected) {
200
+ (control as CheckBox).setSelected(false);
201
+ propertyValues[controlId] = false;
202
+ }
203
+ break;
204
+ }
205
+ }
206
+ }
207
+ });
208
+ }
209
+ };
210
+
188
211
  const listItem = new InputListItem({
189
212
  label: "{label}"
190
213
  });
@@ -293,6 +316,10 @@ export function createAdaptionDialogContent(
293
316
  value = JSON.parse(value.toLowerCase());
294
317
  }
295
318
  propertyValues[(this as Select).data("id") as keyof PropertyValue] = value;
319
+ // Special handling for personalization setting
320
+ if ((this as Select).data("id") === "personalization") {
321
+ updatePersonalizationDependentControls(value);
322
+ }
296
323
  }
297
324
  }).data("id", id);
298
325