@sapui5/sap.fe.macros 1.138.0 → 1.139.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -294,7 +294,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
294
294
  // Only if search is fired we set _bSearchTriggered.
295
295
  // If there was an error due to required filterfields empty or other issues we skip setting _bSearchTriggered.
296
296
  filterBarAPI.attachEventOnce("search", fnOnSearch);
297
- filterBarControl.setSuspendSelection(false);
297
+ filterBarControl.enableRequests(true);
298
298
  } else {
299
299
  // search might already be triggered.
300
300
  fnOnSearch();
@@ -863,20 +863,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
863
863
  let prefillDescriptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
864
864
  const content = this.getContent();
865
865
  const isLiveMode = content && content?.getLiveMode?.();
866
+ let result;
866
867
  if (isLiveMode) {
867
- content.setSuspendSelection(true);
868
+ content.enableRequests(false);
868
869
  }
869
- let ret;
870
870
  try {
871
- ret = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions);
872
- return ret;
871
+ result = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions);
872
+ return result?.applyStateResult;
873
873
  } catch (err) {
874
874
  const message = err instanceof Error ? err.message : String(err);
875
875
  Log.error(`FE : Buildingblock : FilterBar : ${message}`);
876
876
  throw Error(message);
877
877
  } finally {
878
878
  if (isLiveMode) {
879
- content.setSuspendSelection(false);
879
+ content.enableRequests(true, result?.diffState);
880
880
  }
881
881
  }
882
882
  }
@@ -897,7 +897,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
897
897
  const targetFilterField = !!state.items.find(item => item.name === conditionPath);
898
898
  if (!targetFilterField) {
899
899
  state.items.push({
900
- name
900
+ name: conditionPath
901
901
  });
902
902
  }
903
903
  await StateUtil.applyExternalState(this.content, state);
@@ -1000,4 +1000,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1000
1000
  }), _applyDecoratedDescriptor(_class2.prototype, "handleSearch", [_dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "handleSearch"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFilterChanged", [_dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFilterChanged"), _class2.prototype), _class2)) || _class) || _class);
1001
1001
  return FilterBarAPI;
1002
1002
  }, false);
1003
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsIl9kZWMxMSIsImV2ZW50IiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwieG1sRXZlbnRIYW5kbGVyIiwiX2RlYzE3IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiaW5pdGlhbENvbnRyb2xTdGF0ZSIsIl9pbml0aWFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsIl9iU2VhcmNoVHJpZ2dlcmVkIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90bzIiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwicHJvbWlzZSIsImdldENvbnRyb2xTdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsImlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCIsIm5hdmlnYXRpb25UeXBlIiwiY29udHJvbGxlciIsInZpZXciLCJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsImJ5SWQiLCJjdXJyZW50VmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiTmF2VHlwZSIsInhBcHBTdGF0ZSIsImluaXRpYWxMb2FkIiwiSW5pdGlhbExvYWRNb2RlIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRGaWx0ZXJCYXJWTSIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJfYXBwbHlTZWxlY3Rpb25WYXJpYW50IiwibmF2aWdhdGlvblBhcmFtZXRlciIsImZpbHRlclZhcmlhbnRBcHBsaWVkIiwiZmlsdGVyQmFyIiwiZ2V0Q29udGVudCIsInNlbGVjdGlvblZhcmlhbnQiLCJzdiIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInN2RGVmYXVsdHMiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvdWxkQXBwbHlBcHBTdGF0ZSIsIl9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlIiwiX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWIiwic3ZEZWZhdWx0c0FyZVByZXNlbnQiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsInN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IiwiZ2V0RGVmYXVsdFZhcmlhbnRLZXkiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJ1c2VGTFBEZWZhdWx0VmFsdWVzIiwiZ2V0UGFyZW50Iiwic3ZUb1NldCIsIl9nZXRBZGp1c3RlZFNWIiwic2V0U2VsZWN0aW9uVmFyaWFudCIsIl9lbmFibGVGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJDb250cm9sIiwicHJldmVudEluaXRpYWxTZWFyY2giLCJmbk9uU2VhcmNoIiwiZ2V0U3VzcGVuZFNlbGVjdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsInNldFN1c3BlbmRTZWxlY3Rpb24iLCJhcHBTdGF0ZVNWIiwiYWRqdXN0ZWRTViIsIlNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05PYmplY3QiLCJhbHJlYWR5QXBwbGllZFNWIiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImFwcGxpZWRTZWxPcHROYW1lcyIsInJlZHVjZSIsInN2Q29weSIsInNlbE9wdGlvbk5hbWUiLCJzdlNlbE9wdHMiLCJnZXRTZWxlY3RPcHRpb24iLCJzZWxlY3RPcHRpb25zIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsIl9wcmV2ZW50SW5pdGlhbFNlYXJjaCIsImFWYXJpYW50cyIsImdldFZhcmlhbnRzIiwib0N1cnJlbnRWYXJpYW50IiwiZmluZCIsIml0ZW0iLCJnZXRLZXkiLCJleGVjdXRlT25TZWxlY3QiLCJpc0VtcHR5IiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIiwiZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIiwiZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkiLCJfY2hlY2tJZkRpc3BsYXlDdXJyZW5jeUlzUmVxdWlyZWQiLCJzdk9wdGlvbnMiLCJkZWZhdWx0U1ZPcHRpb25zIiwiZGlzcGxheUN1cnJlbmN5RGVmYXVsdEV4aXN0cyIsIm5vU1ZEaXNwbGF5Q3VycmVuY3lFeGlzdHMiLCJkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24iLCJzaWduIiwib3B0aW9uIiwibG93IiwiaGlnaCIsImFkZFNlbGVjdE9wdGlvbiIsImlzUGFyYW1ldGVyaXplZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiZW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiUmVzdWx0Q29udGV4dCIsImVudGl0eVByb3BlcnRpZXMiLCJzb21lIiwicGFyYW1ldGVyIiwibmFtZSIsIl90eXBlIiwidW5kZWZpbmVkIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwicmVxdWlyZWRQcm9wZXJ0eSIsInZhbHVlIiwicmVxU3RkVmFyaWFudCIsInZhcmlhbnRLZXkiLCJnZXRJZCIsIkNvbnRyb2xWYXJpYW50QXBwbHlBUEkiLCJhY3RpdmF0ZVZhcmlhbnQiLCJlbGVtZW50IiwidmFyaWFudFJlZmVyZW5jZSIsIlBhZ2UiLCJnZXRDb250cm9sbGVyIiwiTm9uZSIsImhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJhQ2hhcnRWYXJpYW50SWQiLCJvVmFyaWFudElEcyIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsInNDaGFydFZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZNIiwib1ZpZXciLCJhUHJvbWlzZXMiLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJfaGFuZGxlUGFnZVZhcmlhbnRJZCIsIl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkIiwiYWxsIiwib1ZhcmlhbnQiLCJfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlIiwic1ZhcmlhbnRJZCIsImJGaWx0ZXJWYXJpYW50QXBwbGllZCIsImtleSIsInB1c2giLCJfYXBwbHlDb250cm9sVmFyaWFudCIsInNWYXJpYW50SUQiLCJhcmd1bWVudHMiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJ0aGVuIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIlN0YXRlVXRpbCIsImRldGFjaFN0YXRlQ2hhbmdlIiwic3RhdGVDaGFuZ2VIYW5kbGVyIiwiYXR0YWNoU3RhdGVDaGFuZ2UiLCJvRXZlbnQiLCJjb250cm9sIiwiZ2V0UGFyYW1ldGVyIiwiaXNBIiwiaGFuZGxlU3RhdGVDaGFuZ2UiLCJoYW5kbGVTZWFyY2giLCJvRmlsdGVyQmFyIiwiZ2V0U291cmNlIiwiZ2V0UGFyYW1ldGVycyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyIsIl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzIiwiZmlyZUV2ZW50IiwibWVyZ2UiLCJoYW5kbGVGaWx0ZXJDaGFuZ2VkIiwib0V2ZW50UGFyYW1ldGVycyIsIm9Db25kaXRpb25zIiwiX2dldEZpbHRlckJhclJlYXNvbiIsIl9zUmVhc29uIiwiZmlsdGVycyIsInNlYXJjaCIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVycyIsInNldEZpbHRlclZhbHVlcyIsInNDb25kaXRpb25QYXRoIiwic09wZXJhdG9yIiwidlZhbHVlcyIsImNvbnRlbnQiLCJnZXRBY3RpdmVGaWx0ZXJzVGV4dCIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsInRyaWdnZXJTZWFyY2giLCJ3YWl0Rm9ySW5pdGlhbGl6YXRpb24iLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJMb2ciLCJlcnJvciIsImlzU2VtYW50aWNEYXRlRmlsdGVyQXBwbGllZCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImhhc1NlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJnZXRDb25kaXRpb25zIiwic3RhdGVIZWxwZXIiLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJkYXRhTW9kZWxPYmplY3QiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIm1ldGFQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRVcmwiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwic2V0RmlsdGVyQ29udGV4dFVybCIsImdldE1hbmRhdG9yeUZpbHRlclByb3BlcnR5TmFtZXMiLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmaWx0ZXIiLCJmaWx0ZXJQcm9wIiwicmVxdWlyZWQiLCJtYXAiLCJyZXF1aXJlZFByb3AiLCJjb25kaXRpb25QYXRoIiwiZGF0YSIsIkFycmF5IiwiaXNBcnJheSIsIkpTT04iLCJwYXJzZSIsImN1cnJlbnRWYXJpYW50IiwidmFyaWFudE1vZGVsIiwidmFyaWFudEJhY2tSZWZlcmVuY2UiLCJnZXRWYXJpYW50QmFja3JlZmVyZW5jZSIsImdldEN1cnJlbnRWYXJpYW50UmVmZXJlbmNlIiwiZSIsImRlYnVnIiwic2V0RmlsdGVyRmllbGRWaXNpYmxlIiwidmlzaWJsZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsIml0ZW1zIiwiZ2V0RmlsdGVyRmllbGRWaXNpYmxlIiwic3RhdGUiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRCYWNrcmVmZXJlbmNlIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJzZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsInZhcmlhbnQiLCJpc0xpdmVNb2RlIiwiZ2V0TGl2ZU1vZGUiLCJzZXRWYXJpYW50QmFja3JlZmVyZW5jZSIsInNldEN1cnJlbnRWYXJpYW50S2V5Iiwic2V0RmlsdGVyRmllbGRFbmFibGVkIiwiZW5hYmxlZCIsInNldERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJlZGl0TW9kZSIsIkZpZWxkRWRpdE1vZGUiLCJFZGl0YWJsZSIsIkRpc2FibGVkIiwiZ2V0RmlsdGVyRmllbGRFbmFibGVkIiwiZ2V0UHJvcGVydHkiLCJjb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzIiwicHJlZmlsbERlc2NyaXB0aW9ucyIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwib3B0aW9ucyIsInJldCIsInNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImdldENvbmRpdGlvblBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd0ZpbHRlckZpZWxkIiwidGFyZ2V0RmlsdGVyRmllbGQiLCJvcGVuVmFsdWVIZWxwRm9yRmlsdGVyRmllbGQiLCJpbnB1dFZhbHVlIiwicmVqZWN0IiwiZmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJJdGVtcyIsImdldFByb3BlcnR5S2V5IiwidmFsdWVIZWxwIiwiZ2V0VmFsdWVIZWxwIiwiX29Gb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50Iiwib25mb2N1c2luIiwialF1ZXJ5IiwiRXZlbnQiLCJzZXRUaW1lb3V0IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJlVmFsdWVIZWxwUmVxdWVzdCIsImZyb21LZXlib2FyZCIsIl91c2VySW5wdXRWYWx1ZSIsImdldENvbGxhcHNlZEZpbHRlcnNUZXh0IiwiTWFjcm9BUEkiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckJhckFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgbWl4aW4sIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xTdGF0ZSwgTGVnYWN5RmlsdGVyQmFyU3RhdGUsIE5hdmlnYXRpb25QYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCB7IEluaXRpYWxMb2FkTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSB7IElGaWx0ZXJDb250cm9sIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyRmllbGRcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVIZWxwZXJcIjtcbmltcG9ydCBzdGF0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbEJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxTdGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgeyBOYXZUeXBlIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBMaXN0UmVwb3J0Q29udHJvbGxlciB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgdHlwZSB7IElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBFdmVudCwgZGVmYXVsdCBhcyBVSTVFdmVudCB9IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgZnJvbSBcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1vZGVsIGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IFZhcmlhbnREYXRhIH0gZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9maWx0ZXJiYXIvRmlsdGVyQmFyQmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXIgYXMgU3RhdGVVdGlsRmlsdGVyIH0gZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTWV0YU1vZGVsLCBkZWZhdWx0IGFzIE9EYXRhTWV0YU1vZGVsIH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IGpRdWVyeSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvanF1ZXJ5XCI7XG5pbXBvcnQgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIGZyb20gXCIuL21peGluL0ZpbHRlckJhckFQSVN0YXRlSGFuZGxlclwiO1xuXG4vLyBUcmFjayB0ZWxlbWV0cnkgY29udGVudCBmb3IgdGhlIGZpbHRlckJhclxuY2xhc3MgRmlsdGVyQmFyVGVsZW1ldHJ5IHtcblx0cHJpdmF0ZSBjb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXG5cdHByaXZhdGUgY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWx0ZXJCYXJBUEk6IEZpbHRlckJhckFQSSkge31cblxuXHRvbkZpbHRlcnNDaGFuZ2VkKHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChyZWFzb24gPT09IFwiVmFyaWFudFwiKSB7XG5cdFx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMrKztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMrKztcblx0XHR9XG5cdH1cblxuXHRvblNlYXJjaChldmVudFBhcmFtZXRlcnM6IHsgcmVhc29uPzogc3RyaW5nIH0sIGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlck5hbWVzID0gdGhpcy5nZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnMpO1xuXHRcdHRoaXMuZmlsdGVyQmFyQVBJLmdldFBhZ2VDb250cm9sbGVyKCk/LnRlbGVtZXRyeS5zdG9yZUFjdGlvbih7XG5cdFx0XHR0eXBlOiBcIkZFLkZpbHRlckJhclNlYXJjaFwiLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRjb3VudEZpbHRlckFjdGlvbnM6IHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zLCAvLyAgSG93IG1hbnkgZmlsdGVyQ2hhbmdlZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWRcblx0XHRcdFx0Y291bnRGaWx0ZXJzOiBPYmplY3Qua2V5cyhjb25kaXRpb25zKS5sZW5ndGgsIC8vIEhvdyBtYW55IGRpZmZlcmVudCBmaWx0ZXJzIGFyZSBhcHBsaWVkXG5cdFx0XHRcdGNvdW50VmFyaWFudEZpbHRlcnM6IHRoaXMuY291bnRWYXJpYW50RmlsdGVycywgLy8gSG93IG1hbnkgZmlsdGVyIGJlbG9uZyB0byBhIHZhcmlhbnRcblx0XHRcdFx0dmFyaWFudExheWVyOiB0aGlzLmZpbHRlckJhckFQSS5nZXRWYXJpYW50KCk/LmxheWVyID8/IFwiTm9uZVwiLCAvLyB8IFwiU0FQXCIgfCBcIkN1c3RvbVwiOyAvLyBUeXBlIG9mIHZhcmlhbnRcblx0XHRcdFx0YXV0b0xvYWQ6IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gPT09IFwiVmFyaWFudFwiLCAvLyBJcyB0aGUgZmlsdGVyIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWRcblx0XHRcdFx0c2VhcmNoVXNlZDogY29uZGl0aW9ucy4kc2VhcmNoID8gISFPYmplY3Qua2V5cyhjb25kaXRpb25zLiRzZWFyY2gpLmxlbmd0aCA6IGZhbHNlLCAvLyBXYXMgdGhlIHNlYXJjaCBmaWVsZCBpbiB0aGUgZmlsdGVyYmFyIHVzZWQ/XG5cdFx0XHRcdGZpbHRlck5hbWVzOiBmaWx0ZXJOYW1lcyAvLyBQcm9wZXJ0eSBuYW1lcyBvZiB0aGUgZmlsdGVyc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIFJlc2V0IHRoZSBjb3VudFxuXHRcdHRoaXMuY291bnRGaWx0ZXJBY3Rpb25zID0gMDtcblx0XHR0aGlzLmNvdW50VmFyaWFudEZpbHRlcnMgPSAwO1xuXHR9XG5cblx0Z2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyhjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4pOiBzdHJpbmcge1xuXHRcdGxldCBmaWx0ZXJOYW1lcyA9IFwiXCI7XG5cdFx0T2JqZWN0LmtleXMoY29uZGl0aW9ucykuZm9yRWFjaCgoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRpZiAoY29uZGl0aW9uICE9IFwiJHNlYXJjaFwiKSB7XG5cdFx0XHRcdGZpbHRlck5hbWVzICs9IGNvbmRpdGlvbiArIFwiO1wiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBmaWx0ZXJOYW1lcztcblx0fVxufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJCYXJTdGF0ZSA9IHtcblx0aW5uZXJTdGF0ZT86IHtcblx0XHRmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0aW5pdGlhbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdFx0ZnVsbFN0YXRlPzogTGVnYWN5RmlsdGVyQmFyU3RhdGU7XG5cdH07XG59O1xuXG50eXBlIFZhcmlhbnRJRHMgPSB7XG5cdHNQYWdlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNGaWx0ZXJCYXJWYXJpYW50SWQ6IHN0cmluZztcblx0c1RhYmxlVmFyaWFudElkOiBzdHJpbmc7XG5cdHNDaGFydFZhcmlhbnRJZDogc3RyaW5nO1xufTtcblxudHlwZSBWYXJpYW50T2JqZWN0ID0ge1xuXHRhdXRob3I6IHN0cmluZztcblx0Y2hhbmdlOiBib29sZWFuO1xuXHRjb250ZXh0czogb2JqZWN0O1xuXHRleGVjdXRlT25TZWxlY3Q6IGJvb2xlYW47XG5cdGZhdm9yaXRlOiBib29sZWFuO1xuXHRrZXk6IHN0cmluZztcblx0b3JpZ2luYWxDb250ZXh0czogb2JqZWN0O1xuXHRvcmlnaW5hbEV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0b3JpZ2luYWxGYXZvcml0ZTogYm9vbGVhbjtcblx0b3JpZ2luYWxUaXRsZTogc3RyaW5nO1xuXHRvcmlnaW5hbFZpc2libGU6IGJvb2xlYW47XG5cdHJlbW92ZTogYm9vbGVhbjtcblx0cmVuYW1lOiBib29sZWFuO1xuXHRzaGFyaW5nOiBzdHJpbmc7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG59O1xuXG5lbnVtIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdENvbnRyb2wgPSBcIkNvbnRyb2xcIixcblx0UGFnZSA9IFwiUGFnZVwiLFxuXHROb25lID0gXCJOb25lXCJcbn1cblxuY29uc3QgRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJEaXNwbGF5Q3VycmVuY3lcIjtcbmNvbnN0IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FID0gXCJQX0Rpc3BsYXlDdXJyZW5jeVwiO1xuXG50eXBlIExSVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudD86IGJvb2xlYW4gfCBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgRmlsdGVyQmFyQVBJIGV4dGVuZHMgRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIHt9XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRmlsdGVyQmFyIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2ZpbHRlckJhci9maWx0ZXJCYXJEZWZhdWx0IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2Nrc31cbiAqIDxicj5cbiAqIFVzdWFsbHksIGEgU2VsZWN0aW9uRmllbGRzIGFubm90YXRpb24gaXMgZXhwZWN0ZWQuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGaWx0ZXJCYXIgaWQ9XCJNeUZpbHRlckJhclwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZpbHRlckJhclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIiwge1xuXHRyZXR1cm5UeXBlczogW1wic2FwLnVpLmNvcmUuQ29udHJvbFwiXVxufSlcbkBtaXhpbihGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIpXG5jbGFzcyBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBNYWNyb0FQSSB7XG5cdGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0X2luaXRpYWxTdGF0ZVByb21pc2U6IFByb21pc2VLZWVwZXI8dm9pZD4gPSBuZXcgUHJvbWlzZUtlZXBlcigpO1xuXG5cdF9iU2VhcmNoVHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0YXN5bmMgd2FpdEZvckluaXRpYWxTdGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5faW5pdGlhbFN0YXRlUHJvbWlzZS5wcm9taXNlO1xuXHR9XG5cblx0Z2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRmdWxsU3RhdGU6IGNvbnRyb2xTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZSBhcyBvYmplY3Rcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIFNlYXJjaCBjYW4gYmUgdHJpZ2dlcmVkIGF0IGluaXRpYWwgbG9hZCBvZiB0aGUgYXBwbGljYXRpb24gb3Igbm90LlxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiBUeXBlIGR1cmluZyB0aGUgbG9hZCBvZiB0aGUgYXBwbGljYXRpb25cblx0ICogQHJldHVybnMgQSBCb29sZWFuIGRldGVybWluaW5nIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgb3Igbm90XG5cdCAqL1xuXHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQobmF2aWdhdGlvblR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHR2aWV3ID0gY29udHJvbGxlci5nZXRWaWV3KCksXG5cdFx0XHR2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRsZXQgaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkID0gZmFsc2UsXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudDtcblx0XHQvLyBEZXRlcm1pbmluZyB3aGV0aGVyIGl0J3MgQ29udHJvbCB2YXJpYW50TWFuYWdlbWVudCBvciBQYWdlIHZhcmlhbnRNYW5hZ2VtZW50XG5cdFx0aWYgKHZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCkge1xuXHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgPSBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IHZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIikgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gdmFyaWFudE1hbmFnZW1lbnQ/LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0Ly9UaGUgY2hlY2sgc2hhbGwgaGFwcGVuIGZvciAnaW50aWFsIGxvYWQnIGFuZCAnQXBwbHkgQXV0b21hdGljYWxseScgZm9yIGNvbGxhcHNpbmcgdGhlIGhlYWRlciBvclxuXHRcdC8vIGFsd2F5cyBiZSBjb2xsYXBzZWQgaWYgbmF2VHlwZSBpcyB4QXBwU3RhdGVcblx0XHQvLyBpbml0aWFsTG9hZCBBdXRvIG9yIERpc2FibGVkXG5cdFx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLnhBcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiB2aWV3RGF0YS5pbml0aWFsTG9hZCAhPT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQpIHtcblx0XHRcdC8vIEhlYWRlciBpcyBjb2xsYXBzZWQgaWYgcHJlc2V0IGZpbHRlcnMgYXJlIHNldCBmb3IgaW5pdGlhbCBsb2FkIEF1dG8sIEhlYWRlciBzaGFsbCByZW1haW4gZXhwYW5kZWQgaWYgaW5pdGlhbCBsb2FkIGlzIEF1dG8gd2l0aG91dCBwcmVzZXQgZmlsdGVycyBvciBpbnRpYWwgbG9hZCBpcyBkaXNhYmxlZFxuXHRcdFx0aWYgKGNvbnRyb2xsZXIuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKHRoaXMuX2dldEZpbHRlckJhclZNKHZpZXcpKSkge1xuXHRcdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBpbml0aWFsTG9hZCBFbmFibGVkXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCAmJlxuXHRcdFx0dmlld0RhdGEuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkICYmXG5cdFx0XHRjb250cm9sbGVyLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQodmFyaWFudE1hbmFnZW1lbnQsIGN1cnJlbnRWYXJpYW50S2V5KVxuXHRcdCkge1xuXHRcdFx0aXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBTZWxlY3Rpb24gVmFyaWFudCBmcm9tIE5hdmlnYXRpb24gUGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVyIFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5IGZyb20gYXBwU3RhdGVcblx0ICogQHBhcmFtIGZpbHRlclZhcmlhbnRBcHBsaWVkIElzIGEgZmlsdGVyIHZhcmlhbnQgYWxhcmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hcHBseVNlbGVjdGlvblZhcmlhbnQodmlldzogVmlldywgbmF2aWdhdGlvblBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlciwgZmlsdGVyVmFyaWFudEFwcGxpZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgeyBzZWxlY3Rpb25WYXJpYW50OiBzdiwgc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBzdkRlZmF1bHRzLCByZXF1aXJlc1N0YW5kYXJkVmFyaWFudCA9IGZhbHNlIH0gPSBuYXZpZ2F0aW9uUGFyYW1ldGVyO1xuXG5cdFx0aWYgKCFmaWx0ZXJCYXIgfHwgIXN2KSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykgYXMgVmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0Y29uc3Qgc2hvdWxkQXBwbHlBcHBTdGF0ZSA9IGF3YWl0IHRoaXMuX2FjdGl2YXRlVmFyaWFudEFuZERldGVybWluZUFwcGx5QXBwU3RhdGUoXG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50LFxuXHRcdFx0ZmlsdGVyVmFyaWFudEFwcGxpZWRcblx0XHQpO1xuXHRcdGlmIChzaG91bGRBcHBseUFwcFN0YXRlKSB7XG5cdFx0XHR0aGlzLl9hZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5VG9TVih2aWV3LCBzdiwgc3ZEZWZhdWx0cyk7XG5cblx0XHRcdC8vIGNoZWNrIGlmIEZMUCBkZWZhdWx0IHZhbHVlcyBhcmUgdGhlcmUgYW5kIGlzIGl0IHN0YW5kYXJkIHZhcmlhbnRcblx0XHRcdGNvbnN0IHN2RGVmYXVsdHNBcmVQcmVzZW50ID0gc3ZEZWZhdWx0cyA/IHN2RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKS5sZW5ndGggPiAwIDogZmFsc2U7XG5cdFx0XHRjb25zdCBzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCA9XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZhcmlhbnRNYW5hZ2VtZW50LmdldERlZmF1bHRWYXJpYW50S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdFx0Y29uc3QgdXNlRkxQRGVmYXVsdFZhbHVlczogYm9vbGVhbiA9IHN2RGVmYXVsdHNBcmVQcmVzZW50ICYmIChzdGRWYXJpYW50SXNEZWZhdWx0VmFyaWFudCB8fCAhdmFyaWFudE1hbmFnZW1lbnQpO1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdFx0bGV0IHN2VG9TZXQ6IFNlbGVjdGlvblZhcmlhbnQgPSBzdjtcblx0XHRcdGlmIChmaWx0ZXJWYXJpYW50QXBwbGllZCB8fCB1c2VGTFBEZWZhdWx0VmFsdWVzKSB7XG5cdFx0XHRcdHN2VG9TZXQgPSBhd2FpdCB0aGlzLl9nZXRBZGp1c3RlZFNWKHN2LCB1c2VGTFBEZWZhdWx0VmFsdWVzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmaWx0ZXJCYXJBUEkuc2V0U2VsZWN0aW9uVmFyaWFudChzdlRvU2V0LCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRfZW5hYmxlRmlsdGVyQmFyKGZpbHRlckJhckNvbnRyb2w6IEZpbHRlckJhciwgcHJldmVudEluaXRpYWxTZWFyY2g6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXJDb250cm9sLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCBmbk9uU2VhcmNoID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5fYlNlYXJjaFRyaWdnZXJlZCA9ICFwcmV2ZW50SW5pdGlhbFNlYXJjaDtcblx0XHR9O1xuXG5cdFx0Ly8gcmVzZXQgdGhlIHN1c3BlbmQgc2VsZWN0aW9uIG9uIGZpbHRlciBiYXIgdG8gYWxsb3cgbG9hZGluZyBvZiBkYXRhIHdoZW4gbmVlZGVkICh3YXMgc2V0IG9uIExSIEluaXQpXG5cdFx0aWYgKGZpbHRlckJhckNvbnRyb2wuZ2V0U3VzcGVuZFNlbGVjdGlvbigpKSB7XG5cdFx0XHQvLyBPbmx5IGlmIHNlYXJjaCBpcyBmaXJlZCB3ZSBzZXQgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHQvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVlIHRvIHJlcXVpcmVkIGZpbHRlcmZpZWxkcyBlbXB0eSBvciBvdGhlciBpc3N1ZXMgd2Ugc2tpcCBzZXR0aW5nIF9iU2VhcmNoVHJpZ2dlcmVkLlxuXHRcdFx0ZmlsdGVyQmFyQVBJLmF0dGFjaEV2ZW50T25jZShcInNlYXJjaFwiLCBmbk9uU2VhcmNoKTtcblx0XHRcdGZpbHRlckJhckNvbnRyb2wuc2V0U3VzcGVuZFNlbGVjdGlvbihmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHNlYXJjaCBtaWdodCBhbHJlYWR5IGJlIHRyaWdnZXJlZC5cblx0XHRcdGZuT25TZWFyY2goKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfZ2V0QWRqdXN0ZWRTVihhcHBTdGF0ZVNWOiBTZWxlY3Rpb25WYXJpYW50LCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0bGV0IGFkanVzdGVkU1YgPSBuZXcgU2VsZWN0aW9uVmFyaWFudChhcHBTdGF0ZVNWLnRvSlNPTk9iamVjdCgpKTtcblx0XHRjb25zdCBhbHJlYWR5QXBwbGllZFNWID0gYXdhaXQgdGhpcy5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Y29uc3QgYXBwbGllZFNlbE9wdE5hbWVzID0gYWxyZWFkeUFwcGxpZWRTVj8uZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKSB8fCBbXTtcblx0XHRpZiAoYXBwbGllZFNlbE9wdE5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIG1lcmdlICdhcHBsaWVkIFNWJyBhbmQgJ2FwcFN0YXRlIFNWJyBiYXNlZCBvbiAndXNlRkxQRGVmYXVsdFZhbHVlcycuXG5cdFx0XHRhZGp1c3RlZFNWID0gYXBwbGllZFNlbE9wdE5hbWVzLnJlZHVjZSgoc3ZDb3B5OiBTZWxlY3Rpb25WYXJpYW50LCBzZWxPcHRpb25OYW1lKSA9PiB7XG5cdFx0XHRcdC8vIChhcHBTdGF0ZVNWID0gYWRqdXN0ZWRTViA9IHN2Q29weSlcblx0XHRcdFx0Y29uc3Qgc3ZTZWxPcHRzID0gc3ZDb3B5LmdldFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lKTtcblx0XHRcdFx0Ly8gSWYgdXNlRkxQRGVmYXVsdFZhbHVlcyA9IHRydWUsIG1lYW5zIChhcHBTdGF0ZVNWID0gc3ZEZWZhdWx0cylcblx0XHRcdFx0aWYgKCh1c2VGTFBEZWZhdWx0VmFsdWVzICYmICFzdlNlbE9wdHM/Lmxlbmd0aCkgfHwgIXVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0XHQvLyBpZiBkZWZhdWx0IFNWIG5lZWRzIHRvIGJlIHVzZWQsIHRoZW4gc2VsZWN0IG9wdGlvbnMgZnJvbSBkZWZhdWx0IHNlbGVjdCBvcHRpb25zIHRha2UgcHJpb3JpdHkuXG5cdFx0XHRcdFx0Ly8gZWxzZSB3ZSBtZXJnZSBib3RoOiBhbHJlYWR5IGFwcGxpZWQgU1YgYW5kIFNWIGZyb20gbmF2UGFyYW1zLlxuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBhbHJlYWR5QXBwbGllZFNWLmdldFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lKTtcblx0XHRcdFx0XHRzdkNvcHkubWFzc0FkZFNlbGVjdE9wdGlvbihzZWxPcHRpb25OYW1lLCBzZWxlY3RPcHRpb25zIHx8IFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3ZDb3B5O1xuXHRcdFx0fSwgYWRqdXN0ZWRTVik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFkanVzdGVkU1Y7XG5cdH1cblxuXHRfcHJldmVudEluaXRpYWxTZWFyY2godmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50KTogYm9vbGVhbiB7XG5cdFx0aWYgKCF2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGFWYXJpYW50cyA9IHZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3Qgb0N1cnJlbnRWYXJpYW50ID0gYVZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKGl0ZW0pOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpdGVtLmdldEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAhb0N1cnJlbnRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGlzcGxheUN1cnJlbmN5IHRvIFNWIGlmIGl0IGlzIG1hbmRhdG9yeSBhbmQgZXhpc3RzIGluIFNWIGRlZmF1bHRzLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBzdiBTZWxlY3Rpb24gVmFyaWFudCB0byBhcHBseVxuXHQgKiBAcGFyYW0gc3ZEZWZhdWx0cyBTZWxlY3Rpb24gVmFyaWFudCBkZWZhdWx0c1xuXHQgKi9cblx0X2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXc6IFZpZXcsIHN2OiBTZWxlY3Rpb25WYXJpYW50LCBzdkRlZmF1bHRzPzogU2VsZWN0aW9uVmFyaWFudCk6IHZvaWQge1xuXHRcdGlmICghc3ZEZWZhdWx0cyB8fCBzdkRlZmF1bHRzPy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhLFxuXHRcdFx0bWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdGNvbnRleHRQYXRoID0gdmlld0RhdGEuY29udGV4dFBhdGggfHwgYC8ke3ZpZXdEYXRhLmVudGl0eVNldH1gLFxuXHRcdFx0bWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dFBhdGgpLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxNZXRhTW9kZWw+ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdC8vIGdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSBhbHJlYWR5IGFwcGxpZXMgdGhlIGlzUGFyYW1ldGVyaXplZCBsb2dpY1xuXHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5ID0gdGhpcy5fY2hlY2tJZkRpc3BsYXlDdXJyZW5jeUlzUmVxdWlyZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0aWYgKCFkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN2T3B0aW9ucyA9IHN2LmdldFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUpIHx8IFtdLFxuXHRcdFx0ZGVmYXVsdFNWT3B0aW9ucyA9IHN2RGVmYXVsdHMuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzID0gZGVmYXVsdFNWT3B0aW9ucy5sZW5ndGggPiAwLFxuXHRcdFx0bm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyA9IHN2T3B0aW9ucy5sZW5ndGggPT09IDA7XG5cblx0XHRpZiAobm9TVkRpc3BsYXlDdXJyZW5jeUV4aXN0cyAmJiBkaXNwbGF5Q3VycmVuY3lEZWZhdWx0RXhpc3RzKSB7XG5cdFx0XHRjb25zdCBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb24gPSBkZWZhdWx0U1ZPcHRpb25zWzBdLFxuXHRcdFx0XHRzaWduID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiU2lnblwiXSxcblx0XHRcdFx0b3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdLFxuXHRcdFx0XHRsb3cgPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJMb3dcIl0sXG5cdFx0XHRcdGhpZ2ggPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJIaWdoXCJdO1xuXG5cdFx0XHRzdi5hZGRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lLCBzaWduLCBvcHRpb24sIGxvdywgaGlnaCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBpcyBwYXJhbWV0ZXJpemVkLlxuXHQgKiBMb29rcyBmb3IgYSBSZXN1bHRDb250ZXh0IGFubm90YXRpb24gaW4gdGhlIHN0YXJ0aW5nIGVudGl0eSdzIHR5cGVcblx0ICogYW5kIGVuc3VyZXMgdGhlcmUncyBubyB0YXJnZXQgZW50aXR5IHNldC5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gY2hlY2suXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgaXQncyBwYXJhbWV0ZXJpemVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwcml2YXRlIGlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISFkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lIGJhc2VkIG9uIHRoZSBlbnRpdHkgdHlwZSdzIHBhcmFtZXRlcml6YXRpb24uXG5cdCAqIFVzZXMgdGhlIGlzUGFyYW1ldGVyaXplZCBtZXRob2QgdG8gZGVjaWRlIHdoaWNoIHByb3BlcnR5IG5hbWUgdG8gcmV0dXJuLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGRpc3BsYXkgY3VycmVuY3kgcHJvcGVydHkgbmFtZS5cblx0ICovXG5cdGdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZShkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoKSA/IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIDogRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBEaXNwbGF5Q3VycmVuY3kgaXMgbWFuZGF0b3J5IGZvciBmaWx0ZXJpbmcuXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIEJvb2xlYW5cblx0ICovXG5cdF9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4pOiBib29sZWFuIHtcblx0XHRsZXQgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSBmYWxzZTtcblxuXHRcdGlmICh0aGlzLmlzUGFyYW1ldGVyaXplZChkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5zb21lKFxuXHRcdFx0XHQocGFyYW1ldGVyOiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcGFyYW1ldGVyLm5hbWUgPT09IFBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIiA/IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyA/PyBbXTtcblx0XHRcdGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5ID0gcmVxdWlyZWRQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChyZXF1aXJlZFByb3BlcnR5OiBQcm9wZXJ0eVBhdGgpID0+IHJlcXVpcmVkUHJvcGVydHkudmFsdWUgPT09IERJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFjdGl2YXRlIHZhcmlhbnQgZnJvbSB2YXJpYW50IG1hbmFnZW1lbnQgYW5kIHJldHVybiBpZiBhcHBTdGF0ZSBuZWVkcyB0byBiZSBhcHBsaWVkLlxuXHQgKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnQgVmFyaWFudE1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSByZXFTdGRWYXJpYW50IElmIHN0YW5kYXJkIHZhcmlhbnQgaXMgcmVxdWlyZWQgdG8gYmUgdXNlZFxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbHJlYWR5IGFwcGxpZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nXG5cdCAqL1xuXHRhc3luYyBfYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0cmVxU3RkVmFyaWFudDogYm9vbGVhbixcblx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhblxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgJiYgIWZpbHRlclZhcmlhbnRBcHBsaWVkKSB7XG5cdFx0XHRsZXQgdmFyaWFudEtleSA9IHJlcVN0ZFZhcmlhbnQgPyB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA6IHZhcmlhbnRNYW5hZ2VtZW50LmdldERlZmF1bHRWYXJpYW50S2V5KCk7XG5cdFx0XHRpZiAodmFyaWFudEtleSA9PT0gbnVsbCkge1xuXHRcdFx0XHR2YXJpYW50S2V5ID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0SWQoKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0ZWxlbWVudDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHZhcmlhbnRLZXlcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlcVN0ZFZhcmlhbnQgfHwgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVmFyaWFudCBtYW5hZ2VtZW50IHVzZWQgYnkgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIHZpZXcgVmlldyBvZiB0aGUgTFIgZmlsdGVyIGJhclxuXHQgKiBAcmV0dXJucyBWYXJpYW50TWFuYWdlbWVudCBpZiB1c2VkXG5cdCAqL1xuXHRfZ2V0RmlsdGVyQmFyVk0odmlldzogVmlldyk6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgdmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgTFJWaWV3RGF0YTtcblx0XHRzd2l0Y2ggKHZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IHZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbDpcblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgPSAodmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhbnRNYW5hZ2VtZW50IGFzIFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG5cdGFzeW5jIGhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyhvVXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3QgYVBhZ2VWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLXZhcmlhbnQtaWRcIl0sXG5cdFx0XHRhRmlsdGVyQmFyVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1maWx0ZXJiYXItdmFyaWFudC1pZFwiXSxcblx0XHRcdGFUYWJsZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdGFibGUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFDaGFydFZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtY2hhcnQtdmFyaWFudC1pZFwiXTtcblx0XHRsZXQgb1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGFQYWdlVmFyaWFudElkIHx8IGFGaWx0ZXJCYXJWYXJpYW50SWQgfHwgYVRhYmxlVmFyaWFudElkIHx8IGFDaGFydFZhcmlhbnRJZCkge1xuXHRcdFx0b1ZhcmlhbnRJRHMgPSB7XG5cdFx0XHRcdHNQYWdlVmFyaWFudElkOiBhUGFnZVZhcmlhbnRJZCAmJiBhUGFnZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0ZpbHRlckJhclZhcmlhbnRJZDogYUZpbHRlckJhclZhcmlhbnRJZCAmJiBhRmlsdGVyQmFyVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzVGFibGVWYXJpYW50SWQ6IGFUYWJsZVZhcmlhbnRJZCAmJiBhVGFibGVWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNDaGFydFZhcmlhbnRJZDogYUNoYXJ0VmFyaWFudElkICYmIGFDaGFydFZhcmlhbnRJZFswXVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2hhbmRsZUNvbnRyb2xWYXJpYW50SWQob1ZhcmlhbnRJRHMpO1xuXHR9XG5cblx0YXN5bmMgX2hhbmRsZUNvbnRyb2xWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMgfCB1bmRlZmluZWQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRsZXQgb1ZNOiBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10gPSBbXTtcblx0XHRjb25zdCBzVmFyaWFudE1hbmFnZW1lbnQgPSBvVmlldy5nZXRWaWV3RGF0YSgpLnZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGlmIChvVmFyaWFudElEcyAmJiBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCAmJiBzVmFyaWFudE1hbmFnZW1lbnQgPT09IFwiUGFnZVwiKSB7XG5cdFx0XHRvVk0gPSBvVmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRcdHRoaXMuX2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHMsIG9WTSwgYVByb21pc2VzKTtcblx0XHR9IGVsc2UgaWYgKG9WYXJpYW50SURzICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGlmIChvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkKSB7XG5cdFx0XHRcdG9WTSA9IChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpITtcblx0XHRcdFx0dGhpcy5faGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0fVxuXG5cdC8qXG5cdCAqIEhhbmRsZXMgcGFnZSBsZXZlbCB2YXJpYW50IGFuZCBwYXNzZXMgdGhlIHZhcmlhbnQgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgcHVzaGVzIHRoZSBwcm9taXNlIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdCAqXG5cdCAqIEBwYXJhbSBvVmFyaW5hdElEcyBjb250YWlucyBhbiBvYmplY3Qgb2YgYWxsIHZhcmlhbnQgSURzXG5cdCAqIEBwYXJhbSBvVk0gY29udGFpbnMgdGhlIHZhaXJhbnQgbWFuYWdlbWVudCBvYmplY3QgZm9yIHRoZSBwYWdlIHZhcmlhbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBhbGwgcHJvbWlzZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9oYW5kbGVQYWdlVmFyaWFudElkKG9WYXJpYW50SURzOiBWYXJpYW50SURzLCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50LCBhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSk6IHZvaWQge1xuXHRcdG9WTS5nZXRWYXJpYW50cygpPy5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5fZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKG9WYXJpYW50LCBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCwgb1ZNLCBhUHJvbWlzZXMsIHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBjb250cm9sIGxldmVsIHZhcmlhbnQgZm9yIGZpbHRlciBiYXIgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBhbGwgcHJvbWlzZXNcblx0ICogQHByaXZhdGVcblx0ICovXG5cblx0X2hhbmRsZUZpbHRlckJhclZhcmlhbnRDb250cm9sSWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0aWYgKG9WTSkge1xuXHRcdFx0b1ZNLmdldFZhcmlhbnRzKCkuZm9yRWFjaCgob1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5fZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKG9WYXJpYW50LCBvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKlxuXHQgKiBNYXRjaGVzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmwgdG8gdGhlIGF2YWlsYWJsZSB2YWlyYW50IElEcyBhbmQgcHVzaGVzIHRoZSBhcHByb3ByaWF0ZSBwcm9taXNlIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdCAqXG5cdCAqIEBwYXJhbSBvVmFyaWFudCBpcyBhbiBvYmplY3QgZm9yIGEgc3BlY2lmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gc1ZhcmlhbnRJZCBpcyB0aGUgdmFyaWFudCBJRCBwcm92aWRlZCBpbiB0aGUgdXJsXG5cdCAqIEBwYXJhbSBvVk0gaXMgdGhlIHZhcmlhbnQgbWFuYWdlbWVudCBvYmplY3QgZm9yIHRoZSBzcGVjZmljIHZhcmlhbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBpcyBhbiBhcnJheSBvZiBwcm9taXNlc1xuXHQgKiBAcGFyYW0gYkZpbHRlclZhcmlhbnRBcHBsaWVkIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB3aGljaCBpcyBzZXQgdG8gdHVyZSBpbiBjYXNlIHRoZSBmaWx0ZXIgdmFyaWFudCBpcyBhcHBsaWVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZmluZEFuZFB1c2hWYXJpYW50VG9Qcm9taXNlKFxuXHRcdC8vVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgc3VpdGFibGUgdmFyaWFudCBmb3IgdGhlIHZhcmlhbnRJRCBwcm92aWRlZCBpbiB0aGUgdXJsIGFuZCBwdXNoZXMgdGhlbSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHRcdG9WYXJpYW50OiBWYXJpYW50T2JqZWN0LFxuXHRcdHNWYXJpYW50SWQ6IHN0cmluZyxcblx0XHRvVk06IFZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdLFxuXHRcdGJGaWx0ZXJWYXJpYW50QXBwbGllZD86IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0aWYgKG9WYXJpYW50LmtleSA9PT0gc1ZhcmlhbnRJZCkge1xuXHRcdFx0YVByb21pc2VzLnB1c2godGhpcy5fYXBwbHlDb250cm9sVmFyaWFudChvVk0sIHNWYXJpYW50SWQsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCkpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9hcHBseUNvbnRyb2xWYXJpYW50KG9WYXJpYW50OiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJRDogc3RyaW5nLCBiRmlsdGVyVmFyaWFudEFwcGxpZWQgPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WYXJpYW50LCBzVmFyaWFudElEKSA/IHNWYXJpYW50SUQgOiBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRjb25zdCBvVk0gPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRlbGVtZW50OiBvVmFyaWFudCxcblx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlXG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9WTS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBiRmlsdGVyVmFyaWFudEFwcGxpZWQ7XG5cdFx0fSk7XG5cdH1cblxuXHRfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIHNWYXJpYW50SWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcblx0XHRjb25zdCBhVmFyaWFudHMgPSBvVk0uZ2V0VmFyaWFudHMoKTtcblx0XHRsZXQgYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRcdGFWYXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChvVmFyaWFudCkge1xuXHRcdFx0aWYgKG9WYXJpYW50LmdldEtleSgpID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRcdGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBGaWx0ZXJCYXIgY29udHJvbC5cblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uczogW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIkVudGl0eVR5cGVcIl1cblx0fSlcblx0bWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXVxuXHR9KVxuXHRjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogSWYgdHJ1ZSwgdGhlIHNlYXJjaCBpcyB0cmlnZ2VyZWQgYXV0b21hdGljYWxseSB3aGVuIGEgZmlsdGVyIHZhbHVlIGlzIGNoYW5nZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGxpdmVNb2RlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUGFyYW1ldGVyIHdoaWNoIHNldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHZpc2libGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBwb3NzaWJsZSBlcnJvcnMgZHVyaW5nIHRoZSBzZWFyY2ggaW4gYSBtZXNzYWdlIGJveFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHNob3dNZXNzYWdlcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlICdDbGVhcicgYnV0dG9uIG9uIHRoZSBGaWx0ZXJCYXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdHNob3dDbGVhckJ1dHRvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFnZ3JlZ2F0ZSBmaWx0ZXIgZmllbGRzIG9mIHRoZSBGaWx0ZXJCYXIgYnVpbGRpbmcgYmxvY2tcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJGaWVsZFwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRmaWx0ZXJGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdO1xuXG5cdGNvbnRlbnQhOiBGaWx0ZXJCYXI7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgJ0dvJyBidXR0b24gaXMgcHJlc3NlZCBvciBhZnRlciBhIGNvbmRpdGlvbiBjaGFuZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlYXJjaCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS4gVGhpcyBpcyBvbmx5IGludGVybmFsbHkgdXNlZCBieSBzYXAuZmUgKEZpb3JpIGVsZW1lbnRzKSBhbmRcblx0ICogZXhwb3NlcyBwYXJhbWV0ZXJzIGZyb20gaW50ZXJuYWwgTURDLUZpbHRlckJhciBzZWFyY2ggZXZlbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsU2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGVpdGhlciBhIGZpbHRlciB2YWx1ZSBvciB0aGUgdmlzaWJpbGl0eSBvZiBhIGZpbHRlciBpdGVtIGhhcyBiZWVuIGNoYW5nZWQuIFRoZSBldmVudCBjb250YWlucyBjb25kaXRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGZpbHRlckNoYW5nZWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgcHJlc3NlZC4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlICdDbGVhcicgYnV0dG9uIGlzIGVuYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdGFmdGVyQ2xlYXIhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgb25seSBieSBzYXAuZmUgKEZpb3JpIEVsZW1lbnRzKS4gVGhpcyBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSB0aGUgTURDLUZpbHRlckJhciBmaWx0ZXJDaGFuZ2VkIGV2ZW50IHRoYXQgaXMgdXNlZCBieSBzYXAuZmUgaW4gc29tZSBjYXNlcy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdGludGVybmFsRmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHRwcml2YXRlIHRlbGVtZXRyeT86IEZpbHRlckJhclRlbGVtZXRyeTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wcz86ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RmlsdGVyQmFyQVBJPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBvdGhlcnMpO1xuXHRcdHRoaXMudGVsZW1ldHJ5ID0gbmV3IEZpbHRlckJhclRlbGVtZXRyeSh0aGlzKTtcblx0XHR0aGlzLmF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIoKTogdm9pZCB7XG5cdFx0U3RhdGVVdGlsLmRldGFjaFN0YXRlQ2hhbmdlKHRoaXMuc3RhdGVDaGFuZ2VIYW5kbGVyKTtcblx0XHRTdGF0ZVV0aWwuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHR9XG5cblx0c3RhdGVDaGFuZ2VIYW5kbGVyKG9FdmVudDogRXZlbnQ8eyBjb250cm9sOiBDb250cm9sIH0+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb250cm9sXCIpO1xuXHRcdGlmIChjb250cm9sLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IGhhbmRsZVN0YXRlQ2hhbmdlPzogRnVuY3Rpb24gfTtcblx0XHRcdGlmIChmaWx0ZXJCYXJBUEk/LmhhbmRsZVN0YXRlQ2hhbmdlKSB7XG5cdFx0XHRcdGZpbHRlckJhckFQSS5oYW5kbGVTdGF0ZUNoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRoYW5kbGVTZWFyY2gob0V2ZW50OiBGaWx0ZXJCYXJCYXNlJFNlYXJjaEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ZpbHRlckJhciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9ucyA9IChvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdFx0Y29uc3QgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMgPSB0aGlzLl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXIpO1xuXHRcdFx0dGhpcy50ZWxlbWV0cnk/Lm9uU2VhcmNoKGV2ZW50UGFyYW1ldGVycywgY29uZGl0aW9ucyk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImludGVybmFsU2VhcmNoXCIsIG1lcmdlKHsgY29uZGl0aW9uczogY29uZGl0aW9ucyB9LCBldmVudFBhcmFtZXRlcnMpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwic2VhcmNoXCIsIG1lcmdlKHsgcmVhc29uOiBldmVudFBhcmFtZXRlcnMucmVhc29uIH0sIHByZXBhcmVkRXZlbnRQYXJhbWV0ZXJzKSk7XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZUZpbHRlckNoYW5nZWQob0V2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb0V2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBmaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpO1xuXHRcdFx0Y29uc3QgZXZlbnRQYXJhbWV0ZXJzOiBvYmplY3QgPSB0aGlzLl9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKGZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25GaWx0ZXJzQ2hhbmdlZCh0aGlzLl9nZXRGaWx0ZXJCYXJSZWFzb24oZmlsdGVyQmFyKSk7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImludGVybmFsRmlsdGVyQ2hhbmdlZFwiLCBtZXJnZSh7IGNvbmRpdGlvbnM6IG9Db25kaXRpb25zIH0sIG9FdmVudFBhcmFtZXRlcnMpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiZmlsdGVyQ2hhbmdlZFwiLCBldmVudFBhcmFtZXRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJSZWFzb24oZmlsdGVyQmFyOiBGaWx0ZXJCYXIgJiB7IF9zUmVhc29uPzogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBmaWx0ZXJCYXI/Ll9zUmVhc29uID8/IFwiXCI7XG5cdH1cblxuXHRfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyhvRmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQYXJ0aWFsPEludGVybmFsQmluZGluZ0luZm8+IHtcblx0XHRjb25zdCB7IHBhcmFtZXRlcnMsIGZpbHRlcnMsIHNlYXJjaCB9ID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVycyhvRmlsdGVyQmFyIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wpIHx8IHt9O1xuXG5cdFx0cmV0dXJuIHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH07XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBmaWx0ZXIgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqIFRoZSBmaWx0ZXIgdmFsdWVzIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHQgKiBFYWNoIGZpbHRlciB2YWx1ZSBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgcHJpbWl0aXZlIHZhbHVlLlxuXHQgKiBAcGFyYW0gc0NvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIFtzT3BlcmF0b3JdIFRoZSBvcGVyYXRvciB0byBiZSB1c2VkIChvcHRpb25hbCkgLSBpZiBub3Qgc2V0LCB0aGUgZGVmYXVsdCBvcGVyYXRvciAoRVEpIHdpbGwgYmUgdXNlZFxuXHQgKiBAcGFyYW0gdlZhbHVlcyBUaGUgdmFsdWVzIHRvIGJlIGFwcGxpZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyVmFsdWVzKFxuXHRcdHNDb25kaXRpb25QYXRoOiBzdHJpbmcsXG5cdFx0c09wZXJhdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dlZhbHVlcz86IHVuZGVmaW5lZCB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IG51bWJlcltdIHwgYm9vbGVhbltdXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcblx0XHRcdHZWYWx1ZXMgPSBzT3BlcmF0b3I7XG5cdFx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuc2V0RmlsdGVyVmFsdWVzKHRoaXMuY29udGVudCwgc0NvbmRpdGlvblBhdGgsIHZWYWx1ZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuc2V0RmlsdGVyVmFsdWVzKHRoaXMuY29udGVudCwgc0NvbmRpdGlvblBhdGgsIHNPcGVyYXRvciwgdlZhbHVlcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBBY3RpdmUgRmlsdGVycyBUZXh0IFN1bW1hcnkgZm9yIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcmV0dXJucyBBY3RpdmUgZmlsdGVycyBzdW1tYXJ5IGFzIHRleHRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0QWN0aXZlRmlsdGVyc1RleHQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Py5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCk/LmZpbHRlcnNUZXh0IHx8IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgYWxsIHRoZSBmaWx0ZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmVcblx0ICogYWxvbmcgd2l0aCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFjdGl2ZSBmaWx0ZXJzIGFuZCB0aGUgc2VhcmNoIGV4cHJlc3Npb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlcnMoKTogb2JqZWN0IHtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0RmlsdGVycyh0aGlzLmNvbnRlbnQgYXMgSUZpbHRlckNvbnRyb2wpIHx8IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIHRoZSBBUEkgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyBpZiBmaWx0ZXIgZ28gaXMgdHJpZ2dlcmVkIHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGdldHMgcmVqZWN0ZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHRyaWdnZXJTZWFyY2goKTogUHJvbWlzZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdFx0YXdhaXQgZmlsdGVyQmFyLndhaXRGb3JJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRyZXR1cm4gYXdhaXQgZmlsdGVyQmFyLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VtYW50aWNEYXRlRmlsdGVyQXBwbGllZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmhhc1NlbWFudGljRGF0ZU9wZXJhdGlvbnModGhpcy5jb250ZW50LmdldENvbmRpdGlvbnMoKSwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgcmV0dXJucyBhbGwgdGhlIGZpbHRlciB2YWx1ZXMgdGhhdCBhcmUgc2V0IGluIHRoZSBmaWx0ZXIgYmFyLCBpbmNsdWRpbmcgdGhlIHRleHQgZnJvbSB0aGUgc2VhcmNoIGZpZWxkICh3aXRoICRzZWFyY2ggYXMgdGhlIHByb3BlcnR5IG5hbWUpLiBIb3dldmVyLCBpdCBkb2Vzbid0IHJldHVybiBhbnkgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiB0aGF0IHVzZXMgYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIGEge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldFNlbGVjdGlvblZhcmlhbnQoKTogUHJvbWlzZTxTZWxlY3Rpb25WYXJpYW50PiB7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGF3YWl0IHN0YXRlSGVscGVyLmdldFNlbGVjdGlvblZhcmlhbnQodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG5cdFx0aWYgKGNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXI/LmdldFZpZXcoKSxcblx0XHRcdFx0YXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpLFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudD8uZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0ID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCh0aGlzLm1ldGFQYXRoKTtcblx0XHRcdGlmIChkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSkge1xuXHRcdFx0XHRjb25zdCBzQ29udGV4dFVybCA9XG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgJiZcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZT8uY29uc3RydWN0Q29udGV4dFVybChkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSwgdmlldy5nZXRNb2RlbCgpKTtcblx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5zZXRGaWx0ZXJDb250ZXh0VXJsKHNDb250ZXh0VXJsKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIG1hbmRhdG9yeSBmaWx0ZXIgcHJvcGVydHkgbmFtZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIG1hbmRhdG9yeSBmaWx0ZXIgcHJvcGVydHkgbmFtZXNcblx0ICovXG5cdGdldE1hbmRhdG9yeUZpbHRlclByb3BlcnR5TmFtZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiAodGhpcy5jb250ZW50LmdldFByb3BlcnR5SW5mb1NldCgpIGFzIENvbnRyb2xQcm9wZXJ0eUluZm9bXSlcblx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKGZpbHRlclByb3ApIHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlclByb3AucmVxdWlyZWQ7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChmdW5jdGlvbiAocmVxdWlyZWRQcm9wKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFByb3AuY29uZGl0aW9uUGF0aDtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlsdGVyIGJhciBwYXJhbWV0ZXJzIGZvciBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cblx0ICogQHJldHVybnMgQXJyYXkgb2YgcGFyYW1ldGVycyBjb25maWd1cmVkIGluIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlXG5cdCAqL1xuXG5cdGdldFBhcmFtZXRlcnMoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZmlsdGVyQmFyLmRhdGEoXCJwYXJhbWV0ZXJzXCIpO1xuXHRcdGlmIChwYXJhbWV0ZXJzKSB7XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSA/IHBhcmFtZXRlcnMgOiBKU09OLnBhcnNlKHBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHRnZXRWYXJpYW50KCk6IFZhcmlhbnREYXRhIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY3VycmVudFZhcmlhbnQ7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhcmlhbnRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCIkRmxleFZhcmlhbnRzXCIpIGFzIFZhcmlhbnRNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHZhcmlhbnRCYWNrUmVmZXJlbmNlID0gdGhpcy5jb250ZW50LmdldFZhcmlhbnRCYWNrcmVmZXJlbmNlKCk7XG5cblx0XHRcdGlmICh2YXJpYW50TW9kZWwgJiYgdmFyaWFudEJhY2tSZWZlcmVuY2UpIHtcblx0XHRcdFx0Y3VycmVudFZhcmlhbnQgPSB2YXJpYW50TW9kZWwuZ2V0VmFyaWFudCh2YXJpYW50TW9kZWwuZ2V0Q3VycmVudFZhcmlhbnRSZWZlcmVuY2UodmFyaWFudEJhY2tSZWZlcmVuY2UpKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuZGVidWcoXCJDb3VsZG4ndCBmZXRjaCB2YXJpYW50IFwiLCBlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBjdXJyZW50VmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBvciBoaWRlcyBhbnkgZmlsdGVyIGZpZWxkIGZyb20gdGhlIGZpbHRlciBiYXIuXG5cdCAqIFRoZSBwcm9wZXJ0eSB3aWxsIG5vdCBiZSBoaWRkZW4gaW5zaWRlIHRoZSBhZGFwdGF0aW9uIGRpYWxvZyBhbmQgbWF5IGJlIHJlLWFkZGVkLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gdmlzaWJsZSBXaGV0aGVyIGl0IHNob3VsZCBiZSBzaG93biBvciBoaWRkZW5cblx0ICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIG9uY2UgdGhlIGNoYW5nZSBpbiB2aXNpYmlsaXR5IHdhcyBhcHBsaWVkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldEZpbHRlckZpZWxkVmlzaWJsZShjb25kaXRpb25QYXRoOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCwgeyBpdGVtczogW3sgbmFtZTogY29uZGl0aW9uUGF0aCwgdmlzaWJsZSB9XSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGZpZWxkLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZpbHRlciBmaWVsZCBpcyB2aXNpYmxlIG9yIG5vdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZSA9IGF3YWl0IFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50KTtcblx0XHRyZXR1cm4gISFzdGF0ZS5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbmRpdGlvblBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUge0BsaW5rIHNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudH0gY29udHJvbCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbHRlciBiYXIuXG5cdCAqL1xuXHRnZXRWYXJpYW50TWFuYWdlbWVudCgpOiBWYXJpYW50TWFuYWdlbWVudCB7XG5cdFx0Y29uc3QgdmFyaWFudEJhY2tyZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblx0XHRpZiAodmFyaWFudEJhY2tyZWZlcmVuY2UpIHtcblx0XHRcdHJldHVybiBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZhcmlhbnRCYWNrcmVmZXJlbmNlKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBWYXJpYW50IGJhY2sgcmVmZXJlbmNlIG5vdCBkZWZpbmVkIG9uIHRoZSBmaWx0ZXIgYmFyICR7dGhpcy5pZH1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgdmFyaWFudCBiYWNrIHJlZmVyZW5jZSBhc3NvY2lhdGlvbiBmb3IgdGhpcyBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHZhcmlhbnQgVGhlIGBWYXJpYW50TWFuYWdlbWVudGAgaW5zdGFuY2UgdG8gc2V0IGFzIHRoZSBiYWNrIHJlZmVyZW5jZS5cblx0ICovXG5cdHNldFZhcmlhbnRCYWNrUmVmZXJlbmNlKHZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCBpc0xpdmVNb2RlID0gY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGlmICghaXNMaXZlTW9kZSkge1xuXHRcdFx0dGhpcy5jb250ZW50LnNldFZhcmlhbnRCYWNrcmVmZXJlbmNlKHZhcmlhbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgdmFyaWFudCBpbiB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIEtleSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhcmlhbnQuIEluIGNhc2UgdGhlIG1vZGVsIGlzIG5vdCB5ZXQgc2V0LCBgbnVsbGAgd2lsbCBiZSByZXR1cm5lZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0Q3VycmVudFZhcmlhbnRLZXkoKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG5ldyBzZWxlY3RlZCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHBhcmFtIGtleSBLZXkgb2YgdGhlIHZhcmlhbnQgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQuIElmIHRoZSBwYXNzZWQga2V5IGRvZXNuJ3QgaWRlbnRpZnkgYSB2YXJpYW50LCBpdCB3aWxsIGJlIGlnbm9yZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNldEN1cnJlbnRWYXJpYW50S2V5KGtleTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuc2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlbmFibGVtZW50IG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIGVuYWJsZWQgV2hldGhlciB0aGUgZmllbGQgc2hvdWxkIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHQodGhpcy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCkuc2V0RGF0YShcblx0XHRcdHtcblx0XHRcdFx0W3RoaXMuY29udGVudC5kYXRhKFwibG9jYWxJZFwiKV06IHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHM6IHsgW25hbWVdOiB7IGVkaXRNb2RlOiBlbmFibGVkID8gRmllbGRFZGl0TW9kZS5FZGl0YWJsZSA6IEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQgfSB9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWx0ZXJGaWVsZCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRGaWx0ZXJGaWVsZEVuYWJsZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShgLyR7dGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpfS9maWx0ZXJGaWVsZHMvJHtuYW1lfS9lZGl0TW9kZWApID09PVxuXHRcdFx0RmllbGRFZGl0TW9kZS5EaXNhYmxlZFxuXHRcdFx0PyBmYWxzZVxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnQge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSBzZWxlY3Rpb24gdmFyaWFudCB0byBhcHBseSB0byB0aGUgZmlsdGVyIGJhci5cblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgSWYgdHJ1ZSwgd2UgdHJ5IHRvIGZpbmQgdGhlIGFzc29jaWF0ZWQgVGV4dCB2YWx1ZSBmb3IgZWFjaCBwcm9wZXJ0eSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCAodG8gYXZvaWQgZmV0Y2hpbmcgaXQgZnJvbSB0aGUgc2VydmVyKVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmRpdGlvbnNcblx0ICovXG5cdGFzeW5jIGNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRwcmVmaWxsRGVzY3JpcHRpb25zOiBib29sZWFuXG5cdCk6IFByb21pc2U8U3RhdGVVdGlsRmlsdGVyPiB7XG5cdFx0cmV0dXJuIHN0YXRlSGVscGVyLmNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0XHR0aGlzLmNvbnRlbnQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0cHJlZmlsbERlc2NyaXB0aW9ucyxcblx0XHRcdHRoaXMuY29udGVudD8uZ2V0TW9kZWwoKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGFsbCBpbnB1dCB2YWx1ZXMgb2YgdmlzaWJsZSBmaWx0ZXIgZmllbGRzIGluIHRoZSBmaWx0ZXIgYmFyIHdpdGggZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRvIGNsZWFyIEVkaXQgRmlsdGVyIG9yIG5vdC5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBmaWx0ZXIgZmllbGRcblx0ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZmlsdGVyaW5nIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNsZWFyRWRpdEZpbHRlciBXaGV0aGVyIHRvIGNsZWFyIHRoZSBlZGl0IGZpbHRlciBvciBsZXQgaXQgYmUgZGVmYXVsdCB2YWx1ZSAnQWxsJyBpbnN0ZWFkXG5cdCAqL1xuXHRhc3luYyBfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXI6IEZpbHRlckJhciwgb3B0aW9ucz86IHsgY2xlYXJFZGl0RmlsdGVyOiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCBzdGF0ZUhlbHBlci5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXIsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIHRoZSBmaWx0ZXIgYmFyLiBOb3RlOiBzZXRTZWxlY3Rpb25WYXJpYW50IHdpbGwgY2xlYXIgZXhpc3RpbmcgZmlsdGVycyBhbmQgdGhlbiBhcHBseSB0aGUgU2VsZWN0aW9uVmFyaWFudCB2YWx1ZXMuXG5cdCAqIE5vdGU6IFRoaXMgbWV0aG9kIGNhbm5vdCBzZXQgdGhlIHNlYXJjaCBmaWVsZCB0ZXh0IG9yIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgcmVsaWVzIG9uIGEgY3VzdG9tIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBUaGUge0BsaW5rIHNhcC5mZS5uYXZpZ2F0aW9uLlNlbGVjdGlvblZhcmlhbnR9IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBwcmVmaWxsRGVzY3JpcHRpb25zIE9wdGlvbmFsLiBJZiB0cnVlLCB3ZSB3aWxsIHVzZSB0aGUgYXNzb2NpYXRlZCB0ZXh0IHByb3BlcnR5IHZhbHVlcyAoaWYgdGhleSdyZSBhdmFpbGFibGUgaW4gdGhlIHNlbGVjdGlvblZhcmlhbnQpIHRvIGRpc3BsYXkgdGhlIGZpbHRlciB2YWx1ZSBkZXNjcmlwdGlvbnMsIGluc3RlYWQgb2YgbG9hZGluZyB0aGVtIGZyb20gdGhlIGJhY2tlbmRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0U2VsZWN0aW9uVmFyaWFudChzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCBwcmVmaWxsRGVzY3JpcHRpb25zID0gZmFsc2UpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50ICYmIGNvbnRlbnQ/LmdldExpdmVNb2RlPy4oKTtcblx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0Y29udGVudC5zZXRTdXNwZW5kU2VsZWN0aW9uKHRydWUpO1xuXHRcdH1cblx0XHRsZXQgcmV0OiB1bmtub3duO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXQgPSBhd2FpdCBzdGF0ZUhlbHBlci5zZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sKHRoaXMuZ2V0Q29udGVudCgpLCBzZWxlY3Rpb25WYXJpYW50LCBwcmVmaWxsRGVzY3JpcHRpb25zKTtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEJ1aWxkaW5nYmxvY2sgOiBGaWx0ZXJCYXIgOiAke21lc3NhZ2V9YCk7XG5cdFx0XHR0aHJvdyBFcnJvcihtZXNzYWdlKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKGlzTGl2ZU1vZGUpIHtcblx0XHRcdFx0Y29udGVudC5zZXRTdXNwZW5kU2VsZWN0aW9uKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZSB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQmFyQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStDQTtFQUFBLElBQ01BLGtCQUFrQjtJQUt2QixTQUFBQSxtQkFBNkJDLFlBQTBCLEVBQUU7TUFBQSxLQUpqREMsa0JBQWtCLEdBQUcsQ0FBQztNQUFBLEtBRXRCQyxtQkFBbUIsR0FBRyxDQUFDO01BQUEsS0FFRkYsWUFBMEIsR0FBMUJBLFlBQTBCO0lBQUc7SUFBQyxJQUFBRyxNQUFBLEdBQUFKLGtCQUFBLENBQUFLLFNBQUE7SUFBQUQsTUFBQSxDQUUzREUsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ0MsTUFBZSxFQUFRO01BQ3ZDLElBQUlBLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxD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
1003
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWx0ZXJCYXJUZWxlbWV0cnkiLCJmaWx0ZXJCYXJBUEkiLCJjb3VudEZpbHRlckFjdGlvbnMiLCJjb3VudFZhcmlhbnRGaWx0ZXJzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25GaWx0ZXJzQ2hhbmdlZCIsInJlYXNvbiIsIm9uU2VhcmNoIiwiZXZlbnRQYXJhbWV0ZXJzIiwiY29uZGl0aW9ucyIsImZpbHRlck5hbWVzIiwiZ2V0RmlsdGVyTmFtZXNGcm9tQ29uZGl0aW9ucyIsImdldFBhZ2VDb250cm9sbGVyIiwidGVsZW1ldHJ5Iiwic3RvcmVBY3Rpb24iLCJ0eXBlIiwicGFyYW1ldGVycyIsImNvdW50RmlsdGVycyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ2YXJpYW50TGF5ZXIiLCJnZXRWYXJpYW50IiwibGF5ZXIiLCJhdXRvTG9hZCIsInNlYXJjaFVzZWQiLCIkc2VhcmNoIiwiZm9yRWFjaCIsImNvbmRpdGlvbiIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkRJU1BMQVlfQ1VSUkVOQ1lfUFJPUEVSVFlfTkFNRSIsIlBfRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FIiwiRmlsdGVyQmFyQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwicmV0dXJuVHlwZXMiLCJfZGVjMiIsIm1peGluIiwiRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyIiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiZGVmYXVsdFZhbHVlIiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsIl9kZWMxMSIsImV2ZW50IiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwieG1sRXZlbnRIYW5kbGVyIiwiX2RlYzE3IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9NYWNyb0FQSSIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiaW5pdGlhbENvbnRyb2xTdGF0ZSIsIl9pbml0aWFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZUtlZXBlciIsIl9iU2VhcmNoVHJpZ2dlcmVkIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJhdHRhY2hTdGF0ZUNoYW5nZUhhbmRsZXIiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90bzIiLCJ3YWl0Rm9ySW5pdGlhbFN0YXRlIiwicHJvbWlzZSIsImdldENvbnRyb2xTdGF0ZSIsImNvbnRyb2xTdGF0ZSIsImZ1bGxTdGF0ZSIsImluaXRpYWxTdGF0ZSIsImlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCIsIm5hdmlnYXRpb25UeXBlIiwiY29udHJvbGxlciIsInZpZXciLCJnZXRWaWV3Iiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsImJ5SWQiLCJjdXJyZW50VmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiTmF2VHlwZSIsInhBcHBTdGF0ZSIsImluaXRpYWxMb2FkIiwiSW5pdGlhbExvYWRNb2RlIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9nZXRGaWx0ZXJCYXJWTSIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJfYXBwbHlTZWxlY3Rpb25WYXJpYW50IiwibmF2aWdhdGlvblBhcmFtZXRlciIsImZpbHRlclZhcmlhbnRBcHBsaWVkIiwiZmlsdGVyQmFyIiwiZ2V0Q29udGVudCIsInNlbGVjdGlvblZhcmlhbnQiLCJzdiIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInN2RGVmYXVsdHMiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvdWxkQXBwbHlBcHBTdGF0ZSIsIl9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlIiwiX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWIiwic3ZEZWZhdWx0c0FyZVByZXNlbnQiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsInN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IiwiZ2V0RGVmYXVsdFZhcmlhbnRLZXkiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJ1c2VGTFBEZWZhdWx0VmFsdWVzIiwiZ2V0UGFyZW50Iiwic3ZUb1NldCIsIl9nZXRBZGp1c3RlZFNWIiwic2V0U2VsZWN0aW9uVmFyaWFudCIsIl9lbmFibGVGaWx0ZXJCYXIiLCJmaWx0ZXJCYXJDb250cm9sIiwicHJldmVudEluaXRpYWxTZWFyY2giLCJmbk9uU2VhcmNoIiwiZ2V0U3VzcGVuZFNlbGVjdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsImVuYWJsZVJlcXVlc3RzIiwiYXBwU3RhdGVTViIsImFkanVzdGVkU1YiLCJTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OT2JqZWN0IiwiYWxyZWFkeUFwcGxpZWRTViIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJhcHBsaWVkU2VsT3B0TmFtZXMiLCJyZWR1Y2UiLCJzdkNvcHkiLCJzZWxPcHRpb25OYW1lIiwic3ZTZWxPcHRzIiwiZ2V0U2VsZWN0T3B0aW9uIiwic2VsZWN0T3B0aW9ucyIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJfcHJldmVudEluaXRpYWxTZWFyY2giLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsIm9DdXJyZW50VmFyaWFudCIsImZpbmQiLCJpdGVtIiwiZ2V0S2V5IiwiZXhlY3V0ZU9uU2VsZWN0IiwiaXNFbXB0eSIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImdldERpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSIsImRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5IiwiX2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkIiwic3ZPcHRpb25zIiwiZGVmYXVsdFNWT3B0aW9ucyIsImRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMiLCJub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic2lnbiIsIm9wdGlvbiIsImxvdyIsImhpZ2giLCJhZGRTZWxlY3RPcHRpb24iLCJpc1BhcmFtZXRlcml6ZWQiLCJzdGFydGluZ0VudGl0eVNldCIsImVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJlbnRpdHlQcm9wZXJ0aWVzIiwic29tZSIsInBhcmFtZXRlciIsIm5hbWUiLCJfdHlwZSIsInVuZGVmaW5lZCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsInJlcXVpcmVkUHJvcGVydHkiLCJ2YWx1ZSIsInJlcVN0ZFZhcmlhbnQiLCJ2YXJpYW50S2V5IiwiZ2V0SWQiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJQYWdlIiwiZ2V0Q29udHJvbGxlciIsIk5vbmUiLCJoYW5kbGVWYXJpYW50SWRQYXNzZWRWaWFVUkxQYXJhbXMiLCJvVXJsUGFyYW1zIiwiYVBhZ2VWYXJpYW50SWQiLCJhRmlsdGVyQmFyVmFyaWFudElkIiwiYVRhYmxlVmFyaWFudElkIiwiYUNoYXJ0VmFyaWFudElkIiwib1ZhcmlhbnRJRHMiLCJzUGFnZVZhcmlhbnRJZCIsInNGaWx0ZXJCYXJWYXJpYW50SWQiLCJzVGFibGVWYXJpYW50SWQiLCJzQ2hhcnRWYXJpYW50SWQiLCJfaGFuZGxlQ29udHJvbFZhcmlhbnRJZCIsIm9WTSIsIm9WaWV3IiwiYVByb21pc2VzIiwic1ZhcmlhbnRNYW5hZ2VtZW50IiwiX2hhbmRsZVBhZ2VWYXJpYW50SWQiLCJfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZCIsImFsbCIsIm9WYXJpYW50IiwiX2ZpbmRBbmRQdXNoVmFyaWFudFRvUHJvbWlzZSIsInNWYXJpYW50SWQiLCJiRmlsdGVyVmFyaWFudEFwcGxpZWQiLCJrZXkiLCJwdXNoIiwiX2FwcGx5Q29udHJvbFZhcmlhbnQiLCJzVmFyaWFudElEIiwiYXJndW1lbnRzIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwidGhlbiIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJTdGF0ZVV0aWwiLCJkZXRhY2hTdGF0ZUNoYW5nZSIsInN0YXRlQ2hhbmdlSGFuZGxlciIsImF0dGFjaFN0YXRlQ2hhbmdlIiwib0V2ZW50IiwiY29udHJvbCIsImdldFBhcmFtZXRlciIsImlzQSIsImhhbmRsZVN0YXRlQ2hhbmdlIiwiaGFuZGxlU2VhcmNoIiwib0ZpbHRlckJhciIsImdldFNvdXJjZSIsImdldFBhcmFtZXRlcnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwicHJlcGFyZWRFdmVudFBhcmFtZXRlcnMiLCJfcHJlcGFyZUV2ZW50UGFyYW1ldGVycyIsImZpcmVFdmVudCIsIm1lcmdlIiwiaGFuZGxlRmlsdGVyQ2hhbmdlZCIsIm9FdmVudFBhcmFtZXRlcnMiLCJvQ29uZGl0aW9ucyIsIl9nZXRGaWx0ZXJCYXJSZWFzb24iLCJfc1JlYXNvbiIsImZpbHRlcnMiLCJzZWFyY2giLCJGaWx0ZXJVdGlscyIsImdldEZpbHRlcnMiLCJzZXRGaWx0ZXJWYWx1ZXMiLCJzQ29uZGl0aW9uUGF0aCIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJjb250ZW50IiwiZ2V0QWN0aXZlRmlsdGVyc1RleHQiLCJnZXRBc3NpZ25lZEZpbHRlcnNUZXh0IiwiZmlsdGVyc1RleHQiLCJ0cmlnZ2VyU2VhcmNoIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJpc1NlbWFudGljRGF0ZUZpbHRlckFwcGxpZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJoYXNTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInN0YXRlSGVscGVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsInRhcmdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJnZXRNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0eU5hbWVzIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiZmlsdGVyUHJvcCIsInJlcXVpcmVkIiwibWFwIiwicmVxdWlyZWRQcm9wIiwiY29uZGl0aW9uUGF0aCIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJKU09OIiwicGFyc2UiLCJjdXJyZW50VmFyaWFudCIsInZhcmlhbnRNb2RlbCIsInZhcmlhbnRCYWNrUmVmZXJlbmNlIiwiZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJnZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSIsImUiLCJkZWJ1ZyIsInNldEZpbHRlckZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJhcHBseUV4dGVybmFsU3RhdGUiLCJpdGVtcyIsImdldEZpbHRlckZpZWxkVmlzaWJsZSIsInN0YXRlIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJ2YXJpYW50QmFja3JlZmVyZW5jZSIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlkIiwic2V0VmFyaWFudEJhY2tSZWZlcmVuY2UiLCJ2YXJpYW50IiwiaXNMaXZlTW9kZSIsImdldExpdmVNb2RlIiwic2V0VmFyaWFudEJhY2tyZWZlcmVuY2UiLCJzZXRDdXJyZW50VmFyaWFudEtleSIsInNldEZpbHRlckZpZWxkRW5hYmxlZCIsImVuYWJsZWQiLCJzZXREYXRhIiwiZmlsdGVyRmllbGRzIiwiZWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNhYmxlZCIsImdldEZpbHRlckZpZWxkRW5hYmxlZCIsImdldFByb3BlcnR5IiwiY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyIsInByZWZpbGxEZXNjcmlwdGlvbnMiLCJfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyIsIm9wdGlvbnMiLCJyZXN1bHQiLCJzZXRTZWxlY3Rpb25WYXJpYW50VG9NZGNDb250cm9sIiwiYXBwbHlTdGF0ZVJlc3VsdCIsImRpZmZTdGF0ZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiZ2V0Q29uZGl0aW9uUGF0aCIsInByb3BlcnR5UGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93RmlsdGVyRmllbGQiLCJ0YXJnZXRGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsImlucHV0VmFsdWUiLCJyZWplY3QiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckl0ZW1zIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWx1ZUhlbHAiLCJnZXRWYWx1ZUhlbHAiLCJfb0ZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJvbmZvY3VzaW4iLCJqUXVlcnkiLCJFdmVudCIsInNldFRpbWVvdXQiLCJnZXRBZ2dyZWdhdGlvbiIsImZpcmVWYWx1ZUhlbHBSZXF1ZXN0IiwiZnJvbUtleWJvYXJkIiwiX3VzZXJJbnB1dFZhbHVlIiwiZ2V0Q29sbGFwc2VkRmlsdGVyc1RleHQiLCJNYWNyb0FQSSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBtaXhpbiwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBMZWdhY3lGaWx0ZXJCYXJTdGF0ZSwgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHsgSW5pdGlhbExvYWRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZGMvYWRhcHRlci9TdGF0ZUhlbHBlclwiO1xuaW1wb3J0IHN0YXRlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbFN0YXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB7IE5hdlR5cGUgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIExpc3RSZXBvcnRDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgSW5wdXQkVmFsdWVIZWxwUmVxdWVzdEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIEV2ZW50LCBkZWZhdWx0IGFzIFVJNUV2ZW50IH0gZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TW9kZWwgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmFyaWFudERhdGEgfSBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWYWx1ZUhlbHAgZnJvbSBcInNhcC91aS9tZGMvVmFsdWVIZWxwXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyQmFyQmFzZSRTZWFyY2hFdmVudCB9IGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlciBhcyBTdGF0ZVV0aWxGaWx0ZXIgfSBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNZXRhTW9kZWwsIGRlZmF1bHQgYXMgT0RhdGFNZXRhTW9kZWwgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgalF1ZXJ5IGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9qcXVlcnlcIjtcbmltcG9ydCBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIgZnJvbSBcIi4vbWl4aW4vRmlsdGVyQmFyQVBJU3RhdGVIYW5kbGVyXCI7XG5cbi8vIFRyYWNrIHRlbGVtZXRyeSBjb250ZW50IGZvciB0aGUgZmlsdGVyQmFyXG5jbGFzcyBGaWx0ZXJCYXJUZWxlbWV0cnkge1xuXHRwcml2YXRlIGNvdW50RmlsdGVyQWN0aW9ucyA9IDA7XG5cblx0cHJpdmF0ZSBjb3VudFZhcmlhbnRGaWx0ZXJzID0gMDtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpbHRlckJhckFQSTogRmlsdGVyQmFyQVBJKSB7fVxuXG5cdG9uRmlsdGVyc0NoYW5nZWQocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHJlYXNvbiA9PT0gXCJWYXJpYW50XCIpIHtcblx0XHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycysrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvdW50RmlsdGVyQWN0aW9ucysrO1xuXHRcdH1cblx0fVxuXG5cdG9uU2VhcmNoKGV2ZW50UGFyYW1ldGVyczogeyByZWFzb24/OiBzdHJpbmcgfSwgY29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyTmFtZXMgPSB0aGlzLmdldEZpbHRlck5hbWVzRnJvbUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cdFx0dGhpcy5maWx0ZXJCYXJBUEkuZ2V0UGFnZUNvbnRyb2xsZXIoKT8udGVsZW1ldHJ5LnN0b3JlQWN0aW9uKHtcblx0XHRcdHR5cGU6IFwiRkUuRmlsdGVyQmFyU2VhcmNoXCIsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdGNvdW50RmlsdGVyQWN0aW9uczogdGhpcy5jb3VudEZpbHRlckFjdGlvbnMsIC8vICBIb3cgbWFueSBmaWx0ZXJDaGFuZ2VkIGFjdGlvbnMgYXJlIHBlcmZvcm1lZFxuXHRcdFx0XHRjb3VudEZpbHRlcnM6IE9iamVjdC5rZXlzKGNvbmRpdGlvbnMpLmxlbmd0aCwgLy8gSG93IG1hbnkgZGlmZmVyZW50IGZpbHRlcnMgYXJlIGFwcGxpZWRcblx0XHRcdFx0Y291bnRWYXJpYW50RmlsdGVyczogdGhpcy5jb3VudFZhcmlhbnRGaWx0ZXJzLCAvLyBIb3cgbWFueSBmaWx0ZXIgYmVsb25nIHRvIGEgdmFyaWFudFxuXHRcdFx0XHR2YXJpYW50TGF5ZXI6IHRoaXMuZmlsdGVyQmFyQVBJLmdldFZhcmlhbnQoKT8ubGF5ZXIgPz8gXCJOb25lXCIsIC8vIHwgXCJTQVBcIiB8IFwiQ3VzdG9tXCI7IC8vIFR5cGUgb2YgdmFyaWFudFxuXHRcdFx0XHRhdXRvTG9hZDogZXZlbnRQYXJhbWV0ZXJzLnJlYXNvbiA9PT0gXCJWYXJpYW50XCIsIC8vIElzIHRoZSBmaWx0ZXIgYXV0b21hdGljYWxseSBleGVjdXRlZFxuXHRcdFx0XHRzZWFyY2hVc2VkOiBjb25kaXRpb25zLiRzZWFyY2ggPyAhIU9iamVjdC5rZXlzKGNvbmRpdGlvbnMuJHNlYXJjaCkubGVuZ3RoIDogZmFsc2UsIC8vIFdhcyB0aGUgc2VhcmNoIGZpZWxkIGluIHRoZSBmaWx0ZXJiYXIgdXNlZD9cblx0XHRcdFx0ZmlsdGVyTmFtZXM6IGZpbHRlck5hbWVzIC8vIFByb3BlcnR5IG5hbWVzIG9mIHRoZSBmaWx0ZXJzXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly8gUmVzZXQgdGhlIGNvdW50XG5cdFx0dGhpcy5jb3VudEZpbHRlckFjdGlvbnMgPSAwO1xuXHRcdHRoaXMuY291bnRWYXJpYW50RmlsdGVycyA9IDA7XG5cdH1cblxuXHRnZXRGaWx0ZXJOYW1lc0Zyb21Db25kaXRpb25zKGNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IHN0cmluZyB7XG5cdFx0bGV0IGZpbHRlck5hbWVzID0gXCJcIjtcblx0XHRPYmplY3Qua2V5cyhjb25kaXRpb25zKS5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGlmIChjb25kaXRpb24gIT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0ZmlsdGVyTmFtZXMgKz0gY29uZGl0aW9uICsgXCI7XCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZpbHRlck5hbWVzO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlckJhclN0YXRlID0ge1xuXHRpbm5lclN0YXRlPzoge1xuXHRcdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRpbml0aWFsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0XHRmdWxsU3RhdGU/OiBMZWdhY3lGaWx0ZXJCYXJTdGF0ZTtcblx0fTtcbn07XG5cbnR5cGUgVmFyaWFudElEcyA9IHtcblx0c1BhZ2VWYXJpYW50SWQ6IHN0cmluZztcblx0c0ZpbHRlckJhclZhcmlhbnRJZDogc3RyaW5nO1xuXHRzVGFibGVWYXJpYW50SWQ6IHN0cmluZztcblx0c0NoYXJ0VmFyaWFudElkOiBzdHJpbmc7XG59O1xuXG50eXBlIFZhcmlhbnRPYmplY3QgPSB7XG5cdGF1dGhvcjogc3RyaW5nO1xuXHRjaGFuZ2U6IGJvb2xlYW47XG5cdGNvbnRleHRzOiBvYmplY3Q7XG5cdGV4ZWN1dGVPblNlbGVjdDogYm9vbGVhbjtcblx0ZmF2b3JpdGU6IGJvb2xlYW47XG5cdGtleTogc3RyaW5nO1xuXHRvcmlnaW5hbENvbnRleHRzOiBvYmplY3Q7XG5cdG9yaWdpbmFsRXhlY3V0ZU9uU2VsZWN0OiBib29sZWFuO1xuXHRvcmlnaW5hbEZhdm9yaXRlOiBib29sZWFuO1xuXHRvcmlnaW5hbFRpdGxlOiBzdHJpbmc7XG5cdG9yaWdpbmFsVmlzaWJsZTogYm9vbGVhbjtcblx0cmVtb3ZlOiBib29sZWFuO1xuXHRyZW5hbWU6IGJvb2xlYW47XG5cdHNoYXJpbmc6IHN0cmluZztcblx0dGl0bGU6IHN0cmluZztcblx0dmlzaWJsZTogYm9vbGVhbjtcbn07XG5cbmVudW0gVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0Q29udHJvbCA9IFwiQ29udHJvbFwiLFxuXHRQYWdlID0gXCJQYWdlXCIsXG5cdE5vbmUgPSBcIk5vbmVcIlxufVxuXG5jb25zdCBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIkRpc3BsYXlDdXJyZW5jeVwiO1xuY29uc3QgUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgPSBcIlBfRGlzcGxheUN1cnJlbmN5XCI7XG5cbnR5cGUgTFJWaWV3RGF0YSA9IHtcblx0Y29udHJvbENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50PzogYm9vbGVhbiB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBGaWx0ZXJCYXJBUEkgZXh0ZW5kcyBGaWx0ZXJCYXJBUElTdGF0ZUhhbmRsZXIge31cblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGaWx0ZXJCYXIgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvYnVpbGRpbmdCbG9ja3MvZmlsdGVyQmFyL2ZpbHRlckJhckRlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogPGJyPlxuICogVXN1YWxseSwgYSBTZWxlY3Rpb25GaWVsZHMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZC5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZpbHRlckJhciBpZD1cIk15RmlsdGVyQmFyXCIgbWV0YVBhdGg9XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIgLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuRmlsdGVyQmFyXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiLCB7XG5cdHJldHVyblR5cGVzOiBbXCJzYXAudWkuY29yZS5Db250cm9sXCJdXG59KVxuQG1peGluKEZpbHRlckJhckFQSVN0YXRlSGFuZGxlcilcbmNsYXNzIEZpbHRlckJhckFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0aW5pdGlhbENvbnRyb2xTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRfaW5pdGlhbFN0YXRlUHJvbWlzZTogUHJvbWlzZUtlZXBlcjx2b2lkPiA9IG5ldyBQcm9taXNlS2VlcGVyKCk7XG5cblx0X2JTZWFyY2hUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRhc3luYyB3YWl0Rm9ySW5pdGlhbFN0YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9pbml0aWFsU3RhdGVQcm9taXNlLnByb21pc2U7XG5cdH1cblxuXHRnZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlIGFzIG9iamVjdCxcblx0XHRcdFx0aW5pdGlhbFN0YXRlOiBpbml0aWFsQ29udHJvbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgU2VhcmNoIGNhbiBiZSB0cmlnZ2VyZWQgYXQgaW5pdGlhbCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiBvciBub3QuXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIFR5cGUgZHVyaW5nIHRoZSBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcmV0dXJucyBBIEJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBTZWFyY2ggY2FuIGJlIHRyaWdnZXJlZCBvciBub3Rcblx0ICovXG5cdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZChuYXZpZ2F0aW9uVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKSxcblx0XHRcdHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSBmYWxzZSxcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdC8vIERldGVybWluaW5nIHdoZXRoZXIgaXQncyBDb250cm9sIHZhcmlhbnRNYW5hZ2VtZW50IG9yIFBhZ2UgdmFyaWFudE1hbmFnZW1lbnRcblx0XHRpZiAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sKSB7XG5cdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9IGNvbnRyb2xsZXIuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKTtcblx0XHQvL1RoZSBjaGVjayBzaGFsbCBoYXBwZW4gZm9yICdpbnRpYWwgbG9hZCcgYW5kICdBcHBseSBBdXRvbWF0aWNhbGx5JyBmb3IgY29sbGFwc2luZyB0aGUgaGVhZGVyIG9yXG5cdFx0Ly8gYWx3YXlzIGJlIGNvbGxhcHNlZCBpZiBuYXZUeXBlIGlzIHhBcHBTdGF0ZVxuXHRcdC8vIGluaXRpYWxMb2FkIEF1dG8gb3IgRGlzYWJsZWRcblx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUueEFwcFN0YXRlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKHZhcmlhbnRNYW5hZ2VtZW50ICYmIHZpZXdEYXRhLmluaXRpYWxMb2FkICE9PSBJbml0aWFsTG9hZE1vZGUuRW5hYmxlZCkge1xuXHRcdFx0Ly8gSGVhZGVyIGlzIGNvbGxhcHNlZCBpZiBwcmVzZXQgZmlsdGVycyBhcmUgc2V0IGZvciBpbml0aWFsIGxvYWQgQXV0bywgSGVhZGVyIHNoYWxsIHJlbWFpbiBleHBhbmRlZCBpZiBpbml0aWFsIGxvYWQgaXMgQXV0byB3aXRob3V0IHByZXNldCBmaWx0ZXJzIG9yIGludGlhbCBsb2FkIGlzIGRpc2FibGVkXG5cdFx0XHRpZiAoY29udHJvbGxlci5fc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2godGhpcy5fZ2V0RmlsdGVyQmFyVk0odmlldykpKSB7XG5cdFx0XHRcdGlzU2VhcmNoVHJpZ2dlcmVkQnlJbml0aWFsTG9hZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGluaXRpYWxMb2FkIEVuYWJsZWRcblx0XHRlbHNlIGlmIChcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ICYmXG5cdFx0XHR2aWV3RGF0YS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQgJiZcblx0XHRcdGNvbnRyb2xsZXIuX2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudCh2YXJpYW50TWFuYWdlbWVudCwgY3VycmVudFZhcmlhbnRLZXkpXG5cdFx0KSB7XG5cdFx0XHRpc1NlYXJjaFRyaWdnZXJlZEJ5SW5pdGlhbExvYWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNTZWFyY2hUcmlnZ2VyZWRCeUluaXRpYWxMb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IFNlbGVjdGlvbiBWYXJpYW50IGZyb20gTmF2aWdhdGlvbiBQYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXIgU2VsZWN0aW9uIFZhcmlhbnQgdG8gYXBwbHkgZnJvbSBhcHBTdGF0ZVxuXHQgKiBAcGFyYW0gZmlsdGVyVmFyaWFudEFwcGxpZWQgSXMgYSBmaWx0ZXIgdmFyaWFudCBhbGFyZWFkeSBhcHBsaWVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKi9cblx0YXN5bmMgX2FwcGx5U2VsZWN0aW9uVmFyaWFudCh2aWV3OiBWaWV3LCBuYXZpZ2F0aW9uUGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBmaWx0ZXJWYXJpYW50QXBwbGllZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuZ2V0Q29udGVudCgpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCB7IHNlbGVjdGlvblZhcmlhbnQ6IHN2LCBzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IHN2RGVmYXVsdHMsIHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gZmFsc2UgfSA9IG5hdmlnYXRpb25QYXJhbWV0ZXI7XG5cblx0XHRpZiAoIWZpbHRlckJhciB8fCAhc3YpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQgPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTSh2aWV3KSBhcyBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBzaG91bGRBcHBseUFwcFN0YXRlID0gYXdhaXQgdGhpcy5fYWN0aXZhdGVWYXJpYW50QW5kRGV0ZXJtaW5lQXBwbHlBcHBTdGF0ZShcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRmaWx0ZXJWYXJpYW50QXBwbGllZFxuXHRcdCk7XG5cdFx0aWYgKHNob3VsZEFwcGx5QXBwU3RhdGUpIHtcblx0XHRcdHRoaXMuX2FkZERlZmF1bHREaXNwbGF5Q3VycmVuY3lUb1NWKHZpZXcsIHN2LCBzdkRlZmF1bHRzKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdFx0Y29uc3Qgc3ZEZWZhdWx0c0FyZVByZXNlbnQgPSBzdkRlZmF1bHRzID8gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmxlbmd0aCA+IDAgOiBmYWxzZTtcblx0XHRcdGNvbnN0IHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50ID1cblx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQgJiYgdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRjb25zdCB1c2VGTFBEZWZhdWx0VmFsdWVzOiBib29sZWFuID0gc3ZEZWZhdWx0c0FyZVByZXNlbnQgJiYgKHN0ZFZhcmlhbnRJc0RlZmF1bHRWYXJpYW50IHx8ICF2YXJpYW50TWFuYWdlbWVudCk7XG5cblx0XHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0XHRsZXQgc3ZUb1NldDogU2VsZWN0aW9uVmFyaWFudCA9IHN2O1xuXHRcdFx0aWYgKGZpbHRlclZhcmlhbnRBcHBsaWVkIHx8IHVzZUZMUERlZmF1bHRWYWx1ZXMpIHtcblx0XHRcdFx0c3ZUb1NldCA9IGF3YWl0IHRoaXMuX2dldEFkanVzdGVkU1Yoc3YsIHVzZUZMUERlZmF1bHRWYWx1ZXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlckJhckFQSS5zZXRTZWxlY3Rpb25WYXJpYW50KHN2VG9TZXQsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdF9lbmFibGVGaWx0ZXJCYXIoZmlsdGVyQmFyQ29udHJvbDogRmlsdGVyQmFyLCBwcmV2ZW50SW5pdGlhbFNlYXJjaDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhckNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IGZuT25TZWFyY2ggPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIXByZXZlbnRJbml0aWFsU2VhcmNoO1xuXHRcdH07XG5cblx0XHQvLyByZXNldCB0aGUgc3VzcGVuZCBzZWxlY3Rpb24gb24gZmlsdGVyIGJhciB0byBhbGxvdyBsb2FkaW5nIG9mIGRhdGEgd2hlbiBuZWVkZWQgKHdhcyBzZXQgb24gTFIgSW5pdClcblx0XHRpZiAoZmlsdGVyQmFyQ29udHJvbC5nZXRTdXNwZW5kU2VsZWN0aW9uKCkpIHtcblx0XHRcdC8vIE9ubHkgaWYgc2VhcmNoIGlzIGZpcmVkIHdlIHNldCBfYlNlYXJjaFRyaWdnZXJlZC5cblx0XHRcdC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciBkdWUgdG8gcmVxdWlyZWQgZmlsdGVyZmllbGRzIGVtcHR5IG9yIG90aGVyIGlzc3VlcyB3ZSBza2lwIHNldHRpbmcgX2JTZWFyY2hUcmlnZ2VyZWQuXG5cdFx0XHRmaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnRPbmNlKFwic2VhcmNoXCIsIGZuT25TZWFyY2gpO1xuXHRcdFx0ZmlsdGVyQmFyQ29udHJvbC5lbmFibGVSZXF1ZXN0cyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gc2VhcmNoIG1pZ2h0IGFscmVhZHkgYmUgdHJpZ2dlcmVkLlxuXHRcdFx0Zm5PblNlYXJjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9nZXRBZGp1c3RlZFNWKGFwcFN0YXRlU1Y6IFNlbGVjdGlvblZhcmlhbnQsIHVzZUZMUERlZmF1bHRWYWx1ZXM6IGJvb2xlYW4pOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRsZXQgYWRqdXN0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KGFwcFN0YXRlU1YudG9KU09OT2JqZWN0KCkpO1xuXHRcdGNvbnN0IGFscmVhZHlBcHBsaWVkU1YgPSBhd2FpdCB0aGlzLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRjb25zdCBhcHBsaWVkU2VsT3B0TmFtZXMgPSBhbHJlYWR5QXBwbGllZFNWPy5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpIHx8IFtdO1xuXHRcdGlmIChhcHBsaWVkU2VsT3B0TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgbWVyZ2UgJ2FwcGxpZWQgU1YnIGFuZCAnYXBwU3RhdGUgU1YnIGJhc2VkIG9uICd1c2VGTFBEZWZhdWx0VmFsdWVzJy5cblx0XHRcdGFkanVzdGVkU1YgPSBhcHBsaWVkU2VsT3B0TmFtZXMucmVkdWNlKChzdkNvcHk6IFNlbGVjdGlvblZhcmlhbnQsIHNlbE9wdGlvbk5hbWUpID0+IHtcblx0XHRcdFx0Ly8gKGFwcFN0YXRlU1YgPSBhZGp1c3RlZFNWID0gc3ZDb3B5KVxuXHRcdFx0XHRjb25zdCBzdlNlbE9wdHMgPSBzdkNvcHkuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHQvLyBJZiB1c2VGTFBEZWZhdWx0VmFsdWVzID0gdHJ1ZSwgbWVhbnMgKGFwcFN0YXRlU1YgPSBzdkRlZmF1bHRzKVxuXHRcdFx0XHRpZiAoKHVzZUZMUERlZmF1bHRWYWx1ZXMgJiYgIXN2U2VsT3B0cz8ubGVuZ3RoKSB8fCAhdXNlRkxQRGVmYXVsdFZhbHVlcykge1xuXHRcdFx0XHRcdC8vIGlmIGRlZmF1bHQgU1YgbmVlZHMgdG8gYmUgdXNlZCwgdGhlbiBzZWxlY3Qgb3B0aW9ucyBmcm9tIGRlZmF1bHQgc2VsZWN0IG9wdGlvbnMgdGFrZSBwcmlvcml0eS5cblx0XHRcdFx0XHQvLyBlbHNlIHdlIG1lcmdlIGJvdGg6IGFscmVhZHkgYXBwbGllZCBTViBhbmQgU1YgZnJvbSBuYXZQYXJhbXMuXG5cdFx0XHRcdFx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IGFscmVhZHlBcHBsaWVkU1YuZ2V0U2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUpO1xuXHRcdFx0XHRcdHN2Q29weS5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbE9wdGlvbk5hbWUsIHNlbGVjdE9wdGlvbnMgfHwgW10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdkNvcHk7XG5cdFx0XHR9LCBhZGp1c3RlZFNWKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWRqdXN0ZWRTVjtcblx0fVxuXG5cdF9wcmV2ZW50SW5pdGlhbFNlYXJjaCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQpOiBib29sZWFuIHtcblx0XHRpZiAoIXZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gdmFyaWFudE1hbmFnZW1lbnQuZ2V0VmFyaWFudHMoKTtcblx0XHRjb25zdCBvQ3VycmVudFZhcmlhbnQgPSBhVmFyaWFudHMuZmluZChmdW5jdGlvbiAoaXRlbSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGl0ZW0uZ2V0S2V5KCkgPT09IHZhcmlhbnRNYW5hZ2VtZW50LmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuICFvQ3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBEaXNwbGF5Q3VycmVuY3kgdG8gU1YgaWYgaXQgaXMgbWFuZGF0b3J5IGFuZCBleGlzdHMgaW4gU1YgZGVmYXVsdHMuXG5cdCAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIExSIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHN2IFNlbGVjdGlvbiBWYXJpYW50IHRvIGFwcGx5XG5cdCAqIEBwYXJhbSBzdkRlZmF1bHRzIFNlbGVjdGlvbiBWYXJpYW50IGRlZmF1bHRzXG5cdCAqL1xuXHRfYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeVRvU1YodmlldzogVmlldywgc3Y6IFNlbGVjdGlvblZhcmlhbnQsIHN2RGVmYXVsdHM/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0aWYgKCFzdkRlZmF1bHRzIHx8IHN2RGVmYXVsdHM/LmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIExSVmlld0RhdGEsXG5cdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSB2aWV3RGF0YS5jb250ZXh0UGF0aCB8fCBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAsXG5cdFx0XHRtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0UGF0aCksXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPE1ldGFNb2RlbD4gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXG5cdFx0Ly8gZ2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lIGFscmVhZHkgYXBwbGllcyB0aGUgaXNQYXJhbWV0ZXJpemVkIGxvZ2ljXG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lID0gdGhpcy5nZXREaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSB0aGlzLl9jaGVja0lmRGlzcGxheUN1cnJlbmN5SXNSZXF1aXJlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRpZiAoIWRpc3BsYXlDdXJyZW5jeUlzTWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZPcHRpb25zID0gc3YuZ2V0U2VsZWN0T3B0aW9uKGRpc3BsYXlDdXJyZW5jeVByb3BlcnR5TmFtZSkgfHwgW10sXG5cdFx0XHRkZWZhdWx0U1ZPcHRpb25zID0gc3ZEZWZhdWx0cy5nZXRTZWxlY3RPcHRpb24oZGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKSB8fCBbXSxcblx0XHRcdGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMgPSBkZWZhdWx0U1ZPcHRpb25zLmxlbmd0aCA+IDAsXG5cdFx0XHRub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzID0gc3ZPcHRpb25zLmxlbmd0aCA9PT0gMDtcblxuXHRcdGlmIChub1NWRGlzcGxheUN1cnJlbmN5RXhpc3RzICYmIGRpc3BsYXlDdXJyZW5jeURlZmF1bHRFeGlzdHMpIHtcblx0XHRcdGNvbnN0IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiA9IGRlZmF1bHRTVk9wdGlvbnNbMF0sXG5cdFx0XHRcdHNpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdLFxuXHRcdFx0XHRvcHRpb24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJPcHRpb25cIl0sXG5cdFx0XHRcdGxvdyA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkxvd1wiXSxcblx0XHRcdFx0aGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cblx0XHRcdHN2LmFkZFNlbGVjdE9wdGlvbihkaXNwbGF5Q3VycmVuY3lQcm9wZXJ0eU5hbWUsIHNpZ24sIG9wdGlvbiwgbG93LCBoaWdoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGlzIHBhcmFtZXRlcml6ZWQuXG5cdCAqIExvb2tzIGZvciBhIFJlc3VsdENvbnRleHQgYW5ub3RhdGlvbiBpbiB0aGUgc3RhcnRpbmcgZW50aXR5J3MgdHlwZVxuXHQgKiBhbmQgZW5zdXJlcyB0aGVyZSdzIG5vIHRhcmdldCBlbnRpdHkgc2V0LlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgcGF0aCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCdzIHBhcmFtZXRlcml6ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHByaXZhdGUgaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIWRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkaXNwbGF5IGN1cnJlbmN5IHByb3BlcnR5IG5hbWUgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlJ3MgcGFyYW1ldGVyaXphdGlvbi5cblx0ICogVXNlcyB0aGUgaXNQYXJhbWV0ZXJpemVkIG1ldGhvZCB0byBkZWNpZGUgd2hpY2ggcHJvcGVydHkgbmFtZSB0byByZXR1cm4uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwcm9wcmlhdGUgZGlzcGxheSBjdXJyZW5jeSBwcm9wZXJ0eSBuYW1lLlxuXHQgKi9cblx0Z2V0RGlzcGxheUN1cnJlbmN5UHJvcGVydHlOYW1lKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpID8gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUUgOiBESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIERpc3BsYXlDdXJyZW5jeSBpcyBtYW5kYXRvcnkgZm9yIGZpbHRlcmluZy5cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcblx0ICogQHJldHVybnMgQm9vbGVhblxuXHQgKi9cblx0X2NoZWNrSWZEaXNwbGF5Q3VycmVuY3lJc1JlcXVpcmVkKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TWV0YU1vZGVsPik6IGJvb2xlYW4ge1xuXHRcdGxldCBkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuaXNQYXJhbWV0ZXJpemVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0XHRkaXNwbGF5Q3VycmVuY3lJc01hbmRhdG9yeSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoXG5cdFx0XHRcdChwYXJhbWV0ZXI6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwYXJhbWV0ZXIubmFtZSA9PT0gUF9ESVNQTEFZX0NVUlJFTkNZX1BST1BFUlRZX05BTUVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGVudGl0eVNldDogRW50aXR5U2V0IHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Ll90eXBlID09PSBcIkVudGl0eVNldFwiID8gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzID8/IFtdO1xuXHRcdFx0ZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnkgPSByZXF1aXJlZFByb3BlcnRpZXMuc29tZShcblx0XHRcdFx0KHJlcXVpcmVkUHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcmVxdWlyZWRQcm9wZXJ0eS52YWx1ZSA9PT0gRElTUExBWV9DVVJSRU5DWV9QUk9QRVJUWV9OQU1FXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheUN1cnJlbmN5SXNNYW5kYXRvcnk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGUgdmFyaWFudCBmcm9tIHZhcmlhbnQgbWFuYWdlbWVudCBhbmQgcmV0dXJuIGlmIGFwcFN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQuXG5cdCAqIEBwYXJhbSB2YXJpYW50TWFuYWdlbWVudCBWYXJpYW50TWFuYWdlbWVudCB1c2VkIGJ5IGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHJlcVN0ZFZhcmlhbnQgSWYgc3RhbmRhcmQgdmFyaWFudCBpcyByZXF1aXJlZCB0byBiZSB1c2VkXG5cdCAqIEBwYXJhbSBmaWx0ZXJWYXJpYW50QXBwbGllZCBJcyBhIGZpbHRlciB2YXJpYW50IGFscmVhZHkgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luY2hyb25vdXMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIF9hY3RpdmF0ZVZhcmlhbnRBbmREZXRlcm1pbmVBcHBseUFwcFN0YXRlKFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRyZXFTdGRWYXJpYW50OiBib29sZWFuLFxuXHRcdGZpbHRlclZhcmlhbnRBcHBsaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCAmJiAhZmlsdGVyVmFyaWFudEFwcGxpZWQpIHtcblx0XHRcdGxldCB2YXJpYW50S2V5ID0gcmVxU3RkVmFyaWFudCA/IHZhcmlhbnRNYW5hZ2VtZW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpIDogdmFyaWFudE1hbmFnZW1lbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKTtcblx0XHRcdGlmICh2YXJpYW50S2V5ID09PSBudWxsKSB7XG5cdFx0XHRcdHZhcmlhbnRLZXkgPSB2YXJpYW50TWFuYWdlbWVudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRlbGVtZW50OiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogdmFyaWFudEtleVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVxU3RkVmFyaWFudCB8fCB2YXJpYW50TWFuYWdlbWVudC5nZXREZWZhdWx0VmFyaWFudEtleSgpID09PSB2YXJpYW50TWFuYWdlbWVudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYXJpYW50IG1hbmFnZW1lbnQgdXNlZCBieSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gdmlldyBWaWV3IG9mIHRoZSBMUiBmaWx0ZXIgYmFyXG5cdCAqIEByZXR1cm5zIFZhcmlhbnRNYW5hZ2VtZW50IGlmIHVzZWRcblx0ICovXG5cdF9nZXRGaWx0ZXJCYXJWTSh2aWV3OiBWaWV3KTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBMUlZpZXdEYXRhO1xuXHRcdHN3aXRjaCAodmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLlBhZ2U6XG5cdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50ID0gdmlldy5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCA9ICh2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFudE1hbmFnZW1lbnQgYXMgVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcblx0YXN5bmMgaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zKG9VcmxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdLFxuXHRcdFx0YUNoYXJ0VmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS1jaGFydC12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQgfHwgYUNoYXJ0VmFyaWFudElkKSB7XG5cdFx0XHRvVmFyaWFudElEcyA9IHtcblx0XHRcdFx0c1BhZ2VWYXJpYW50SWQ6IGFQYWdlVmFyaWFudElkICYmIGFQYWdlVmFyaWFudElkWzBdLFxuXHRcdFx0XHRzRmlsdGVyQmFyVmFyaWFudElkOiBhRmlsdGVyQmFyVmFyaWFudElkICYmIGFGaWx0ZXJCYXJWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNUYWJsZVZhcmlhbnRJZDogYVRhYmxlVmFyaWFudElkICYmIGFUYWJsZVZhcmlhbnRJZFswXSxcblx0XHRcdFx0c0NoYXJ0VmFyaWFudElkOiBhQ2hhcnRWYXJpYW50SWQgJiYgYUNoYXJ0VmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEcyk7XG5cdH1cblxuXHRhc3luYyBfaGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudElEczogVmFyaWFudElEcyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGxldCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8Ym9vbGVhbj5bXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdFx0dGhpcy5faGFuZGxlUGFnZVZhcmlhbnRJZChvVmFyaWFudElEcywgb1ZNLCBhUHJvbWlzZXMpO1xuXHRcdH0gZWxzZSBpZiAob1ZhcmlhbnRJRHMgJiYgc1ZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0b1ZNID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sKCkhO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVGaWx0ZXJCYXJWYXJpYW50Q29udHJvbElkKG9WYXJpYW50SURzLCBvVk0sIGFQcm9taXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9XG5cblx0Lypcblx0ICogSGFuZGxlcyBwYWdlIGxldmVsIHZhcmlhbnQgYW5kIHBhc3NlcyB0aGUgdmFyaWFudCB0byB0aGUgZnVuY3Rpb24gdGhhdCBwdXNoZXMgdGhlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpbmF0SURzIGNvbnRhaW5zIGFuIG9iamVjdCBvZiBhbGwgdmFyaWFudCBJRHNcblx0ICogQHBhcmFtIG9WTSBjb250YWlucyB0aGUgdmFpcmFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHBhZ2UgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2hhbmRsZVBhZ2VWYXJpYW50SWQob1ZhcmlhbnRJRHM6IFZhcmlhbnRJRHMsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGFQcm9taXNlczogUHJvbWlzZTxib29sZWFuPltdKTogdm9pZCB7XG5cdFx0b1ZNLmdldFZhcmlhbnRzKCk/LmZvckVhY2goKG9WYXJpYW50OiBWYXJpYW50T2JqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkLCBvVk0sIGFQcm9taXNlcywgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKlxuXHQgKiBIYW5kbGVzIGNvbnRyb2wgbGV2ZWwgdmFyaWFudCBmb3IgZmlsdGVyIGJhciBhbmQgcGFzc2VzIHRoZSB2YXJpYW50IHRvIHRoZSBmdW5jdGlvbiB0aGF0IHB1c2hlcyB0aGUgcHJvbWlzZSB0byB0aGUgcHJvbWlzZSBhcnJheVxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZhcmluYXRJRHMgY29udGFpbnMgYW4gb2JqZWN0IG9mIGFsbCB2YXJpYW50IElEc1xuXHQgKiBAcGFyYW0gb1ZNIGNvbnRhaW5zIHRoZSB2YWlyYW50IG1hbmFnZW1lbnQgb2JqZWN0IGZvciB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIGFsbCBwcm9taXNlc1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHRfaGFuZGxlRmlsdGVyQmFyVmFyaWFudENvbnRyb2xJZChvVmFyaWFudElEczogVmFyaWFudElEcywgb1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgYVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10pOiB2b2lkIHtcblx0XHRpZiAob1ZNKSB7XG5cdFx0XHRvVk0uZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogVmFyaWFudE9iamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2Uob1ZhcmlhbnQsIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIG9WTSwgYVByb21pc2VzLCB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIE1hdGNoZXMgdGhlIHZhcmlhbnQgSUQgcHJvdmlkZWQgaW4gdGhlIHVybCB0byB0aGUgYXZhaWxhYmxlIHZhaXJhbnQgSURzIGFuZCBwdXNoZXMgdGhlIGFwcHJvcHJpYXRlIHByb21pc2UgdG8gdGhlIHByb21pc2UgYXJyYXlcblx0ICpcblx0ICogQHBhcmFtIG9WYXJpYW50IGlzIGFuIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB2YXJpYW50XG5cdCAqIEBwYXJhbSBzVmFyaWFudElkIGlzIHRoZSB2YXJpYW50IElEIHByb3ZpZGVkIGluIHRoZSB1cmxcblx0ICogQHBhcmFtIG9WTSBpcyB0aGUgdmFyaWFudCBtYW5hZ2VtZW50IG9iamVjdCBmb3IgdGhlIHNwZWNmaWMgdmFyaWFudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIGlzIGFuIGFycmF5IG9mIHByb21pc2VzXG5cdCAqIEBwYXJhbSBiRmlsdGVyVmFyaWFudEFwcGxpZWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIGlzIHNldCB0byB0dXJlIGluIGNhc2UgdGhlIGZpbHRlciB2YXJpYW50IGlzIGFwcGxpZWRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9maW5kQW5kUHVzaFZhcmlhbnRUb1Byb21pc2UoXG5cdFx0Ly9UaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdWl0YWJsZSB2YXJpYW50IGZvciB0aGUgdmFyaWFudElEIHByb3ZpZGVkIGluIHRoZSB1cmwgYW5kIHB1c2hlcyB0aGVtIHRvIHRoZSBwcm9taXNlIGFycmF5XG5cdFx0b1ZhcmlhbnQ6IFZhcmlhbnRPYmplY3QsXG5cdFx0c1ZhcmlhbnRJZDogc3RyaW5nLFxuXHRcdG9WTTogVmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGJvb2xlYW4+W10sXG5cdFx0YkZpbHRlclZhcmlhbnRBcHBsaWVkPzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCh0aGlzLl9hcHBseUNvbnRyb2xWYXJpYW50KG9WTSwgc1ZhcmlhbnRJZCwgYkZpbHRlclZhcmlhbnRBcHBsaWVkKSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZhcmlhbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCBzVmFyaWFudElEOiBzdHJpbmcsIGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc1ZhcmlhbnRSZWZlcmVuY2UgPSB0aGlzLl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZhcmlhbnQsIHNWYXJpYW50SUQpID8gc1ZhcmlhbnRJRCA6IG9WYXJpYW50LmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdGNvbnN0IG9WTSA9IENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHR9KTtcblx0XHRyZXR1cm4gb1ZNLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGJGaWx0ZXJWYXJpYW50QXBwbGllZDtcblx0XHR9KTtcblx0fVxuXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEZpbHRlckJhciBjb250cm9sLlxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0sXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiXVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBJZiB0cnVlLCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBmaWx0ZXIgdmFsdWUgaXMgY2hhbmdlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0bGl2ZU1vZGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXIgd2hpY2ggc2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHBvc3NpYmxlIGVycm9ycyBkdXJpbmcgdGhlIHNlYXJjaCBpbiBhIG1lc3NhZ2UgYm94XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0c2hvd01lc3NhZ2VzPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgJ0NsZWFyJyBidXR0b24gb24gdGhlIEZpbHRlckJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQWdncmVnYXRlIGZpbHRlciBmaWVsZHMgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9ja1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckZpZWxkXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGZpbHRlckZpZWxkcz86IEZpbHRlckZpZWxkW107XG5cblx0Y29udGVudCE6IEZpbHRlckJhcjtcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnR28nIGJ1dHRvbiBpcyBwcmVzc2VkIG9yIGFmdGVyIGEgY29uZGl0aW9uIGNoYW5nZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VhcmNoITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlICdHbycgYnV0dG9uIGlzIHByZXNzZWQgb3IgYWZ0ZXIgYSBjb25kaXRpb24gY2hhbmdlLiBUaGlzIGlzIG9ubHkgaW50ZXJuYWxseSB1c2VkIGJ5IHNhcC5mZSAoRmlvcmkgZWxlbWVudHMpIGFuZFxuXHQgKiBleHBvc2VzIHBhcmFtZXRlcnMgZnJvbSBpbnRlcm5hbCBNREMtRmlsdGVyQmFyIHNlYXJjaCBldmVudFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxTZWFyY2ghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgZWl0aGVyIGEgZmlsdGVyIHZhbHVlIG9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgZmlsdGVyIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGV2ZW50IGNvbnRhaW5zIGNvbmRpdGlvbnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycy5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0ZmlsdGVyQ2hhbmdlZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSAnQ2xlYXInIGJ1dHRvbiBpcyBwcmVzc2VkLiBUaGlzIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgJ0NsZWFyJyBidXR0b24gaXMgZW5hYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0YWZ0ZXJDbGVhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBlaXRoZXIgYSBmaWx0ZXIgdmFsdWUgb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgaXRlbSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgY29uZGl0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzLlxuXHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IHNhcC5mZSAoRmlvcmkgRWxlbWVudHMpLiBUaGlzIGV4cG9zZXMgcGFyYW1ldGVycyBmcm9tIHRoZSBNREMtRmlsdGVyQmFyIGZpbHRlckNoYW5nZWQgZXZlbnQgdGhhdCBpcyB1c2VkIGJ5IHNhcC5mZSBpbiBzb21lIGNhc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0aW50ZXJuYWxGaWx0ZXJDaGFuZ2VkITogc3RyaW5nO1xuXG5cdHByaXZhdGUgdGVsZW1ldHJ5PzogRmlsdGVyQmFyVGVsZW1ldHJ5O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxGaWx0ZXJCYXJBUEk+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdFx0dGhpcy50ZWxlbWV0cnkgPSBuZXcgRmlsdGVyQmFyVGVsZW1ldHJ5KHRoaXMpO1xuXHRcdHRoaXMuYXR0YWNoU3RhdGVDaGFuZ2VIYW5kbGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaFN0YXRlQ2hhbmdlSGFuZGxlcigpOiB2b2lkIHtcblx0XHRTdGF0ZVV0aWwuZGV0YWNoU3RhdGVDaGFuZ2UodGhpcy5zdGF0ZUNoYW5nZUhhbmRsZXIpO1xuXHRcdFN0YXRlVXRpbC5hdHRhY2hTdGF0ZUNoYW5nZSh0aGlzLnN0YXRlQ2hhbmdlSGFuZGxlcik7XG5cdH1cblxuXHRzdGF0ZUNoYW5nZUhhbmRsZXIob0V2ZW50OiBFdmVudDx7IGNvbnRyb2w6IENvbnRyb2wgfT4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250cm9sID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImNvbnRyb2xcIik7XG5cdFx0aWYgKGNvbnRyb2wuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgaGFuZGxlU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9O1xuXHRcdFx0aWYgKGZpbHRlckJhckFQST8uaGFuZGxlU3RhdGVDaGFuZ2UpIHtcblx0XHRcdFx0ZmlsdGVyQmFyQVBJLmhhbmRsZVN0YXRlQ2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdGhhbmRsZVNlYXJjaChvRXZlbnQ6IEZpbHRlckJhckJhc2UkU2VhcmNoRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBldmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gKG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT47XG5cdFx0XHRjb25zdCBwcmVwYXJlZEV2ZW50UGFyYW1ldGVycyA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMob0ZpbHRlckJhcik7XG5cdFx0XHR0aGlzLnRlbGVtZXRyeT8ub25TZWFyY2goZXZlbnRQYXJhbWV0ZXJzLCBjb25kaXRpb25zKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxTZWFyY2hcIiwgbWVyZ2UoeyBjb25kaXRpb25zOiBjb25kaXRpb25zIH0sIGV2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJzZWFyY2hcIiwgbWVyZ2UoeyByZWFzb246IGV2ZW50UGFyYW1ldGVycy5yZWFzb24gfSwgcHJlcGFyZWRFdmVudFBhcmFtZXRlcnMpKTtcblx0XHR9XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlRmlsdGVyQ2hhbmdlZChvRXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvRXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKTtcblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9ucyA9IGZpbHRlckJhci5nZXRGaWx0ZXJDb25kaXRpb25zKCk7XG5cdFx0XHRjb25zdCBldmVudFBhcmFtZXRlcnM6IG9iamVjdCA9IHRoaXMuX3ByZXBhcmVFdmVudFBhcmFtZXRlcnMoZmlsdGVyQmFyKTtcblx0XHRcdHRoaXMudGVsZW1ldHJ5Py5vbkZpbHRlcnNDaGFuZ2VkKHRoaXMuX2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXIpKTtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwiaW50ZXJuYWxGaWx0ZXJDaGFuZ2VkXCIsIG1lcmdlKHsgY29uZGl0aW9uczogb0NvbmRpdGlvbnMgfSwgb0V2ZW50UGFyYW1ldGVycykpO1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJmaWx0ZXJDaGFuZ2VkXCIsIGV2ZW50UGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhclJlYXNvbihmaWx0ZXJCYXI6IEZpbHRlckJhciAmIHsgX3NSZWFzb24/OiBzdHJpbmcgfSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGZpbHRlckJhcj8uX3NSZWFzb24gPz8gXCJcIjtcblx0fVxuXG5cdF9wcmVwYXJlRXZlbnRQYXJhbWV0ZXJzKG9GaWx0ZXJCYXI6IEZpbHRlckJhcik6IFBhcnRpYWw8SW50ZXJuYWxCaW5kaW5nSW5mbz4ge1xuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKG9GaWx0ZXJCYXIgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIGZpbHRlciB2YWx1ZXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG5cdCAqIEVhY2ggZmlsdGVyIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmltaXRpdmUgdmFsdWUuXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgKG9wdGlvbmFsKSAtIGlmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IG9wZXJhdG9yIChFUSkgd2lsbCBiZSB1c2VkXG5cdCAqIEBwYXJhbSB2VmFsdWVzIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRGaWx0ZXJWYWx1ZXMoXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHRzT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHR2VmFsdWVzPzogdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvcjtcblx0XHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgdlZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5zZXRGaWx0ZXJWYWx1ZXModGhpcy5jb250ZW50LCBzQ29uZGl0aW9uUGF0aCwgc09wZXJhdG9yLCB2VmFsdWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIEFjdGl2ZSBGaWx0ZXJzIFRleHQgU3VtbWFyeSBmb3IgdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIEFjdGl2ZSBmaWx0ZXJzIHN1bW1hcnkgYXMgdGV4dFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRBY3RpdmVGaWx0ZXJzVGV4dCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmNvbnRlbnQ/LmdldEFzc2lnbmVkRmlsdGVyc1RleHQoKT8uZmlsdGVyc1RleHQgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhbGwgdGhlIGZpbHRlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZVxuXHQgKiBhbG9uZyB3aXRoIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWN0aXZlIGZpbHRlcnMgYW5kIHRoZSBzZWFyY2ggZXhwcmVzc2lvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0RmlsdGVycygpOiBvYmplY3Qge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJzKHRoaXMuY29udGVudCBhcyBJRmlsdGVyQ29udHJvbCkgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgdGhlIEFQSSBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIGlmIGZpbHRlciBnbyBpcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZ2V0cyByZWplY3RlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdHJpZ2dlclNlYXJjaCgpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IHRoaXMuY29udGVudDtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0XHRhd2FpdCBmaWx0ZXJCYXIud2FpdEZvckluaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdHJldHVybiBhd2FpdCBmaWx0ZXJCYXIudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogRmlsdGVyQmFyIDogJHttZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgRXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0aXNTZW1hbnRpY0RhdGVGaWx0ZXJBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuaGFzU2VtYW50aWNEYXRlT3BlcmF0aW9ucyh0aGlzLmNvbnRlbnQuZ2V0Q29uZGl0aW9ucygpLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3Rpb24gdmFyaWFudCBmcm9tIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBOb3RlOiBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgZmlsdGVyIHZhbHVlcyB0aGF0IGFyZSBzZXQgaW4gdGhlIGZpbHRlciBiYXIsIGluY2x1ZGluZyB0aGUgdGV4dCBmcm9tIHRoZSBzZWFyY2ggZmllbGQgKHdpdGggJHNlYXJjaCBhcyB0aGUgcHJvcGVydHkgbmFtZSkuIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmV0dXJuIGFueSBmaWx0ZXIgZmllbGQgY29uZGl0aW9uIHRoYXQgdXNlcyBhIGN1c3RvbSBvcGVyYXRvci5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggYSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH1cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZ2V0U2VsZWN0aW9uVmFyaWFudCgpOiBQcm9taXNlPFNlbGVjdGlvblZhcmlhbnQ+IHtcblx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gYXdhaXQgc3RhdGVIZWxwZXIuZ2V0U2VsZWN0aW9uVmFyaWFudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRpZiAoY29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY29udHJvbGxlcj8uZ2V0VmlldygpLFxuXHRcdFx0XHRhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyksXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uU2VydmljZSgpLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoKHRoaXMubWV0YVBhdGgpO1xuXHRcdFx0aWYgKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lKSB7XG5cdFx0XHRcdGNvbnN0IHNDb250ZXh0VXJsID1cblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3Q/LnRhcmdldEVudGl0eVNldD8ubmFtZSAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlPy5jb25zdHJ1Y3RDb250ZXh0VXJsKGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5U2V0Py5uYW1lLCB2aWV3LmdldE1vZGVsKCkpO1xuXHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lcy5cblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgbWFuZGF0b3J5IGZpbHRlciBwcm9wZXJ0eSBuYW1lc1xuXHQgKi9cblx0Z2V0TWFuZGF0b3J5RmlsdGVyUHJvcGVydHlOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQuZ2V0UHJvcGVydHlJbmZvU2V0KCkgYXMgQ29udHJvbFByb3BlcnR5SW5mb1tdKVxuXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyUHJvcCkge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUHJvcC5yZXF1aXJlZDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGZ1bmN0aW9uIChyZXF1aXJlZFByb3ApIHtcblx0XHRcdFx0cmV0dXJuIHJlcXVpcmVkUHJvcC5jb25kaXRpb25QYXRoO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWx0ZXIgYmFyIHBhcmFtZXRlcnMgZm9yIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2Vcblx0ICovXG5cblx0Z2V0UGFyYW1ldGVycygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5jb250ZW50O1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBmaWx0ZXJCYXIuZGF0YShcInBhcmFtZXRlcnNcIik7XG5cdFx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpID8gcGFyYW1ldGVycyA6IEpTT04ucGFyc2UocGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdGdldFZhcmlhbnQoKTogVmFyaWFudERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGxldCBjdXJyZW50VmFyaWFudDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFyaWFudE1vZGVsID0gdGhpcy5nZXRNb2RlbChcIiRGbGV4VmFyaWFudHNcIikgYXMgVmFyaWFudE1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmFyaWFudEJhY2tSZWZlcmVuY2UgPSB0aGlzLmNvbnRlbnQuZ2V0VmFyaWFudEJhY2tyZWZlcmVuY2UoKTtcblxuXHRcdFx0aWYgKHZhcmlhbnRNb2RlbCAmJiB2YXJpYW50QmFja1JlZmVyZW5jZSkge1xuXHRcdFx0XHRjdXJyZW50VmFyaWFudCA9IHZhcmlhbnRNb2RlbC5nZXRWYXJpYW50KHZhcmlhbnRNb2RlbC5nZXRDdXJyZW50VmFyaWFudFJlZmVyZW5jZSh2YXJpYW50QmFja1JlZmVyZW5jZSkpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5kZWJ1ZyhcIkNvdWxkbid0IGZldGNoIHZhcmlhbnQgXCIsIGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRWYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIG9yIGhpZGVzIGFueSBmaWx0ZXIgZmllbGQgZnJvbSB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhlIHByb3BlcnR5IHdpbGwgbm90IGJlIGhpZGRlbiBpbnNpZGUgdGhlIGFkYXB0YXRpb24gZGlhbG9nIGFuZCBtYXkgYmUgcmUtYWRkZWQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSB2aXNpYmxlIFdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIG9yIGhpZGRlblxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgb25jZSB0aGUgY2hhbmdlIGluIHZpc2liaWxpdHkgd2FzIGFwcGxpZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2V0RmlsdGVyRmllbGRWaXNpYmxlKGNvbmRpdGlvblBhdGg6IHN0cmluZywgdmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGhpcy5jb250ZW50LCB7IGl0ZW1zOiBbeyBuYW1lOiBjb25kaXRpb25QYXRoLCB2aXNpYmxlIH1dIH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgYSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsdGVyIGZpZWxkIGlzIHZpc2libGUgb3Igbm90LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRGaWx0ZXJGaWVsZFZpc2libGUoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc3RhdGU6IEV4dGVybmFsU3RhdGVUeXBlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQpO1xuXHRcdHJldHVybiAhIXN0YXRlLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXNzb2NpYXRlZCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgc2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50fSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyIGJhci5cblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50IHtcblx0XHRjb25zdCB2YXJpYW50QmFja3JlZmVyZW5jZSA9IHRoaXMuY29udGVudC5nZXRWYXJpYW50QmFja3JlZmVyZW5jZSgpO1xuXHRcdGlmICh2YXJpYW50QmFja3JlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodmFyaWFudEJhY2tyZWZlcmVuY2UpIGFzIFZhcmlhbnRNYW5hZ2VtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZhcmlhbnQgYmFjayByZWZlcmVuY2Ugbm90IGRlZmluZWQgb24gdGhlIGZpbHRlciBiYXIgJHt0aGlzLmlkfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB2YXJpYW50IGJhY2sgcmVmZXJlbmNlIGFzc29jaWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gdmFyaWFudCBUaGUgYFZhcmlhbnRNYW5hZ2VtZW50YCBpbnN0YW5jZSB0byBzZXQgYXMgdGhlIGJhY2sgcmVmZXJlbmNlLlxuXHQgKi9cblx0c2V0VmFyaWFudEJhY2tSZWZlcmVuY2UodmFyaWFudDogVmFyaWFudE1hbmFnZW1lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGlzTGl2ZU1vZGUgPSBjb250ZW50Py5nZXRMaXZlTW9kZT8uKCk7XG5cdFx0aWYgKCFpc0xpdmVNb2RlKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuc2V0VmFyaWFudEJhY2tyZWZlcmVuY2UodmFyaWFudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgY3VycmVudCB2YXJpYW50IGluIHRoZSBhc3NvY2lhdGVkIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0ICogQHJldHVybnMgS2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFyaWFudC4gSW4gY2FzZSB0aGUgbW9kZWwgaXMgbm90IHlldCBzZXQsIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRDdXJyZW50VmFyaWFudEtleSgpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWYXJpYW50TWFuYWdlbWVudCgpLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbmV3IHNlbGVjdGVkIHZhcmlhbnQgaW4gdGhlIGFzc29jaWF0ZWQgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHQgKiBAcGFyYW0ga2V5IEtleSBvZiB0aGUgdmFyaWFudCB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gSWYgdGhlIHBhc3NlZCBrZXkgZG9lc24ndCBpZGVudGlmeSBhIHZhcmlhbnQsIGl0IHdpbGwgYmUgaWdub3JlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0Q3VycmVudFZhcmlhbnRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRoaXMuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5zZXRDdXJyZW50VmFyaWFudEtleShrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXHQgKiBAcGFyYW0gZW5hYmxlZCBXaGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0RmlsdGVyRmllbGRFbmFibGVkKG5hbWU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdCh0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXREYXRhKFxuXHRcdFx0e1xuXHRcdFx0XHRbdGhpcy5jb250ZW50LmRhdGEoXCJsb2NhbElkXCIpXToge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkczogeyBbbmFtZV06IHsgZWRpdE1vZGU6IGVuYWJsZWQgPyBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlIDogRmllbGRFZGl0TW9kZS5EaXNhYmxlZCB9IH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmllbGQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZmllbGQuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbHRlckZpZWxkIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEZpbHRlckZpZWxkRW5hYmxlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHt0aGlzLmNvbnRlbnQuZGF0YShcImxvY2FsSWRcIil9L2ZpbHRlckZpZWxkcy8ke25hbWV9L2VkaXRNb2RlYCkgPT09XG5cdFx0XHRGaWVsZEVkaXRNb2RlLkRpc2FibGVkXG5cdFx0XHQ/IGZhbHNlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gY29uZGl0aW9ucy5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvbiB2YXJpYW50IHRvIGFwcGx5IHRvIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gcHJlZmlsbERlc2NyaXB0aW9ucyBJZiB0cnVlLCB3ZSB0cnkgdG8gZmluZCB0aGUgYXNzb2NpYXRlZCBUZXh0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoZSBzZWxlY3Rpb25WYXJpYW50ICh0byBhdm9pZCBmZXRjaGluZyBpdCBmcm9tIHRoZSBzZXJ2ZXIpXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZGl0aW9uc1xuXHQgKi9cblx0YXN5bmMgY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHByZWZpbGxEZXNjcmlwdGlvbnM6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxTdGF0ZVV0aWxGaWx0ZXI+IHtcblx0XHRyZXR1cm4gc3RhdGVIZWxwZXIuY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyhcblx0XHRcdHRoaXMuY29udGVudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRwcmVmaWxsRGVzY3JpcHRpb25zLFxuXHRcdFx0dGhpcy5jb250ZW50Py5nZXRNb2RlbCgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIgd2l0aCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gY2xlYXIgRWRpdCBGaWx0ZXIgb3Igbm90LlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBmaWx0ZXJpbmcgb24gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9wdGlvbnMuY2xlYXJFZGl0RmlsdGVyIFdoZXRoZXIgdG8gY2xlYXIgdGhlIGVkaXQgZmlsdGVyIG9yIGxldCBpdCBiZSBkZWZhdWx0IHZhbHVlICdBbGwnIGluc3RlYWRcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhcjogRmlsdGVyQmFyLCBvcHRpb25zPzogeyBjbGVhckVkaXRGaWx0ZXI6IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHN0YXRlSGVscGVyLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gdGhlIGZpbHRlciBiYXIuIE5vdGU6IHNldFNlbGVjdGlvblZhcmlhbnQgd2lsbCBjbGVhciBleGlzdGluZyBmaWx0ZXJzIGFuZCB0aGVuIGFwcGx5IHRoZSBTZWxlY3Rpb25WYXJpYW50IHZhbHVlcy5cblx0ICogTm90ZTogVGhpcyBtZXRob2QgY2Fubm90IHNldCB0aGUgc2VhcmNoIGZpZWxkIHRleHQgb3IgYW55IGZpbHRlciBmaWVsZCBjb25kaXRpb24gdGhhdCByZWxpZXMgb24gYSBjdXN0b20gb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFRoZSB7QGxpbmsgc2FwLmZlLm5hdmlnYXRpb24uU2VsZWN0aW9uVmFyaWFudH0gdG8gYXBwbHkgdG8gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIHByZWZpbGxEZXNjcmlwdGlvbnMgT3B0aW9uYWwuIElmIHRydWUsIHdlIHdpbGwgdXNlIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgdmFsdWVzIChpZiB0aGV5J3JlIGF2YWlsYWJsZSBpbiB0aGUgc2VsZWN0aW9uVmFyaWFudCkgdG8gZGlzcGxheSB0aGUgZmlsdGVyIHZhbHVlIGRlc2NyaXB0aW9ucywgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZW0gZnJvbSB0aGUgYmFja2VuZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jaHJvbm91cyBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXRTZWxlY3Rpb25WYXJpYW50KHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMgPSBmYWxzZSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNMaXZlTW9kZSA9IGNvbnRlbnQgJiYgY29udGVudD8uZ2V0TGl2ZU1vZGU/LigpO1xuXHRcdGxldCByZXN1bHQ6IHsgZGlmZlN0YXRlOiBFeHRlcm5hbFN0YXRlVHlwZTsgYXBwbHlTdGF0ZVJlc3VsdDogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChpc0xpdmVNb2RlKSB7XG5cdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKGZhbHNlKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJlc3VsdCA9IGF3YWl0IHN0YXRlSGVscGVyLnNldFNlbGVjdGlvblZhcmlhbnRUb01kY0NvbnRyb2wodGhpcy5nZXRDb250ZW50KCksIHNlbGVjdGlvblZhcmlhbnQsIHByZWZpbGxEZXNjcmlwdGlvbnMpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdD8uYXBwbHlTdGF0ZVJlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IEZpbHRlckJhciA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdHRocm93IEVycm9yKG1lc3NhZ2UpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoaXNMaXZlTW9kZSkge1xuXHRcdFx0XHRjb250ZW50LmVuYWJsZVJlcXVlc3RzKHRydWUsIHJlc3VsdD8uZGlmZlN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIGJ5IHRoZSBNREMgc3RhdGUgdXRpbCB3aGVuIHRoZSBzdGF0ZSBmb3IgdGhpcyBjb250cm9sJ3MgY2hpbGQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRoYW5kbGVTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbmRpdGlvblBhdGgocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IEZpbHRlclV0aWxzLmdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSh0aGlzLmNvbnRlbnQsIHByb3BlcnR5UGF0aCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0cHJvcGVydHlQYXRoXG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIHNob3dGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzdGF0ZTogRXh0ZXJuYWxTdGF0ZVR5cGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRoaXMuY29udGVudCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblx0XHRjb25zdCB0YXJnZXRGaWx0ZXJGaWVsZCA9ICEhc3RhdGUuaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBjb25kaXRpb25QYXRoKTtcblx0XHRpZiAoIXRhcmdldEZpbHRlckZpZWxkKSB7XG5cdFx0XHRzdGF0ZS5pdGVtcy5wdXNoKHsgbmFtZTogY29uZGl0aW9uUGF0aCB9KTtcblx0XHR9XG5cdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0aGlzLmNvbnRlbnQsIHN0YXRlKTtcblx0fVxuXG5cdGFzeW5jIG9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChuYW1lOiBzdHJpbmcsIGlucHV0VmFsdWU/OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgY29uZGl0aW9uUGF0aCA9IHRoaXMuZ2V0Q29uZGl0aW9uUGF0aChuYW1lKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IHRoaXMuY29udGVudC5nZXRGaWx0ZXJJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZ2V0UHJvcGVydHlLZXkoKSA9PT0gY29uZGl0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHAgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGZpbHRlckZpZWxkPy5nZXRWYWx1ZUhlbHAoKSkgYXMgVmFsdWVIZWxwIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKCF2YWx1ZUhlbHAgfHwgIWZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFZhbHVlSGVscCBmb3IgZmlsdGVyIGZpZWxkICR7bmFtZX0gbm90IGZvdW5kYCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhbHVlSGVscC5hdHRhY2hFdmVudE9uY2UoXCJjbG9zZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlSGVscC5nZXRDb25kaXRpb25zKCkgYXMgQ29uZGl0aW9uT2JqZWN0W10pO1xuXHRcdFx0fSk7XG5cblx0XHRcdChmaWx0ZXJGaWVsZCBhcyB1bmtub3duIGFzIHsgX29Gb2N1c0luZm86IG9iamVjdCB9KS5fb0ZvY3VzSW5mbyA9IHsgdGFyZ2V0SW5mbzogeyBzaWxlbnQ6IHRydWUgfSB9O1xuXHRcdFx0KGZpbHRlckZpZWxkIGFzIHVua25vd24gYXMgeyBvbmZvY3VzaW4/OiBGdW5jdGlvbiB9KS5vbmZvY3VzaW4/LihuZXcgalF1ZXJ5LkV2ZW50KFwiZm9jdXNpblwiKSk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0KGZpbHRlckZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRlbnRcIikgYXMgSW5wdXRbXSlbMF0uZmlyZVZhbHVlSGVscFJlcXVlc3Qoe1xuXHRcdFx0XHRcdGZyb21LZXlib2FyZDogdHJ1ZSxcblx0XHRcdFx0XHRfdXNlcklucHV0VmFsdWU6IGlucHV0VmFsdWVcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIElucHV0JFZhbHVlSGVscFJlcXVlc3RFdmVudFBhcmFtZXRlcnMpO1xuXHRcdFx0fSwgMjAwKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldENvbGxhcHNlZEZpbHRlcnNUZXh0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudD8uZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpPy5maWx0ZXJzVGV4dDtcblx0fVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQmFyQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQStDQTtFQUFBLElBQ01BLGtCQUFrQjtJQUt2QixTQUFBQSxtQkFBNkJDLFlBQTBCLEVBQUU7TUFBQSxLQUpqREMsa0JBQWtCLEdBQUcsQ0FBQztNQUFBLEtBRXRCQyxtQkFBbUIsR0FBRyxDQUFDO01BQUEsS0FFRkYsWUFBMEIsR0FBMUJBLFlBQTBC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
@@ -11,6 +11,7 @@ import { InitialLoadMode } from "sap/fe/core/library";
11
11
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
12
12
  import { getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
13
13
  import MacroAPI from "sap/fe/macros/MacroAPI";
14
+ import type FilterBar from "sap/fe/macros/controls/FilterBar";
14
15
  import type { IFilterControl } from "sap/fe/macros/filter/FilterUtils";
15
16
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
16
17
  import type FilterField from "sap/fe/macros/filterBar/FilterField";
@@ -33,7 +34,6 @@ import type VariantManagement from "sap/ui/fl/variants/VariantManagement";
33
34
  import type VariantModel from "sap/ui/fl/variants/VariantModel";
34
35
  import type { VariantData } from "sap/ui/fl/variants/VariantModel";
35
36
  import type Control from "sap/ui/mdc/Control";
36
- import type FilterBar from "sap/ui/mdc/FilterBar";
37
37
  import type ValueHelp from "sap/ui/mdc/ValueHelp";
38
38
  import type { ConditionObject } from "sap/ui/mdc/condition/Condition";
39
39
  import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
@@ -272,7 +272,7 @@ class FilterBarAPI extends MacroAPI {
272
272
  // Only if search is fired we set _bSearchTriggered.
273
273
  // If there was an error due to required filterfields empty or other issues we skip setting _bSearchTriggered.
274
274
  filterBarAPI.attachEventOnce("search", fnOnSearch);
275
- filterBarControl.setSuspendSelection(false);
275
+ filterBarControl.enableRequests(true);
276
276
  } else {
277
277
  // search might already be triggered.
278
278
  fnOnSearch();
@@ -987,20 +987,20 @@ class FilterBarAPI extends MacroAPI {
987
987
  async setSelectionVariant(selectionVariant: SelectionVariant, prefillDescriptions = false): Promise<unknown> {
988
988
  const content = this.getContent() as FilterBar | undefined;
989
989
  const isLiveMode = content && content?.getLiveMode?.();
990
+ let result: { diffState: ExternalStateType; applyStateResult: unknown } | undefined;
990
991
  if (isLiveMode) {
991
- content.setSuspendSelection(true);
992
+ content.enableRequests(false);
992
993
  }
993
- let ret: unknown;
994
994
  try {
995
- ret = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions);
996
- return ret;
995
+ result = await stateHelper.setSelectionVariantToMdcControl(this.getContent(), selectionVariant, prefillDescriptions);
996
+ return result?.applyStateResult;
997
997
  } catch (err: unknown) {
998
998
  const message = err instanceof Error ? err.message : String(err);
999
999
  Log.error(`FE : Buildingblock : FilterBar : ${message}`);
1000
1000
  throw Error(message);
1001
1001
  } finally {
1002
1002
  if (isLiveMode) {
1003
- content.setSuspendSelection(false);
1003
+ content.enableRequests(true, result?.diffState);
1004
1004
  }
1005
1005
  }
1006
1006
  }
@@ -1025,7 +1025,7 @@ class FilterBarAPI extends MacroAPI {
1025
1025
  const conditionPath = this.getConditionPath(name);
1026
1026
  const targetFilterField = !!state.items.find((item) => item.name === conditionPath);
1027
1027
  if (!targetFilterField) {
1028
- state.items.push({ name });
1028
+ state.items.push({ name: conditionPath });
1029
1029
  }
1030
1030
  await StateUtil.applyExternalState(this.content, state);
1031
1031
  }