@sapui5/sap.fe.macros 1.142.0 → 1.142.2

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 (83) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Field.js +5 -5
  4. package/src/sap/fe/macros/Field.ts +5 -3
  5. package/src/sap/fe/macros/FooterContent.js +3 -2
  6. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  7. package/src/sap/fe/macros/MessageButton.js +3 -3
  8. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  9. package/src/sap/fe/macros/Page.js +8 -4
  10. package/src/sap/fe/macros/Page.tsx +13 -4
  11. package/src/sap/fe/macros/RichTextEditor.js +12 -14
  12. package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
  13. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  14. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  15. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  16. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  17. package/src/sap/fe/macros/chart/Action.js +19 -7
  18. package/src/sap/fe/macros/chart/Action.ts +8 -0
  19. package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
  20. package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
  21. package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
  22. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
  23. package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
  24. package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
  25. package/src/sap/fe/macros/controls/FilterBar.js +1 -1
  26. package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
  27. package/src/sap/fe/macros/controls/Section.js +3 -2
  28. package/src/sap/fe/macros/controls/Section.ts +1 -1
  29. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  30. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  31. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
  32. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
  33. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
  34. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
  35. package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
  36. package/src/sap/fe/macros/field/FieldTemplating.ts +8 -3
  37. package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
  38. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
  39. package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
  40. package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
  41. package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
  42. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
  43. package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
  44. package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
  45. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
  46. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
  47. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  48. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  49. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
  50. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
  51. package/src/sap/fe/macros/library.js +5 -6
  52. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  53. package/src/sap/fe/macros/messagebundle.properties +6 -0
  54. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  55. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  56. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +8 -3
  57. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +9 -2
  58. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  59. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  60. package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
  61. package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
  62. package/src/sap/fe/macros/table/MdcTableTemplate.js +31 -13
  63. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +35 -7
  64. package/src/sap/fe/macros/table/Table.block.js +3 -1
  65. package/src/sap/fe/macros/table/Table.block.tsx +7 -4
  66. package/src/sap/fe/macros/table/TableAPI.js +62 -28
  67. package/src/sap/fe/macros/table/TableAPI.ts +73 -32
  68. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +15 -4
  69. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +16 -3
  70. package/src/sap/fe/macros/table/TableRuntime.js +6 -4
  71. package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
  72. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
  73. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
  74. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  75. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  76. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
  77. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
  78. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
  79. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
  80. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  81. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  82. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +28 -10
  83. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -14
@@ -2,9 +2,10 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/chart/ChartHelper", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/mdc/enums/ChartItemRoleType", "sap/ui/mdc/odata/v4/util/DelegateUtil", "sap/ui/mdc/odata/v4/vizChart/ChartDelegate", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../filterBar/FilterBarDelegate"], function (Log, merge, TimeUnitType, CommonUtils, MetaModelConverter, FetchFilterRestrictions, valueFormatters, MetaModelFunction, ResourceModelHelper, CommonHelper, MacrosDelegateUtil, ChartHelper, ChartUtils, FilterUtils, IllustratedMessageSize, IllustratedMessageType, Element, Library, ChartItemRoleType, DelegateUtil, BaseChartDelegate, Filter, FilterOperator, FilterBarDelegate) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/chart/ChartHelper", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/filter/FilterUtils", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/ui/core/Element", "sap/ui/core/Lib", "sap/ui/mdc/enums/ChartItemRoleType", "sap/ui/mdc/odata/v4/util/DelegateUtil", "sap/ui/mdc/odata/v4/vizChart/ChartDelegate", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "../filterBar/FilterBarDelegate"], function (Log, merge, TimeUnitType, CommonUtils, MetaModelConverter, FetchFilterRestrictions, valueFormatters, MetaModelFunction, ModelHelper, ResourceModelHelper, CommonHelper, MacrosDelegateUtil, ChartHelper, ChartUtils, FilterUtils, IllustratedMessageSize, IllustratedMessageType, Element, Library, ChartItemRoleType, DelegateUtil, BaseChartDelegate, Filter, FilterOperator, FilterBarDelegate) {
6
6
  "use strict";
7
7
 
8
+ var getLocalizedText = ResourceModelHelper.getLocalizedText;
8
9
  var isMultiValueFilterExpression = MetaModelFunction.isMultiValueFilterExpression;
9
10
  var getSortRestrictionsInfo = MetaModelFunction.getSortRestrictionsInfo;
10
11
  var getFilterableData = MetaModelFunction.getFilterableData;
@@ -67,6 +68,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
67
68
  if (!unitOfMeasures.includes(oAggregateProperty.path)) {
68
69
  aProperties.push(oAggregateProperty);
69
70
  }
71
+ if (oAggregateProperty.label.startsWith("{metaModel>")) {
72
+ oAggregateProperty.label = ModelHelper.fetchTextFromMetaModel(oAggregateProperty.label, undefined, oMDCChart.getModel().getMetaModel());
73
+ } else {
74
+ oAggregateProperty.label = getLocalizedText(oAggregateProperty.label, oMDCChart);
75
+ }
70
76
  });
71
77
  //Add transformation aggregated properties to chart properties
72
78
  if (aModes && aModes.includes("Filter")) {
@@ -172,6 +178,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
172
178
  break;
173
179
  }
174
180
  }
181
+ if (oProperty.label.startsWith("{metaModel>")) {
182
+ oProperty.label = ModelHelper.fetchTextFromMetaModel(oProperty.label, undefined, oMDCChart.getModel().getMetaModel());
183
+ } else {
184
+ oProperty.label = getLocalizedText(oProperty.label, oMDCChart);
185
+ }
175
186
  aProperties.push(oProperty);
176
187
  return aProperties;
177
188
  }
@@ -621,4 +632,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/chart/TimeUnitType",
621
632
  };
622
633
  return ChartDelegate;
623
634
  }, false);
624
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydERlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiQmFzZUNoYXJ0RGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiX2xvYWRDaGFydCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsIl9oYW5kbGVQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5IiwidW5pdE9mTWVhc3VyZXMiLCJvQXBwbHlTdXBwb3J0ZWQiLCJDb21tb25IZWxwZXIiLCJwYXJzZUN1c3RvbURhdGEiLCJkYXRhIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiRmV0Y2hGaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbCIsInByb3BlcnR5RmlsdGVyYWJsZURhdGEiLCJnZXRGaWx0ZXJhYmxlRGF0YSIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwia2V5cyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsIm9PYmoiLCJnZXRPYmplY3QiLCJnZXRQYXRoIiwic0tleSIsImFNb2RlcyIsImdldFAxM25Nb2RlIiwiY2hlY2tGb3JOb25maWx0ZXJhYmxlRW50aXR5U2V0IiwiJGtpbmQiLCIkaXNDb2xsZWN0aW9uIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJzUGF0aCIsImdldE1ldGFDb250ZXh0IiwiYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYkdyb3VwYWJsZSIsImNoZWNrUHJvcGVydHlUeXBlIiwiYkFnZ3JlZ2F0YWJsZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJsZW5ndGgiLCJpbmNsdWRlcyIsInByb3BlcnR5RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiYUFnZ3JlZ2F0ZVByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSIsIiRUeXBlIiwiZm9yRWFjaCIsIm9BZ2dyZWdhdGVQcm9wZXJ0eSIsInBhdGgiLCJwdXNoIiwiYUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJhR3JvdXBhYmxlUHJvcGVydGllc1ZhbHVlcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJhZGRQcm9wZXJ0eVRvQ2hhcnQiLCJjaGVja1Byb3BlcnR5RmlsdGVyYWJsZSIsInVuZGVmaW5lZCIsInNOYW1lIiwic1RleHRQcm9wZXJ0eSIsIiRQYXRoIiwiYklzTmF2aWdhdGlvblRleHQiLCJMb2ciLCJlcnJvciIsImluZGV4T2YiLCJfZ2V0U29ydGFibGUiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0VW5pdE9mTWVhc3VyZXMiLCJlbnRpdHlUeXBlIiwiZW50aXR5U2V0UGF0aCIsImNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCJ1bml0IiwiaXNGaWx0ZXJhYmxlIiwib0ZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJpc1NvcnRhYmxlIiwiYklzR3JvdXBhYmxlIiwiYklzQWdncmVnYXRhYmxlIiwiYklzSGlkZGVuIiwiY2hhcnRSb2xlIiwiQ2hhcnRJdGVtUm9sZVR5cGUiLCJjYXRlZ29yeSIsImNoYXJ0RGF0YSIsIkFycmF5IiwiaXNBcnJheSIsInJlY29yZCIsInNwbGl0IiwicG9wIiwidG9Mb3dlckNhc2UiLCJsYWJlbCIsInRvU3RyaW5nIiwic29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiYWdncmVnYXRhYmxlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJyb2xlIiwiY3JpdGljYWxpdHkiLCJkYXRhVHlwZSIsInZpc2libGUiLCJ0ZXh0UHJvcGVydHkiLCJ0ZXh0Rm9ybWF0dGVyIiwidGltZVVuaXRUeXBlIiwiX2dldFRpbWVUeXBlIiwiZm9ybWF0T3B0aW9ucyIsInN0eWxlIiwia2V5IiwiVGltZVVuaXRUeXBlIiwiRGF0ZSIsImZpc2NhbHllYXIiLCJmaXNjYWx5ZWFycGVyaW9kIiwieWVhcm1vbnRoIiwieWVhcnF1YXJ0ZXIiLCJ5ZWFyd2VlayIsInllYXJtb250aGRheSIsImJFbnRpdHlTZXRGaWxlcmFibGUiLCJnZXRNZXRhTW9kZWwiLCJGaWx0ZXJhYmxlIiwiZmlsdGVyIiwiaXRlbSIsInNldFAxM25Nb2RlIiwiZWxlbWVudCIsIlByb3BlcnR5IiwiZm9ybWF0VGV4dCIsIm9WYWx1ZTEiLCJvVmFsdWUyIiwic1ZhbHVlIiwidHlwZUNvbmZpZyIsInR5cGVJbnN0YW5jZSIsImZvcm1hdFZhbHVlIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsIl91cGRhdGVJbGx1c3RyYXRlZE1lc3NhZ2UiLCJvQ2hhcnQiLCJpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwiLCJub0RhdGFDb250cm9sIiwiZ2V0Tm9EYXRhIiwic2V0VGl0bGUiLCJ0aXRsZSIsInNldERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRJbGx1c3RyYXRpb25UeXBlIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb0VudHJpZXMiLCJzZXRJbGx1c3RyYXRpb25TaXplIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJBdXRvIiwic2V0Q2hhcnROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2UiLCJjaGFydCIsImJpbmRpbmdJbmZvIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbiIsImNvbnZlcnRlclR5cGUiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsIm9DaGFydEZpbHRlckluZm8iLCJDaGFydFV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInN1ZmZpeFJlc291cmNlS2V5Iiwic3RhcnRzV2l0aCIsInN1YnN0ciIsImdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzIiwiZ2V0VGV4dCIsIk5vRmlsdGVyUmVzdWx0cyIsIlNtYWxsIiwiZ2V0RmlsdGVyIiwic2VhcmNoIiwiZmlsdGVycyIsInVwZGF0ZUJpbmRpbmdJbmZvIiwib0JpbmRpbmdJbmZvIiwiaW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJvRmlsdGVyIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwibUNvbmRpdGlvbnMiLCJnZXRDb25kaXRpb25zIiwicGFyYW1ldGVycyIsIm9JbmZvIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJJbmZvIiwiZW5hYmxlU2VhcmNoIiwiJHNlYXJjaCIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJzUGFyYW1ldGVyUGF0aCIsIkRlbGVnYXRlVXRpbCIsImdldFBhcmFtZXRlcnNJbmZvIiwib0ZpbHRlckluZm8iLCJiaW5kaW5nUGF0aCIsIkNoYXJ0SGVscGVyIiwiZ2V0Q29sbGVjdGlvbk5hbWUiLCJnZXRQYXJlbnQiLCJnZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMiLCJldmVudHMiLCJkYXRhUmVxdWVzdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJiaW5kIiwiRmlsdGVyIiwiYW5kIiwic29ydGVyIiwiZ2V0U29ydGVycyIsIl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyIiwiZmV0Y2hQcm9wZXJ0aWVzIiwib01vZGVsIiwiX2dldE1vZGVsIiwicENyZWF0ZVByb3BlcnR5SW5mb3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSIsInJlc29sdmVyIiwib25Nb2RlbENvbnRleHRDaGFuZ2UiLCJ0aGVuIiwib1JldHJpZXZlZE1vZGVsIiwiX2NyZWF0ZVByb3BlcnR5SW5mb3MiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwib0V2ZW50Iiwib0RhdGEiLCJnZXRTb3VyY2UiLCJkZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJzRW50aXR5U2V0UGF0aCIsIm9NZXRhTW9kZWwiLCJhUmVzdWx0cyIsImFsbCIsInJlcXVlc3RPYmplY3QiLCJvRW50aXR5VHlwZSIsImdldEN1c3RvbUFnZ3JlZ2F0ZSIsInNBbm5vIiwic0Fubm9LZXkiLCJyZXBsYWNlIiwiYUFubm8iLCJtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzIiwic0FnZ3JlZ2F0YWJsZSIsInNQcm9wS2V5IiwicHJvcGVydHlQYXRoIiwiYWdncmVnYXRpb25NZXRob2QiLCJmZXRjaENyaXRpY2FsaXR5IiwiYURpbWVuc2lvbnMiLCJhTWVhc3VyZXMiLCJhQ2hhcnRJdGVtcyIsImdldEl0ZW1zIiwiZ2V0VHlwZSIsImdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQiLCJnZXRQcm9wZXJ0eUtleSIsInZhbCIsImF4aXMxIiwiZGF0YXBvaW50IiwidW5pdFBhdGgiLCJzQ3VzdG9tIiwib0l0ZW0iLCJtZXJnZSIsInJlYmluZCIsInNTZWFyY2giLCJvSW5uZXJDaGFydCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldElubmVyQ2hhcnQiLCJvQ2hhcnRCaW5kaW5nIiwiZ2V0QmluZGluZyIsInN1c3BlbmQiLCJzZXRBZ2dyZWdhdGlvbiIsIm9Jbm5lckNoYXJ0RGVsZWdhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsInJlc3VtZSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwiZmlyZUV2ZW50IiwiX3NldENoYXJ0Iiwib0NoYXJ0QVBJIiwic2V0Vml6UHJvcGVydGllcyIsImRldGFjaFNlbGVjdERhdGEiLCJoYW5kbGVTZWxlY3Rpb25DaGFuZ2UiLCJkZXRhY2hEZXNlbGVjdERhdGEiLCJkZXRhY2hEcmlsbGVkVXAiLCJhdHRhY2hTZWxlY3REYXRhIiwiYXR0YWNoRGVzZWxlY3REYXRhIiwiYXR0YWNoRHJpbGxlZFVwIiwic2V0U2VsZWN0aW9uTW9kZSIsImdldFBheWxvYWQiLCJzZWxlY3Rpb25Nb2RlIiwidG9VcHBlckNhc2UiLCJfZ2V0QmluZGluZ0luZm8iLCJfZ2V0QmluZGluZ0luZm9Gcm9tU3RhdGUiLCJvTWV0YWRhdGFJbmZvIiwiZ2V0RGVsZWdhdGUiLCJwYXlsb2FkIiwib1BhcmFtcyIsImVudGl0eVNldCIsImNoYXJ0Q29udGV4dFBhdGgiLCJyZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQiLCJvTURDQ2hhcnRJdGVtIiwiY2FsbCIsImZpcmVEZXNlbGVjdERhdGEiLCJzb3J0UmVzdHJpY3Rpb25zUHJvcGVydHkiLCJiSXNUcmFuc0FnZ3JlZ2F0ZSIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJhRmlsdGVycyIsImtpbmQiLCJnZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCIsIm1kY0NoYXJ0IiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsImdldEZpbHRlckRlbGVnYXRlIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJhZGRJdGVtIiwib1BhcmVudENvbnRyb2wiLCJzUHJvcGVydHlJbmZvTmFtZSIsInByb3AiLCJvRmlsdGVySXRlbSIsImJpbmRQcm9wZXJ0eSIsInNldFByb3BlcnR5S2V5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDaGFydERlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBUZXh0QXJyYW5nZW1lbnQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgc2FwQ2hhcnQgZnJvbSBcInNhcC9jaGFydC9DaGFydFwiO1xuaW1wb3J0IFRpbWVVbml0VHlwZSBmcm9tIFwic2FwL2NoYXJ0L1RpbWVVbml0VHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25Nb2RlIH0gZnJvbSBcInNhcC9jaGFydC9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRBcHBseVN1cHBvcnRlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IEZldGNoRmlsdGVyUmVzdHJpY3Rpb25zIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9maWx0ZXIvRmlsdGVyUmVzdHJpY3Rpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEZpbHRlclJlc3RyaWN0aW9uc1Byb3BlcnR5SW5mb1R5cGUsXG5cdFNvcnRSZXN0cmljdGlvbnNJbmZvVHlwZSxcblx0U29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5SW5mb1R5cGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCB7IGdldEZpbHRlcmFibGVEYXRhLCBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbywgaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXplZENvbGxlY3Rpb25CaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbGxlY3Rpb25CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgTWFjcm9zRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0SGVscGVyXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGaWx0ZXJDb250cm9sIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IHR5cGUgeyAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBVSTVFbGVtZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRWxlbWVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2NoYXJ0L0NoYXJ0SXRlbVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRQcm9wZXJ0eSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9DaGFydFByb3BlcnR5XCI7XG5pbXBvcnQgdHlwZSBJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2NoYXJ0L0l0ZW1cIjtcbmltcG9ydCBDaGFydEl0ZW1Sb2xlVHlwZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9DaGFydEl0ZW1Sb2xlVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRQMTNuTW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9DaGFydFAxM25Nb2RlXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgQmFzZUNoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdml6Q2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeHBhbmRQYXRoVHlwZSwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbiwgTWV0YU1vZGVsUHJvcGVydHkgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIE1ldGFNb2RlbEVudW0gfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDaGFydFR5cGUgZnJvbSBcIi4uL0NoYXJ0XCI7XG5pbXBvcnQgRmlsdGVyQmFyRGVsZWdhdGUgZnJvbSBcIi4uL2ZpbHRlckJhci9GaWx0ZXJCYXJEZWxlZ2F0ZVwiO1xuXG5jb25zdCBDaGFydERlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgQmFzZUNoYXJ0RGVsZWdhdGUpO1xuQmFzZUNoYXJ0RGVsZWdhdGUuYXBpVmVyc2lvbiA9IDI7XG5DaGFydERlbGVnYXRlLl9sb2FkQ2hhcnQgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGF3YWl0IExpYnJhcnkubG9hZCh7IG5hbWU6IFwic2FwLmNoYXJ0XCIgfSk7XG5cdHJldHVybiBCYXNlQ2hhcnREZWxlZ2F0ZS5fbG9hZENoYXJ0KCk7XG59O1xuXG5DaGFydERlbGVnYXRlLl9oYW5kbGVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0b0NvbnRleHQ6IENvbnRleHQsXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdG1FbnRpdHlTZXRBbm5vdGF0aW9uczogTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbixcblx0bUtub3duQWdncmVnYXRhYmxlUHJvcHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgbGFiZWw6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+Pixcblx0bUN1c3RvbUFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRhUHJvcGVydGllczogQ2hhcnRQcm9wZXJ0eVtdLFxuXHRzQ3JpdGljYWxpdHk6IHN0cmluZyxcblx0dW5pdE9mTWVhc3VyZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcblx0Y29uc3Qgb0FwcGx5U3VwcG9ydGVkID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcImFwcGx5U3VwcG9ydGVkXCIpKSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRjb25zdCBzb3J0UmVzdHJpY3Rpb25zSW5mbyA9IGdldFNvcnRSZXN0cmljdGlvbnNJbmZvKG1FbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gb01EQ0NoYXJ0LmRhdGEoXCJlbnRpdHlUeXBlXCIpO1xuXHRjb25zdCBkYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVR5cGVQYXRoKSk7XG5cdGNvbnN0IGZpbHRlclJlc3RyaWN0aW9uczogRmlsdGVyUmVzdHJpY3Rpb25zID0gRmV0Y2hGaWx0ZXJSZXN0cmljdGlvbnMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwoXG5cdFx0ZGF0YU1vZGVsIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuXHQpO1xuXHRjb25zdCBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlPiA9IHt9O1xuXHRnZXRGaWx0ZXJhYmxlRGF0YShcblx0XHRwcm9wZXJ0eUZpbHRlcmFibGVEYXRhLFxuXHRcdGZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyxcblx0XHRPYmplY3Qua2V5cyhmaWx0ZXJSZXN0cmljdGlvbnMuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zKVxuXHQpO1xuXHRjb25zdCBvT2JqID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRPYmplY3Qob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0Y29uc3Qgc0tleSA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0T2JqZWN0KGAke29Db250ZXh0LmdldFBhdGgoKX1Ac2FwdWkubmFtZWApIGFzIHN0cmluZztcblx0Y29uc3QgYU1vZGVzID0gb01EQ0NoYXJ0LmdldFAxM25Nb2RlKCk7XG5cdGNoZWNrRm9yTm9uZmlsdGVyYWJsZUVudGl0eVNldChvTURDQ2hhcnQsIGFNb2Rlcyk7XG5cblx0aWYgKG9PYmogJiYgb09iai4ka2luZCA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0Ly8gaWdub3JlIChhcyBmb3Igbm93KSBhbGwgY29tcGxleCBwcm9wZXJ0aWVzXG5cdFx0Ly8gbm90IGNsZWFyIGlmIHRoZXkgbWlnaHQgYmUgbmVzdGluZyAoY29tcGxleCBpbiBjb21wbGV4KVxuXHRcdC8vIG5vdCBjbGVhciBob3cgdGhleSBhcmUgcmVwcmVzZW50ZWQgaW4gbm9uLWZpbHRlcmFibGUgYW5ub3RhdGlvblxuXHRcdC8vIGV0Yy5cblx0XHRpZiAob09iai4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHQvL0xvZy53YXJuaW5nKFwiQ29tcGxleCBwcm9wZXJ0eSB3aXRoIHR5cGUgXCIgKyBvT2JqLiRUeXBlICsgXCIgaGFzIGJlZW4gaWdub3JlZFwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfUBgKTtcblx0XHRjb25zdCBzUGF0aCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXCJAc2FwdWkubmFtZVwiLCBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQob0NvbnRleHQuZ2V0UGF0aCgpKSk7XG5cblx0XHRjb25zdCBhR3JvdXBhYmxlUHJvcGVydGllcyA9IG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuR3JvdXBhYmxlUHJvcGVydGllcztcblx0XHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0XHRsZXQgYkdyb3VwYWJsZSA9IGFHcm91cGFibGVQcm9wZXJ0aWVzID8gY2hlY2tQcm9wZXJ0eVR5cGUoYUdyb3VwYWJsZVByb3BlcnRpZXMsIHNQYXRoKSA6IGZhbHNlO1xuXHRcdGxldCBiQWdncmVnYXRhYmxlID0gYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPyBjaGVja1Byb3BlcnR5VHlwZShhQWdncmVnYXRhYmxlUHJvcGVydGllcywgc1BhdGgpIDogZmFsc2U7XG5cdFx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IE9iamVjdC5rZXlzKG1DdXN0b21BZ2dyZWdhdGVzKTtcblxuXHRcdGlmICghYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmICFhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiR3JvdXBhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKCFhQWdncmVnYXRhYmxlUHJvcGVydGllcyB8fCAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgIWFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdO1xuXHRcdH1cblx0XHRpZiAoY3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSkge1xuXHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly9SaWdodCBub3c6IHNraXAgdGhlbSwgc2luY2Ugd2UgY2FuJ3QgY3JlYXRlIGEgY2hhcnQgZnJvbSBpdFxuXHRcdGlmICghYkdyb3VwYWJsZSAmJiAhYkFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb3BlcnR5RmlsdGVyYWJsZSA9IENvbW1vbkhlbHBlci5pc1Byb3BlcnR5RmlsdGVyYWJsZShvQ29udGV4dCk7XG5cdFx0aWYgKGJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGVQcm9wZXJ0aWVzID0gQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZShcblx0XHRcdFx0b01EQ0NoYXJ0LFxuXHRcdFx0XHRzS2V5LFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdFx0XHRzb3J0UmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHMsXG5cdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdFx0XHRvT2JqLiRUeXBlXG5cdFx0XHQpO1xuXHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob0FnZ3JlZ2F0ZVByb3BlcnR5OiBDaGFydFByb3BlcnR5KSB7XG5cdFx0XHRcdC8vIGlmIGEgcHJvcGVydHkgaXMgVU9NIHRoZW4gZG8gbm90IGFkZCBpdCB0byBtZWFzdXJlc1xuXHRcdFx0XHRpZiAoIXVuaXRPZk1lYXN1cmVzLmluY2x1ZGVzKG9BZ2dyZWdhdGVQcm9wZXJ0eS5wYXRoKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzLnB1c2gob0FnZ3JlZ2F0ZVByb3BlcnR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvL0FkZCB0cmFuc2Zvcm1hdGlvbiBhZ2dyZWdhdGVkIHByb3BlcnRpZXMgdG8gY2hhcnQgcHJvcGVydGllc1xuXHRcdFx0aWYgKGFNb2RlcyAmJiBhTW9kZXMuaW5jbHVkZXMoXCJGaWx0ZXJcIikpIHtcblx0XHRcdFx0Y29uc3QgYUtub3duQWdncmVnYXRhYmxlUHJvcHMgPSBPYmplY3Qua2V5cyhtS25vd25BZ2dyZWdhdGFibGVQcm9wcyk7XG5cdFx0XHRcdGNvbnN0IGFHcm91cGFibGVQcm9wZXJ0aWVzVmFsdWVzID0gYUdyb3VwYWJsZVByb3BlcnRpZXM/Lm1hcChcblx0XHRcdFx0XHQob1Byb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9KSA9PiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBBZGQgdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlZCBwcm9wZXJ0eSB0byBjaGFydCBzbyB0aGF0IGluIHRoZSBmaWx0ZXIgZHJvcGRvd24gaXQncyB2aXNpYmxlXG5cdFx0XHRcdC8vIEFsc28gbWFyayB2aXNpYmlsaXR5IGZhbHNlIGFzIHRoaXMgcHJvcGVydHkgc2hvdWxkIG5vdCBjb21lIHVwIGluIHVuZGVyIGNoYXJ0IHNlY3Rpb24gb2YgcGVyc29uYWxpemF0aW9uIGRpYWxvZ1xuXHRcdFx0XHQvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSB0aGVuIGRvIG5vdCBhZGQgaXQgdG8gbWVhc3VyZXNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFLbm93bkFnZ3JlZ2F0YWJsZVByb3BzLmluY2x1ZGVzKHNLZXkpICYmXG5cdFx0XHRcdFx0IWFHcm91cGFibGVQcm9wZXJ0aWVzVmFsdWVzPy5pbmNsdWRlcyhzS2V5KSAmJlxuXHRcdFx0XHRcdCF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhzS2V5KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhUHJvcGVydGllcyA9IGFkZFByb3BlcnR5VG9DaGFydChcblx0XHRcdFx0XHRcdGFQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0c0tleSxcblx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSA/IGZhbHNlIDogY2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUoc0tleSwgcHJvcGVydHlGaWx0ZXJhYmxlLCBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhKSxcblx0XHRcdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRcdFx0XHRcdGZhbHNlLCAvLyAnaXNTb3J0YWJsZScgaXMgc2V0IHRvICdmYWxzZScgdG8gYXZvaWQgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIHNvcnQgcXVldWUgZm9yIGFnZ3JlZ2F0YWJsZSBwcm9wZXJ0aWVzLiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IHF1ZXVlZCBmb3Igc29ydGluZyBpbiB0aGUgJ2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUnIG1ldGhvZC5cblx0XHRcdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0XHRcdHNDcml0aWNhbGl0eSxcblx0XHRcdFx0XHRcdG9PYmosXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYkdyb3VwYWJsZSkge1xuXHRcdFx0Y29uc3Qgc05hbWUgPSBzS2V5IHx8IFwiXCIsXG5cdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5UZXh0XVxuXHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuVGV4dF0uJFBhdGhcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgYklzTmF2aWdhdGlvblRleHQgPSBmYWxzZTtcblx0XHRcdGlmIChzTmFtZSAmJiBzTmFtZS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBQcm9wZXJ0eTogJHtzTmFtZX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoc1RleHRQcm9wZXJ0eSAmJiBzVGV4dFByb3BlcnR5LmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBUZXh0IFByb3BlcnR5OiAke3NUZXh0UHJvcGVydHl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0YklzTmF2aWdhdGlvblRleHQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0YVByb3BlcnRpZXMgPSBhZGRQcm9wZXJ0eVRvQ2hhcnQoXG5cdFx0XHRcdGFQcm9wZXJ0aWVzLFxuXHRcdFx0XHRzS2V5LFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0Y2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUoc0tleSwgcHJvcGVydHlGaWx0ZXJhYmxlLCBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhKVxuXHRcdFx0XHRcdD8gKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgJiYgdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSkpIHx8ICF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhzS2V5KVxuXHRcdFx0XHRcdDogZmFsc2UsIC8vIFVPTSBwcm9wZXJ0eSBzaG91bGQgYmUgZmlsdGVyYWJsZSBpZiBpdCBpcyBtYXJrZWQgYXMgY3VzdG9tIGFnZ3JlZ2F0ZSBhcyB3ZWxsIGFzIGdyb3VwYWJsZVxuXHRcdFx0XHRmaWx0ZXJSZXN0cmljdGlvbnMsXG5cdFx0XHRcdENoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlKG9NRENDaGFydCwgc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NLZXldLCBmYWxzZSksXG5cdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0c0NyaXRpY2FsaXR5LFxuXHRcdFx0XHRvT2JqLFxuXHRcdFx0XHQhY3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSB8fCAoY3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSAmJiB1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhzS2V5KSkgPyB0cnVlIDogZmFsc2UsIC8vIGlmIGEgcHJvcGVydHkgaXMgVU9NLCBtYXJrZWQgYXMgY3VzdG9tIGFnZ3JlZ2F0ZSBhbmQgZ3JvdXBhYmxlIHRoZW4gc2hvdyBpdCBpbiBkaW1lbnNpb25zXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRiSXNOYXZpZ2F0aW9uVGV4dFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgcHJvcGVydGllcyB3aGljaCBhcmUgbWFya2VkIGFzIHVuaXQgb2YgbWVhc3VyZS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIGNoYXJ0XG4gKiBAcGFyYW0gbWV0YU1vZGVsICBNZXRhTW9kZWxcbiAqIEBwYXJhbSBlbnRpdHlTZXRQYXRoIEVudGl0eSBzZXQgcGF0aFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pdCBvZiBtZWFzdXJlc1xuICovXG5mdW5jdGlvbiBfZ2V0VW5pdE9mTWVhc3VyZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0UGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRjb25zdCB1bml0T2ZNZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0Zm9yIChjb25zdCBzS2V5IGluIGVudGl0eVR5cGUpIHtcblx0XHRjb25zdCBjb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2VudGl0eVNldFBhdGh9LyR7c0tleX1gKTtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0Py5nZXRQYXRoKCl9QGApO1xuXHRcdGNvbnN0IHVuaXQgPVxuXHRcdFx0KHByb3BlcnR5QW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuSVNPQ3VycmVuY3lcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aCB8fFxuXHRcdFx0KHByb3BlcnR5QW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuVW5pdFwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoO1xuXHRcdGlmICh1bml0ICYmICF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyh1bml0KSkge1xuXHRcdFx0dW5pdE9mTWVhc3VyZXMucHVzaCh1bml0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuaXRPZk1lYXN1cmVzO1xufVxuXG4vLyBjcmVhdGUgcHJvcGVydGllcyBmb3IgY2hhcnRcbmZ1bmN0aW9uIGFkZFByb3BlcnR5VG9DaGFydChcblx0YVByb3BlcnRpZXM6IENoYXJ0UHJvcGVydHlbXSxcblx0c0tleTogc3RyaW5nLFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0aXNGaWx0ZXJhYmxlOiBib29sZWFuLFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRpc1NvcnRhYmxlOiBib29sZWFuLFxuXHRvTURDQ2hhcnQ6IENoYXJ0LFxuXHRzQ3JpdGljYWxpdHk6IHN0cmluZyxcblx0b09iajogTWV0YU1vZGVsUHJvcGVydHksXG5cdGJJc0dyb3VwYWJsZTogYm9vbGVhbixcblx0YklzQWdncmVnYXRhYmxlOiBib29sZWFuLFxuXHRiSXNOYXZpZ2F0aW9uVGV4dD86IGJvb2xlYW4sXG5cdGJJc0hpZGRlbj86IGJvb2xlYW5cbik6IENoYXJ0UHJvcGVydHlbXSB7XG5cdGxldCBjaGFydFJvbGUgPSBDaGFydEl0ZW1Sb2xlVHlwZS5jYXRlZ29yeTtcblx0Y29uc3QgY2hhcnREYXRhID0gb01EQ0NoYXJ0LmRhdGEoXCJjaGFydERpbWVuc2lvbktleUFuZFJvbGVcIik7XG5cblx0aWYgKEFycmF5LmlzQXJyYXkoY2hhcnREYXRhKSkge1xuXHRcdGNoYXJ0RGF0YS5mb3JFYWNoKChyZWNvcmQ6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9KSA9PiB7XG5cdFx0XHRpZiAocmVjb3JkW3NLZXldKSB7XG5cdFx0XHRcdGNoYXJ0Um9sZSA9IHJlY29yZFtzS2V5XS5zcGxpdChcIi9cIikucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgY2hhcnRSb2xlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBDaGFydFByb3BlcnR5ID0ge1xuXHRcdG5hbWU6IFwiX2ZlX2dyb3VwYWJsZV9cIiArIHNLZXksXG5cdFx0bGFiZWw6IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXT8udG9TdHJpbmcoKSB8fCBzS2V5LFxuXHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlLFxuXHRcdGZpbHRlcmFibGU6IGlzRmlsdGVyYWJsZSxcblx0XHRncm91cGFibGU6IGJJc0dyb3VwYWJsZSxcblx0XHRhZ2dyZWdhdGFibGU6IGJJc0FnZ3JlZ2F0YWJsZSxcblx0XHRtYXhDb25kaXRpb25zOiBpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW1wiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJdPy5bc0tleV0/LlswXSkgPyAtMSA6IDEsXG5cdFx0cGF0aDogc0tleSxcblx0XHRyb2xlOiBjaGFydFJvbGUsIC8vc3RhbmRhcmQsIG5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGZyb20gVUkuQ2hhcnQgYW5ub3RhdGlvblxuXHRcdGNyaXRpY2FsaXR5OiBzQ3JpdGljYWxpdHksIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRkYXRhVHlwZTogb09iai4kVHlwZSxcblx0XHR2aXNpYmxlOiBiSXNIaWRkZW4gPyAhYklzSGlkZGVuIDogdHJ1ZSxcblx0XHR0ZXh0UHJvcGVydHk6XG5cdFx0XHQhYklzTmF2aWdhdGlvblRleHQgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0PyAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoXG5cdFx0XHRcdDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdHRleHRGb3JtYXR0ZXI6IChvUHJvcGVydHlBbm5vdGF0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbXG5cdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIlxuXHRcdF0gYXMgTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+XG5cdH07XG5cdC8vIHRpbWVVbml0VHlwZSA9IHVuZGVmaW5lZCAtPiBjcmFzaGVzIHRoZSBjaGFydC4gdGhlcmVmb3JlOlxuXHRjb25zdCB0aW1lVW5pdFR5cGUgPSBDaGFydERlbGVnYXRlLl9nZXRUaW1lVHlwZShvT2JqLCBvUHJvcGVydHlBbm5vdGF0aW9ucyk7XG5cdGlmICh0aW1lVW5pdFR5cGUpIG9Qcm9wZXJ0eS50aW1lVW5pdFR5cGUgPSB0aW1lVW5pdFR5cGU7XG5cblx0aWYgKG9PYmouJFR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHwgb09iai4kVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRzd2l0Y2ggKG9PYmouJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0b1Byb3BlcnR5LmZvcm1hdE9wdGlvbnMgPSB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0b1Byb3BlcnR5LmZvcm1hdE9wdGlvbnMgPSB7IHN0eWxlOiBcInNob3J0XCIgfTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRhUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eSk7XG5cdHJldHVybiBhUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHByb3BlcnR5IGlzIGZpbHRlcmFibGUgb3Igbm90LlxuICogQHBhcmFtIGtleSBQcm9wZXJ0eSBrZXlcbiAqIEBwYXJhbSBwcm9wZXJ0eUZpbHRlcmFibGUgIEZpbHRlciByZXN0cmljdGlvbnNcbiAqIEBwYXJhbSBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhXG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGZvciBhIHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcGVydHlGaWx0ZXJhYmxlKFxuXHRrZXk6IHN0cmluZyxcblx0cHJvcGVydHlGaWx0ZXJhYmxlOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdHByb3BlcnR5RmlsdGVyYWJsZURhdGE6IFJlY29yZDxzdHJpbmcsIEZpbHRlclJlc3RyaWN0aW9uc1Byb3BlcnR5SW5mb1R5cGU+XG4pOiBib29sZWFuIHtcblx0aWYgKHByb3BlcnR5RmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5RmlsdGVyYWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdC8vIHBhdGggYmFzZWQgZmlsdGVyYWJsZSBpcyB5ZXQgdG8gaGFuZGxlIGhlcmUgaW4gZnV0dXJlXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5RmlsdGVyYWJsZURhdGE/LltrZXldPy5maWx0ZXJhYmxlID8/IHRydWU7XG5cdH1cbn1cblxuQ2hhcnREZWxlZ2F0ZS5fZ2V0VGltZVR5cGUgPSBmdW5jdGlvbiAob09iajogTWV0YU1vZGVsUHJvcGVydHksIG9Qcm9wZXJ0eUFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFRpbWVVbml0VHlwZSB8IHVuZGVmaW5lZCB7XG5cdHN3aXRjaCAob09iai4kVHlwZSkge1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS5EYXRlO1xuXHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLmZpc2NhbHllYXI7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclBlcmlvZF0pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS5maXNjYWx5ZWFycGVyaW9kO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyWWVhck1vbnRoXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLnllYXJtb250aDtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhclllYXJRdWFydGVyXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLnllYXJxdWFydGVyO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyWWVhcldlZWtdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcndlZWs7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJEYXRlXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLnllYXJtb250aGRheTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vLyBJZiBlbnRpdHlzZXQgaXMgbm9uIGZpbHRlcmFibGUsdGhlbiBmcm9tIHAxM24gbW9kZXMgcmVtb3ZlIEZpbHRlciBzbyB0aGF0IG9uIFVJIGZpbHRlciBvcHRpb24gZG9lc24ndCBzaG93IHVwXG5mdW5jdGlvbiBjaGVja0Zvck5vbmZpbHRlcmFibGVFbnRpdHlTZXQob01EQ0NoYXJ0OiBDaGFydCwgYU1vZGVzOiAoQ2hhcnRQMTNuTW9kZSB8IGtleW9mIHR5cGVvZiBDaGFydFAxM25Nb2RlKVtdKTogdm9pZCB7XG5cdGNvbnN0IGJFbnRpdHlTZXRGaWxlcmFibGUgPSBvTURDQ2hhcnRcblx0XHQ/LmdldE1vZGVsKClcblx0XHQ/LmdldE1ldGFNb2RlbCgpXG5cdFx0Py5nZXRPYmplY3QoYCR7b01EQ0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKX1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNgKT8uRmlsdGVyYWJsZTtcblx0aWYgKGJFbnRpdHlTZXRGaWxlcmFibGUgIT09IHVuZGVmaW5lZCAmJiAhYkVudGl0eVNldEZpbGVyYWJsZSkge1xuXHRcdGFNb2RlcyA9IGFNb2Rlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gXCJGaWx0ZXJcIik7XG5cdFx0b01EQ0NoYXJ0LnNldFAxM25Nb2RlKGFNb2Rlcyk7XG5cdH1cbn1cblxuLy8gIGNoZWNrIGlmIEdyb3VwYWJsZSAvQWdncmVnYXRhYmxlIHByb3BlcnR5IGlzIHByZXNlbnQgb3Igbm90XG5mdW5jdGlvbiBjaGVja1Byb3BlcnR5VHlwZShcblx0YVByb3BlcnRpZXM6IChFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+ICYgeyBQcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8UHJvcGVydHlQYXRoPiB9KVtdLFxuXHRzUGF0aDogc3RyaW5nXG4pOiB0cnVlIHwgdW5kZWZpbmVkIHtcblx0aWYgKGFQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhUHJvcGVydGllcykge1xuXHRcdFx0aWYgKGVsZW1lbnQ/LiRQcm9wZXJ0eVBhdGggPT09IHNQYXRoIHx8IGVsZW1lbnQ/LlByb3BlcnR5Py4kUHJvcGVydHlQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuQ2hhcnREZWxlZ2F0ZS5mb3JtYXRUZXh0ID0gZnVuY3Rpb24gKG9WYWx1ZTE6IHN0cmluZywgb1ZhbHVlMjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgc1ZhbHVlID0gdGhpcy50eXBlQ29uZmlnPy50eXBlSW5zdGFuY2U/LmZvcm1hdFZhbHVlKG9WYWx1ZTEsIFwic3RyaW5nXCIpIHx8IG9WYWx1ZTE7XG5cblx0aWYgKG9WYWx1ZTIpIHtcblx0XHRjb25zdCBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IHRoaXMudGV4dEZvcm1hdHRlcjtcblxuXHRcdGlmIChcblx0XHRcdCFvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiB8fFxuXHRcdFx0b1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0Rmlyc3RcIlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMob1ZhbHVlMiwgc1ZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhzVmFsdWUsIG9WYWx1ZTIpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvVmFsdWUyIHx8IHNWYWx1ZTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSBpbGx1c3RyYXRlZCBtZXNzYWdlIHdpdGggYSBuZXcgdGl0bGUsIGRlc2NyaXB0aW9uLCBhbmQgdHlwZS5cbiAqIEBwYXJhbSBvQ2hhcnQgUmVmZXJlbmNlIHRvIHRoZSBNRENfQ2hhcnRcbiAqIEBwYXJhbSBpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwgT2JqZWN0IGNvcnJlc3BvbmRzIHRvIHRoZSBpbGx1c3RyYXRlZCBtZXNzYWdlXG4gKi9cbkNoYXJ0RGVsZWdhdGUuX3VwZGF0ZUlsbHVzdHJhdGVkTWVzc2FnZSA9IGZ1bmN0aW9uIChvQ2hhcnQ6IENoYXJ0LCBpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWw6ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyk6IHZvaWQge1xuXHRjb25zdCBub0RhdGFDb250cm9sID0gb0NoYXJ0LmdldE5vRGF0YSgpIGFzIElsbHVzdHJhdGVkTWVzc2FnZTtcblx0bm9EYXRhQ29udHJvbC5zZXRUaXRsZShpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwudGl0bGUpO1xuXHRub0RhdGFDb250cm9sLnNldERlc2NyaXB0aW9uKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC5kZXNjcmlwdGlvbik7XG5cdG5vRGF0YUNvbnRyb2wuc2V0SWxsdXN0cmF0aW9uVHlwZShpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwuaWxsdXN0cmF0aW9uVHlwZSB8fCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllcyk7XG5cdG5vRGF0YUNvbnRyb2wuc2V0SWxsdXN0cmF0aW9uU2l6ZShpbGx1c3RyYXRlZE1lc3NhZ2VEZXRhaWwuaWxsdXN0cmF0aW9uU2l6ZSB8fCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkF1dG8pO1xufTtcblxuLyoqXG4gKiBXZSBzZXQgdGhlIGlsbHVzdHJhdGVkIG1lc3NhZ2UncyB0aXRsZSwgZGVzY3JpcHRpb24sIGFuZCB0eXBlIGJhc2VkIG9uIGRpZmZlcmVudCBjb25kaXRpb25zLlxuICogQHBhcmFtIGNoYXJ0IFJlZmVyZW5jZSB0byB0aGUgTURDX0NoYXJ0XG4gKiBAcGFyYW0gYmluZGluZ0luZm8gQmluZGluZ0luZm9cbiAqL1xuQ2hhcnREZWxlZ2F0ZS5zZXRDaGFydE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSA9IGZ1bmN0aW9uIChjaGFydDogQ2hhcnQsIGJpbmRpbmdJbmZvOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwoY2hhcnQpO1xuXHRsZXQgaWxsdXN0cmF0ZWRJbmZvcm1hdGlvbjogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzID0ge307XG5cdGNvbnN0IGNvbnZlcnRlclR5cGUgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNoYXJ0KS5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGU7XG5cdGNvbnN0IG9DaGFydEZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8oY2hhcnQpO1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJpbmRpbmdJbmZvLnBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBiaW5kaW5nSW5mby5wYXRoLnN1YnN0cigxKSA6IGJpbmRpbmdJbmZvLnBhdGg7XG5cdGNvbnN0IGdldE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZVdpdGhGaWx0ZXJzID0gZnVuY3Rpb24gKCk6ICRJbGx1c3RyYXRlZE1lc3NhZ2VTZXR0aW5ncyB7XG5cdFx0aWYgKGNoYXJ0LmRhdGEoXCJtdWx0aVZpZXdzXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT1NFQVJDSFJFU1VMVFNcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfTVVMVElfVklFV1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZTogSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0ZpbHRlclJlc3VsdHNcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRfV0lUSF9GSUxURVJcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRmlsdGVyUmVzdWx0cyxcblx0XHRcdGlsbHVzdHJhdGlvblNpemU6IGNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiID8gSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5TbWFsbCA6IElsbHVzdHJhdGVkTWVzc2FnZVNpemUuQXV0b1xuXHRcdH07XG5cdH07XG5cblx0aWYgKGNoYXJ0LmdldEZpbHRlcigpICYmIGNvbnZlcnRlclR5cGUgIT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0aWYgKG9DaGFydEZpbHRlckluZm8uc2VhcmNoIHx8IG9DaGFydEZpbHRlckluZm8uZmlsdGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob0NoYXJ0RmlsdGVySW5mby5zZWFyY2ggfHwgb0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGgpIHtcblx0XHQvL2NoZWNrIGlmIGNoYXJ0IGhhcyBhbnkgcGVyc29uYWxpemF0aW9uIGZpbHRlcnNcblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0gZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMoKTtcblx0fSBlbHNlIHtcblx0XHRpbGx1c3RyYXRlZEluZm9ybWF0aW9uID0ge1xuXHRcdFx0dGl0bGU6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfSUxMVVNUUkFURURfTUVTU0FHRV9USVRMRV9OT0RBVEFcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRkZXNjcmlwdGlvbjogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSksXG5cdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllcyxcblx0XHRcdGlsbHVzdHJhdGlvblNpemU6IElsbHVzdHJhdGVkTWVzc2FnZVNpemUuU21hbGxcblx0XHR9O1xuXHR9XG5cblx0Q2hhcnREZWxlZ2F0ZS5fdXBkYXRlSWxsdXN0cmF0ZWRNZXNzYWdlKGNoYXJ0LCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAob0NoYXJ0OiBDaGFydCwgb0JpbmRpbmdJbmZvOiBTZXJpYWxpemVkQ29sbGVjdGlvbkJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdGNvbnN0IGludGVybmFsQmluZGluZ0NvbnRleHQgPSBvQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRpbnRlcm5hbEJpbmRpbmdDb250ZXh0LnNldFByb3BlcnR5KFwiaXNJbnNpZ2h0c0VuYWJsZWRcIiwgdHJ1ZSk7XG5cdENoYXJ0RGVsZWdhdGUuc2V0Q2hhcnROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2Uob0NoYXJ0LCBvQmluZGluZ0luZm8pO1xuXHRjb25zdCBvRmlsdGVyID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChvQ2hhcnQuZ2V0RmlsdGVyKCkpO1xuXHRjb25zdCBtQ29uZGl0aW9ucyA9IG9DaGFydC5nZXRDb25kaXRpb25zKCk7XG5cdGlmICghb0JpbmRpbmdJbmZvKSB7XG5cdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdH1cblx0aWYgKCFvQmluZGluZ0luZm8ucGFyYW1ldGVycykge1xuXHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzID0ge307XG5cdH1cblx0aWYgKG9GaWx0ZXIpIHtcblx0XHQvLyBTZWFyY2hcblx0XHRjb25zdCBvSW5mbyA9IEZpbHRlclV0aWxzLmdldEZpbHRlckluZm8ob0ZpbHRlciBhcyBJRmlsdGVyQ29udHJvbCwge30pO1xuXHRcdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSkgYXMgQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0XHRpZiAob0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2ggJiYgb0luZm8uc2VhcmNoKSB7XG5cdFx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShvSW5mby5zZWFyY2gpO1xuXHRcdH0gZWxzZSBpZiAob0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCkge1xuXHRcdFx0ZGVsZXRlIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHNQYXJhbWV0ZXJQYXRoID0gbUNvbmRpdGlvbnMgPyBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8ob0ZpbHRlciwgbUNvbmRpdGlvbnMpIDogbnVsbDtcblx0aWYgKHNQYXJhbWV0ZXJQYXRoKSB7XG5cdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBzUGFyYW1ldGVyUGF0aDtcblx0fVxuXHRjb25zdCBvRmlsdGVySW5mbyA9IENoYXJ0VXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhvQ2hhcnQpO1xuXHRpZiAob0ZpbHRlckluZm8uYmluZGluZ1BhdGgpIHtcblx0XHRvQmluZGluZ0luZm8ucGF0aCA9IG9GaWx0ZXJJbmZvLmJpbmRpbmdQYXRoO1xuXHR9XG5cblx0aWYgKG9CaW5kaW5nSW5mby5wYXRoICYmIG9DaGFydC5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBDaGFydEhlbHBlci5nZXRDb2xsZWN0aW9uTmFtZShvQmluZGluZ0luZm8ucGF0aCk7XG5cdH1cblxuXHQvLyByZW1vdmUgcHJlZml4ZXMgc28gdGhhdCBlbnRpdHlzZXQgd2lsbCBtYXRjaCB3aXRoIHRoZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRoZXNlIGZpZWxkXG5cdGlmIChvRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0b0ZpbHRlckluZm8uZmlsdGVycy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0KGVsZW1lbnQgYXMgdW5rbm93biBhcyB7IHNQYXRoOiBzdHJpbmcgfSkuc1BhdGggPSAob0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZSkuZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzKFxuXHRcdFx0XHRcdGVsZW1lbnQuZ2V0UGF0aCgpIVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdG9CaW5kaW5nSW5mby5ldmVudHMgPz89IHt9O1xuXHRvQmluZGluZ0luZm8uZXZlbnRzLmRhdGFSZXF1ZXN0ZWQgPSAob0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZSkub25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQuYmluZChvQ2hhcnQuZ2V0UGFyZW50KCkpO1xuXG5cdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gb0ZpbHRlckluZm8uZmlsdGVycy5sZW5ndGggPiAwID8gbmV3IEZpbHRlcih7IGZpbHRlcnM6IG9GaWx0ZXJJbmZvLmZpbHRlcnMsIGFuZDogdHJ1ZSB9KSA6IHVuZGVmaW5lZDtcblx0b0JpbmRpbmdJbmZvLnNvcnRlciA9IHRoaXMuZ2V0U29ydGVycyhvQ2hhcnQpO1xuXHRDaGFydERlbGVnYXRlLl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyKG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQpOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPiB7XG5cdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX2dldE1vZGVsKG9NRENDaGFydCk7XG5cdGxldCBwQ3JlYXRlUHJvcGVydHlJbmZvczogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT47XG5cblx0aWYgKCFvTW9kZWwpIHtcblx0XHRwQ3JlYXRlUHJvcGVydHlJbmZvcyA9IG5ldyBQcm9taXNlPE9EYXRhTW9kZWw+KChyZXNvbHZlKTogdm9pZCA9PiB7XG5cdFx0XHRvTURDQ2hhcnQuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cmVzb2x2ZXI6IHJlc29sdmVcblx0XHRcdFx0fSxcblx0XHRcdFx0b25Nb2RlbENvbnRleHRDaGFuZ2UgYXMgKGV2OiBVSTVFdmVudCkgPT4gdm9pZCxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHR9KS50aGVuKChvUmV0cmlldmVkTW9kZWw6IE9EYXRhTW9kZWwpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKG9NRENDaGFydCwgb1JldHJpZXZlZE1vZGVsKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRwQ3JlYXRlUHJvcGVydHlJbmZvcyA9IHRoaXMuX2NyZWF0ZVByb3BlcnR5SW5mb3Mob01EQ0NoYXJ0LCBvTW9kZWwpO1xuXHR9XG5cblx0cmV0dXJuIHBDcmVhdGVQcm9wZXJ0eUluZm9zLnRoZW4oZnVuY3Rpb24gKGFQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSkge1xuXHRcdGlmIChvTURDQ2hhcnQuZGF0YSkge1xuXHRcdFx0b01EQ0NoYXJ0LmRhdGEoXCIkbWRjQ2hhcnRQcm9wZXJ0eUluZm9cIiwgYVByb3BlcnRpZXMpO1xuXHRcdFx0Ly8gc3RvcmUgdGhlIHByb3BlcnRpZXMgdG8gZmV0Y2ggZHVyaW5nIHAxM24gY2FsY3VsYXRpb25cblx0XHRcdE1hY3Jvc0RlbGVnYXRlVXRpbC5zZXRDYWNoZWRQcm9wZXJ0aWVzKG9NRENDaGFydCwgYVByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BlcnRpZXM7XG5cdH0pO1xufTtcbmZ1bmN0aW9uIG9uTW9kZWxDb250ZXh0Q2hhbmdlKHRoaXM6IHR5cGVvZiBDaGFydERlbGVnYXRlLCBvRXZlbnQ6IFVJNUV2ZW50PHt9LCBDaGFydD4sIG9EYXRhOiB7IHJlc29sdmVyOiBGdW5jdGlvbiB9KTogdm9pZCB7XG5cdGNvbnN0IG9NRENDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblxuXHRpZiAob01vZGVsKSB7XG5cdFx0b01EQ0NoYXJ0LmRldGFjaE1vZGVsQ29udGV4dENoYW5nZShvbk1vZGVsQ29udGV4dENoYW5nZSBhcyAoZXY6IFVJNUV2ZW50KSA9PiB2b2lkKTtcblx0XHRvRGF0YS5yZXNvbHZlcihvTW9kZWwpO1xuXHR9XG59XG5DaGFydERlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zID0gYXN5bmMgZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQsIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgLyR7b01EQ0NoYXJ0LmRhdGEoXCJlbnRpdHlTZXRcIil9YDtcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBhUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L2ApLCBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGApXSk7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IGFSZXN1bHRzWzBdO1xuXHRjb25zdCBtRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBhUmVzdWx0c1sxXTtcblx0Y29uc3QgbUN1c3RvbUFnZ3JlZ2F0ZXMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwiY3VzdG9tQWdnXCIpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0Z2V0Q3VzdG9tQWdncmVnYXRlKG1DdXN0b21BZ2dyZWdhdGVzLCBvTURDQ2hhcnQpO1xuXHRsZXQgc0Fubm87XG5cdGZvciAoY29uc3Qgc0Fubm9LZXkgaW4gbUVudGl0eVNldEFubm90YXRpb25zKSB7XG5cdFx0aWYgKHNBbm5vS2V5LnN0YXJ0c1dpdGgoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZVwiKSkge1xuXHRcdFx0c0Fubm8gPSBzQW5ub0tleS5yZXBsYWNlKFwiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5DdXN0b21BZ2dyZWdhdGUjXCIsIFwiXCIpO1xuXHRcdFx0Y29uc3QgYUFubm8gPSBzQW5uby5zcGxpdChcIkBcIik7XG5cblx0XHRcdGlmIChhQW5uby5sZW5ndGggPT0gMiAmJiBhQW5ub1sxXSA9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiKSB7XG5cdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW2FBbm5vWzBdXSA9IG1FbnRpdHlTZXRBbm5vdGF0aW9uc1tzQW5ub0tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG1UeXBlQWdncmVnYXRhYmxlUHJvcHMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwidHJhbnNBZ2dcIikpIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0eyBwcm9wZXJ0eVBhdGg6IHN0cmluZzsgYWdncmVnYXRpb25NZXRob2Q6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1cblx0Pjtcblx0Y29uc3QgbUtub3duQWdncmVnYXRhYmxlUHJvcHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+PiA9IHt9O1xuXHRmb3IgKGNvbnN0IHNBZ2dyZWdhdGFibGUgaW4gbVR5cGVBZ2dyZWdhdGFibGVQcm9wcykge1xuXHRcdGNvbnN0IHNQcm9wS2V5ID0gbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5wcm9wZXJ0eVBhdGg7XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldID0gbUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldIHx8IHt9O1xuXHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NQcm9wS2V5XVttVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLmFnZ3JlZ2F0aW9uTWV0aG9kXSA9IHtcblx0XHRcdG5hbWU6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubmFtZSxcblx0XHRcdGxhYmVsOiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLmxhYmVsXG5cdFx0fTtcblx0fVxuXHRjb25zdCB1bml0T2ZNZWFzdXJlcyA9IF9nZXRVbml0T2ZNZWFzdXJlcyhvRW50aXR5VHlwZSwgb01ldGFNb2RlbCwgc0VudGl0eVNldFBhdGgpO1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoc0tleS5pbmRleE9mKFwiJFwiKSAhPT0gMCkge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHkgPSBDaGFydEhlbHBlci5mZXRjaENyaXRpY2FsaXR5KG9NZXRhTW9kZWwsIG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0VudGl0eVNldFBhdGh9LyR7c0tleX1gKSEpO1xuXHRcdFx0Q2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkoXG5cdFx0XHRcdG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7c0VudGl0eVNldFBhdGh9LyR7c0tleX1gKSxcblx0XHRcdFx0b01EQ0NoYXJ0LFxuXHRcdFx0XHRtRW50aXR5U2V0QW5ub3RhdGlvbnMsXG5cdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHRcdFx0YVByb3BlcnRpZXMsXG5cdFx0XHRcdGNyaXRpY2FsaXR5LFxuXHRcdFx0XHR1bml0T2ZNZWFzdXJlc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gZ2V0Q3VzdG9tQWdncmVnYXRlKG1DdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb01EQ0NoYXJ0OiBDaGFydCk6IHZvaWQge1xuXHRjb25zdCBhRGltZW5zaW9uczogc3RyaW5nW10gPSBbXSxcblx0XHRhTWVhc3VyZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChtQ3VzdG9tQWdncmVnYXRlcyAmJiBPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykubGVuZ3RoID49IDEpIHtcblx0XHRjb25zdCBhQ2hhcnRJdGVtcyA9IG9NRENDaGFydC5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGFDaGFydEl0ZW1zKSB7XG5cdFx0XHRpZiAoYUNoYXJ0SXRlbXNba2V5XS5nZXRUeXBlKCkgPT09IFwiZ3JvdXBhYmxlXCIpIHtcblx0XHRcdFx0YURpbWVuc2lvbnMucHVzaChDaGFydERlbGVnYXRlLmdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQoYUNoYXJ0SXRlbXNba2V5XS5nZXRQcm9wZXJ0eUtleSgpLCBcImdyb3VwYWJsZVwiKSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFDaGFydEl0ZW1zW2tleV0uZ2V0VHlwZSgpID09PSBcImFnZ3JlZ2F0YWJsZVwiKSB7XG5cdFx0XHRcdGFNZWFzdXJlcy5wdXNoKFxuXHRcdFx0XHRcdENoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZChhQ2hhcnRJdGVtc1trZXldLmdldFByb3BlcnR5S2V5KCksIFwiYWdncmVnYXRhYmxlXCIpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGFNZWFzdXJlcy5maWx0ZXIoZnVuY3Rpb24gKHZhbDogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiBhRGltZW5zaW9ucy5pbmNsdWRlcyh2YWwpO1xuXHRcdFx0fSkubGVuZ3RoID49IDFcblx0XHQpIHtcblx0XHRcdExvZy5lcnJvcihcIkRpbWVuc2lvbiBhbmQgTWVhc3VyZSBoYXMgdGhlIHNhbWVQcm9wZXJ0eSBDb25maWd1cmVkXCIpO1xuXHRcdH1cblx0fVxufVxuXG5DaGFydERlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlID0gZnVuY3Rpb24gKFxuXHRvTURDQ2hhcnQ6IENoYXJ0LFxuXHRzS2V5OiBzdHJpbmcsXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zLFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRzb3J0UmVzdHJpY3Rpb25zSW5mbzogU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRtS25vd25BZ2dyZWdhdGFibGVQcm9wczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBsYWJlbDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4+LFxuXHRtQ3VzdG9tQWdncmVnYXRlczogeyBbcHJvcGVydHlOYW1lOiBzdHJpbmddOiB1bmtub3duIH0sXG5cdGRhdGFUeXBlOiBzdHJpbmdcbik6IG9iamVjdFtdIHtcblx0Y29uc3QgYUFnZ3JlZ2F0ZVByb3BlcnRpZXM6IG9iamVjdFtdID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtS25vd25BZ2dyZWdhdGFibGVQcm9wcykuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRmb3IgKGNvbnN0IHNBZ2dyZWdhdGFibGUgaW4gbUtub3duQWdncmVnYXRhYmxlUHJvcHNbc0tleV0pIHtcblx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRuYW1lOiBcIl9mZV9hZ2dyZWdhdGFibGVfXCIgKyBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XVtzQWdncmVnYXRhYmxlXS5uYW1lLFxuXHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XVtzQWdncmVnYXRhYmxlXS5sYWJlbCB8fFxuXHRcdFx0XHRcdGAke29Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCB8fFxuXHRcdFx0XHRcdGAke3NLZXl9ICgke3NBZ2dyZWdhdGFibGV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiBzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc0tleV0gPyBzb3J0UmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc0tleV0uc29ydGFibGUgOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0YWdncmVnYXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRwYXRoOiBzS2V5LFxuXHRcdFx0XHRkYXRhVHlwZTogZGF0YVR5cGUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTWV0aG9kOiBzQWdncmVnYXRhYmxlLFxuXHRcdFx0XHRtYXhDb25kaXRpb25zOiBpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW1wiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJdPy5bc0tleV0/LlswXSkgPyAtMSA6IDEsXG5cdFx0XHRcdHJvbGU6IENoYXJ0SXRlbVJvbGVUeXBlLmF4aXMxLFxuXHRcdFx0XHRkYXRhcG9pbnQ6IG51bGwsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdFx0dW5pdFBhdGg6XG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5JU09DdXJyZW5jeVwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoIHx8XG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5Vbml0XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGhcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRpZiAoT2JqZWN0LmtleXMobUN1c3RvbUFnZ3JlZ2F0ZXMpLmluY2x1ZGVzKHNLZXkpKSB7XG5cdFx0Zm9yIChjb25zdCBzQ3VzdG9tIGluIG1DdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRpZiAoc0N1c3RvbSA9PT0gc0tleSkge1xuXHRcdFx0XHRjb25zdCBvSXRlbSA9IG1lcmdlKHt9LCBtQ3VzdG9tQWdncmVnYXRlc1tzQ3VzdG9tXSBhcyBvYmplY3QsIHtcblx0XHRcdFx0XHRuYW1lOiBcIl9mZV9hZ2dyZWdhdGFibGVfXCIgKyBzQ3VzdG9tLFxuXHRcdFx0XHRcdGdyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0YWdncmVnYXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdHJvbGU6IENoYXJ0SXRlbVJvbGVUeXBlLmF4aXMxLFxuXHRcdFx0XHRcdHBhdGg6IHNDdXN0b20sXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IGRhdGFUeXBlLFxuXHRcdFx0XHRcdGRhdGFwb2ludDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHRcdHVuaXRQYXRoOlxuXHRcdFx0XHRcdFx0KG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5JU09DdXJyZW5jeVwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoIHx8XG5cdFx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMucHVzaChvSXRlbSk7XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhQWdncmVnYXRlUHJvcGVydGllcztcbn07XG5DaGFydERlbGVnYXRlLnJlYmluZCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvQmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB2b2lkIHtcblx0Y29uc3Qgc1NlYXJjaCA9IG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cblx0aWYgKHNTZWFyY2gpIHtcblx0XHRkZWxldGUgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0fVxuXG5cdEJhc2VDaGFydERlbGVnYXRlLnJlYmluZChvTURDQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG5cblx0aWYgKHNTZWFyY2gpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IChvTURDQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkgYXMgdHlwZW9mIENoYXJ0RGVsZWdhdGUpLmdldElubmVyQ2hhcnQob01EQ0NoYXJ0KSxcblx0XHRcdG9DaGFydEJpbmRpbmcgPSBvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5nZXRCaW5kaW5nKFwiZGF0YVwiKTtcblxuXHRcdC8vIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHVudGlsIHRoaXMgaXMgZml4ZWQgaW4gTURDQ2hhcnQgLyBVSTUgQ2hhcnRcblx0XHQvLyBJbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgMiBPRGF0YSByZXF1ZXN0cywgd2UgbmVlZCB0byBzdXNwZW5kIHRoZSBiaW5kaW5nIGJlZm9yZSBzZXR0aW5nIHNvbWUgYWdncmVnYXRpb24gcHJvcGVydGllc1xuXHRcdC8vIGFuZCByZXN1bWUgaXQgb25jZSB0aGUgY2hhcnQgaGFzIGFkZGVkIG90aGVyIGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXMgKGluIG9uQmVmb3JlUmVuZGVyaW5nKVxuXHRcdG9DaGFydEJpbmRpbmcuc3VzcGVuZCgpO1xuXHRcdG9DaGFydEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBzZWFyY2g6IHNTZWFyY2ggfSk7XG5cblx0XHRjb25zdCBvSW5uZXJDaGFydERlbGVnYXRlID0ge1xuXHRcdFx0b25CZWZvcmVSZW5kZXJpbmc6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0b0NoYXJ0QmluZGluZy5yZXN1bWUoKTtcblx0XHRcdFx0b0lubmVyQ2hhcnQucmVtb3ZlRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9Jbm5lckNoYXJ0LmFkZEV2ZW50RGVsZWdhdGUob0lubmVyQ2hhcnREZWxlZ2F0ZSk7XG5cdH1cblxuXHRvTURDQ2hhcnQuZmlyZUV2ZW50KFwiYmluZGluZ1VwZGF0ZWRcIik7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBDaGFydCwgb0lubmVyQ2hhcnQ6IHNhcENoYXJ0KTogdm9pZCB7XG5cdGNvbnN0IG9DaGFydEFQSSA9IG9NRENDaGFydC5nZXRQYXJlbnQoKSBhcyBDaGFydFR5cGU7XG5cdG9Jbm5lckNoYXJ0LnNldFZpelByb3BlcnRpZXMob01EQ0NoYXJ0LmRhdGEoXCJ2aXpQcm9wZXJ0aWVzXCIpKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaFNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkgYXMgKGU6IFVJNUV2ZW50PG9iamVjdCwgRXZlbnRQcm92aWRlcj4pID0+IHZvaWQpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hEZXNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkgYXMgKGU6IFVJNUV2ZW50PG9iamVjdCwgRXZlbnRQcm92aWRlcj4pID0+IHZvaWQpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hEcmlsbGVkVXAob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkgYXMgKGU6IFVJNUV2ZW50PG9iamVjdCwgRXZlbnRQcm92aWRlcj4pID0+IHZvaWQpO1xuXG5cdG9Jbm5lckNoYXJ0LnNldFNlbGVjdGlvbk1vZGUoKG9NRENDaGFydC5nZXRQYXlsb2FkKCkgYXMgeyBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfSkuc2VsZWN0aW9uTW9kZS50b1VwcGVyQ2FzZSgpIGFzIFNlbGVjdGlvbk1vZGUpO1xuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnQob01EQ0NoYXJ0LCBvSW5uZXJDaGFydCk7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fZ2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBDaGFydCk6IFByb3BlcnR5QmluZGluZ0luZm8ge1xuXHRpZiAodGhpcy5fZ2V0QmluZGluZ0luZm9Gcm9tU3RhdGUob01EQ0NoYXJ0KSkge1xuXHRcdHJldHVybiB0aGlzLl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZShvTURDQ2hhcnQpO1xuXHR9XG5cblx0Y29uc3Qgb01ldGFkYXRhSW5mbyA9IChvTURDQ2hhcnQuZ2V0RGVsZWdhdGUoKSBhcyB7IHBheWxvYWQ6IHVua25vd24gfSkucGF5bG9hZCBhcyB7IHBhcmFtZXRlcnM6IG9iamVjdDsgY2hhcnRDb250ZXh0UGF0aDogc3RyaW5nIH07XG5cdGNvbnN0IG9QYXJhbXMgPSBtZXJnZSh7fSwgb01ldGFkYXRhSW5mby5wYXJhbWV0ZXJzLCB7XG5cdFx0ZW50aXR5U2V0OiBvTURDQ2hhcnQuZGF0YShcImVudGl0eVNldFwiKVxuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRwYXRoOiBvTWV0YWRhdGFJbmZvLmNoYXJ0Q29udGV4dFBhdGgsXG5cdFx0ZXZlbnRzOiB7XG5cdFx0XHRkYXRhUmVxdWVzdGVkOiAob01EQ0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZSkub25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQuYmluZChvTURDQ2hhcnQuZ2V0UGFyZW50KCkpXG5cdFx0fSxcblx0XHRwYXJhbWV0ZXJzOiBvUGFyYW1zXG5cdH07XG59O1xuQ2hhcnREZWxlZ2F0ZS5yZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBDaGFydCwgb01EQ0NoYXJ0SXRlbTogQ2hhcnRJdGVtKTogdm9pZCB7XG5cdEJhc2VDaGFydERlbGVnYXRlLnJlbW92ZUl0ZW1Gcm9tSW5uZXJDaGFydC5jYWxsKHRoaXMsIG9NRENDaGFydCwgb01EQ0NoYXJ0SXRlbSk7XG5cdGlmIChvTURDQ2hhcnRJdGVtLmdldFR5cGUoKSA9PT0gXCJncm91cGFibGVcIikge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gdGhpcy5nZXRJbm5lckNoYXJ0KG9NRENDaGFydCk7XG5cdFx0b0lubmVyQ2hhcnQuZmlyZURlc2VsZWN0RGF0YSgpO1xuXHR9XG59O1xuQ2hhcnREZWxlZ2F0ZS5fZ2V0U29ydGFibGUgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eTogU29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5SW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdGJJc1RyYW5zQWdncmVnYXRlOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0aWYgKGJJc1RyYW5zQWdncmVnYXRlKSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikudG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eSA/IHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eS5zb3J0YWJsZSA6IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzb3J0UmVzdHJpY3Rpb25zUHJvcGVydHkgPyBzb3J0UmVzdHJpY3Rpb25zUHJvcGVydHkuc29ydGFibGUgOiB0cnVlO1xufTtcbkNoYXJ0RGVsZWdhdGUuX2NoZWNrQW5kQWRkRHJhZnRGaWx0ZXIgPSBmdW5jdGlvbiAob0NoYXJ0OiBDaGFydCwgb0JpbmRpbmdJbmZvOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKTogdm9pZCB7XG5cdGlmIChvQ2hhcnQuZGF0YShcImRyYWZ0U3VwcG9ydGVkXCIpLnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0aWYgKCFvQmluZGluZ0luZm8pIHtcblx0XHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIW9CaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycyA9IFtdO1xuXHRcdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnM/LmFGaWx0ZXJzPy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gSUQgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGludGVybmFsIGNoYXJ0IGZvciB0aGUgbWVhc3VyZSBvciBkaW1lbnNpb24uXG4gKiBGb3Igc3RhbmRhcmQgY2FzZXMsIHRoaXMgaXMganVzdCB0aGUgSUQgb2YgdGhlIHByb3BlcnR5LlxuICogSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBhbm90aGVyIElEIGludGVybmFsbHkgaW5zaWRlIHRoZSBjaGFydCAoZS5nLiBvbiBkdXBsaWNhdGUgcHJvcGVydHkgSURzKSB0aGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4uXG4gKiBJbiB0aGlzIGNhc2UsIDxjb2RlPmdldFByb3BlcnR5RnJvbU5hbWVBbmRLaW5kPC9jb2RlPiBuZWVkcyB0byBiZSBvdmVyd3JpdHRlbiBhcyB3ZWxsLlxuICogQHBhcmFtIG5hbWUgSUQgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ga2luZCBUeXBlIG9mIHRoZSBwcm9wZXJ0eSAobWVhc3VyZSBvciBkaW1lbnNpb24pXG4gKiBAcmV0dXJucyBJbnRlcm5hbCBJRCBmb3IgdGhlIHNhcC5jaGFydC5DaGFydFxuICovXG5DaGFydERlbGVnYXRlLmdldEludGVybmFsQ2hhcnROYW1lRnJvbVByb3BlcnR5TmFtZUFuZEtpbmQgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBraW5kOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gbmFtZS5yZXBsYWNlKFwiX2ZlX1wiICsga2luZCArIFwiX1wiLCBcIlwiKTtcbn07XG5cbi8qKlxuICogVGhpcyBtYXBzIGFuIGlkIG9mIGFuIGludGVybmFsIGNoYXJ0IGRpbWVuc2lvbiBvciBtZWFzdXJlICYgdHlwZSBvZiBhIHByb3BlcnR5IHRvIGl0cyBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGVudHJ5LlxuICogQHBhcmFtIG5hbWUgSUQgb2YgaW50ZXJuYWwgY2hhcnQgbWVhc3VyZSBvciBkaW1lbnNpb25cbiAqIEBwYXJhbSBraW5kIFRoZSBraW5kIG9mIHByb3BlcnR5IHRoYXQgaXMgdXNlZFxuICogQHBhcmFtIG1kY0NoYXJ0IFJlZmVyZW5jZSB0byB0aGUgTURDX0NoYXJ0XG4gKiBAcmV0dXJucyBQcm9wZXJ0eUluZm8gb2JqZWN0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQgPSBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBraW5kOiBzdHJpbmcsIG1kY0NoYXJ0OiBDaGFydCk6IHN0cmluZyB7XG5cdHJldHVybiBtZGNDaGFydC5nZXRQcm9wZXJ0eUhlbHBlcigpLmdldFByb3BlcnR5KFwiX2ZlX1wiICsga2luZCArIFwiX1wiICsgbmFtZSk7XG59O1xuXG4vKipcbiAqIFByb3ZpZGUgdGhlIGNoYXJ0J3MgZmlsdGVyIGRlbGVnYXRlIHRvIHByb3ZpZGUgYmFzaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc3VjaCBhcyBhZGRpbmcgRmlsdGVyRmllbGRzLlxuICogQHJldHVybnMgT2JqZWN0IGZvciB0aGUgcGVyc29uYWxpemF0aW9uIG9mIHRoZSBjaGFydCBmaWx0ZXJcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5nZXRGaWx0ZXJEZWxlZ2F0ZSA9IGZ1bmN0aW9uICgpOiBvYmplY3Qge1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHR7XG5cdFx0XHRhcGlWZXJzaW9uOiAyXG5cdFx0fSxcblx0XHRGaWx0ZXJCYXJEZWxlZ2F0ZSxcblx0XHR7XG5cdFx0XHRhZGRJdGVtOiBhc3luYyBmdW5jdGlvbiAob1BhcmVudENvbnRyb2w6IENvbnRyb2wsIHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ+IHtcblx0XHRcdFx0Y29uc3QgcHJvcCA9IENoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZChzUHJvcGVydHlJbmZvTmFtZSwgXCJncm91cGFibGVcIik7XG5cdFx0XHRcdHJldHVybiBGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtKG9QYXJlbnRDb250cm9sIGFzIEZpbHRlckJhciwgcHJvcCkudGhlbigob0ZpbHRlckl0ZW0pID0+IHtcblx0XHRcdFx0XHQob0ZpbHRlckl0ZW0gYXMgVUk1RWxlbWVudCB8IHVuZGVmaW5lZCk/LmJpbmRQcm9wZXJ0eShcImNvbmRpdGlvbnNcIiwge1xuXHRcdFx0XHRcdFx0cGF0aDogXCIkZmlsdGVycz4vY29uZGl0aW9ucy9cIiArIHNQcm9wZXJ0eUluZm9OYW1lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0KG9GaWx0ZXJJdGVtIGFzIHVua25vd24gYXMgSXRlbSk/LnNldFByb3BlcnR5S2V5KHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckl0ZW0gYXMgVUk1RWxlbWVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hhcnREZWxlZ2F0ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztFQWdFQSxNQUFNQSxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQztFQUMxREEsaUJBQWlCLENBQUNDLFVBQVUsR0FBRyxDQUFDO0VBQ2hDSixhQUFhLENBQUNLLFVBQVUsR0FBRyxrQkFBb0M7SUFDOUQsTUFBTUMsT0FBTyxDQUFDQyxJQUFJLENBQUM7TUFBRUMsSUFBSSxFQUFFO0lBQVksQ0FBQyxDQUFDO0lBQ3pDLE9BQU9MLGlCQUFpQixDQUFDRSxVQUFVLENBQUMsQ0FBQztFQUN0QyxDQUFDO0VBRURMLGFBQWEsQ0FBQ1MsZUFBZSxHQUFHLFVBQy9CQyxRQUFpQixFQUNqQkMsU0FBZ0IsRUFDaEJDLHFCQUFtRCxFQUNuREMsdUJBQXdGLEVBQ3hGQyxpQkFBMEMsRUFD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
635
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydERlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiQmFzZUNoYXJ0RGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiX2xvYWRDaGFydCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsIl9oYW5kbGVQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5IiwidW5pdE9mTWVhc3VyZXMiLCJvQXBwbHlTdXBwb3J0ZWQiLCJDb21tb25IZWxwZXIiLCJwYXJzZUN1c3RvbURhdGEiLCJkYXRhIiwic29ydFJlc3RyaWN0aW9uc0luZm8iLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRDb250ZXh0IiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiRmV0Y2hGaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbCIsInByb3BlcnR5RmlsdGVyYWJsZURhdGEiLCJnZXRGaWx0ZXJhYmxlRGF0YSIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwia2V5cyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsIm9PYmoiLCJnZXRPYmplY3QiLCJnZXRQYXRoIiwic0tleSIsImFNb2RlcyIsImdldFAxM25Nb2RlIiwiY2hlY2tGb3JOb25maWx0ZXJhYmxlRW50aXR5U2V0IiwiJGtpbmQiLCIkaXNDb2xsZWN0aW9uIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJzUGF0aCIsImdldE1ldGFDb250ZXh0IiwiYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYkdyb3VwYWJsZSIsImNoZWNrUHJvcGVydHlUeXBlIiwiYkFnZ3JlZ2F0YWJsZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJsZW5ndGgiLCJpbmNsdWRlcyIsInByb3BlcnR5RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwiYUFnZ3JlZ2F0ZVByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSIsIiRUeXBlIiwiZm9yRWFjaCIsIm9BZ2dyZWdhdGVQcm9wZXJ0eSIsInBhdGgiLCJwdXNoIiwibGFiZWwiLCJzdGFydHNXaXRoIiwiTW9kZWxIZWxwZXIiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TG9jYWxpemVkVGV4dCIsImFLbm93bkFnZ3JlZ2F0YWJsZVByb3BzIiwiYUdyb3VwYWJsZVByb3BlcnRpZXNWYWx1ZXMiLCJtYXAiLCJvUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiYWRkUHJvcGVydHlUb0NoYXJ0IiwiY2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUiLCJzTmFtZSIsInNUZXh0UHJvcGVydHkiLCIkUGF0aCIsImJJc05hdmlnYXRpb25UZXh0IiwiTG9nIiwiZXJyb3IiLCJpbmRleE9mIiwiX2dldFNvcnRhYmxlIiwicHJvcGVydHlJbmZvIiwiX2dldFVuaXRPZk1lYXN1cmVzIiwiZW50aXR5VHlwZSIsImVudGl0eVNldFBhdGgiLCJjb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eUFubm90YXRpb25zIiwidW5pdCIsImlzRmlsdGVyYWJsZSIsIm9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwiaXNTb3J0YWJsZSIsImJJc0dyb3VwYWJsZSIsImJJc0FnZ3JlZ2F0YWJsZSIsImJJc0hpZGRlbiIsImNoYXJ0Um9sZSIsIkNoYXJ0SXRlbVJvbGVUeXBlIiwiY2F0ZWdvcnkiLCJjaGFydERhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJyZWNvcmQiLCJzcGxpdCIsInBvcCIsInRvTG93ZXJDYXNlIiwidG9TdHJpbmciLCJzb3J0YWJsZSIsImZpbHRlcmFibGUiLCJncm91cGFibGUiLCJhZ2dyZWdhdGFibGUiLCJtYXhDb25kaXRpb25zIiwiaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbiIsInJvbGUiLCJjcml0aWNhbGl0eSIsImRhdGFUeXBlIiwidmlzaWJsZSIsInRleHRQcm9wZXJ0eSIsInRleHRGb3JtYXR0ZXIiLCJ0aW1lVW5pdFR5cGUiLCJfZ2V0VGltZVR5cGUiLCJmb3JtYXRPcHRpb25zIiwic3R5bGUiLCJrZXkiLCJUaW1lVW5pdFR5cGUiLCJEYXRlIiwiZmlzY2FseWVhciIsImZpc2NhbHllYXJwZXJpb2QiLCJ5ZWFybW9udGgiLCJ5ZWFycXVhcnRlciIsInllYXJ3ZWVrIiwieWVhcm1vbnRoZGF5IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsIkZpbHRlcmFibGUiLCJmaWx0ZXIiLCJpdGVtIiwic2V0UDEzbk1vZGUiLCJlbGVtZW50IiwiUHJvcGVydHkiLCJmb3JtYXRUZXh0Iiwib1ZhbHVlMSIsIm9WYWx1ZTIiLCJzVmFsdWUiLCJ0eXBlQ29uZmlnIiwidHlwZUluc3RhbmNlIiwiZm9ybWF0VmFsdWUiLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiX3VwZGF0ZUlsbHVzdHJhdGVkTWVzc2FnZSIsIm9DaGFydCIsImlsbHVzdHJhdGVkTWVzc2FnZURldGFpbCIsIm5vRGF0YUNvbnRyb2wiLCJnZXROb0RhdGEiLCJzZXRUaXRsZSIsInRpdGxlIiwic2V0RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldElsbHVzdHJhdGlvblR5cGUiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsInNldElsbHVzdHJhdGlvblNpemUiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkF1dG8iLCJzZXRDaGFydE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZSIsImNoYXJ0IiwiYmluZGluZ0luZm8iLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJpbGx1c3RyYXRlZEluZm9ybWF0aW9uIiwiY29udmVydGVyVHlwZSIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwib0NoYXJ0RmlsdGVySW5mbyIsIkNoYXJ0VXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwic3VmZml4UmVzb3VyY2VLZXkiLCJzdWJzdHIiLCJnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycyIsImdldFRleHQiLCJOb0ZpbHRlclJlc3VsdHMiLCJTbWFsbCIsImdldEZpbHRlciIsInNlYXJjaCIsImZpbHRlcnMiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm9CaW5kaW5nSW5mbyIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwib0ZpbHRlciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIm1Db25kaXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInBhcmFtZXRlcnMiLCJvSW5mbyIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVySW5mbyIsImVuYWJsZVNlYXJjaCIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwic1BhcmFtZXRlclBhdGgiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIm9GaWx0ZXJJbmZvIiwiYmluZGluZ1BhdGgiLCJDaGFydEhlbHBlciIsImdldENvbGxlY3Rpb25OYW1lIiwiZ2V0UGFyZW50IiwiZ2V0Q2hhcnRQcm9wZXJ0aWVzV2l0aG91dFByZWZpeGVzIiwiZXZlbnRzIiwiZGF0YVJlcXVlc3RlZCIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwiYmluZCIsIkZpbHRlciIsImFuZCIsInNvcnRlciIsImdldFNvcnRlcnMiLCJfY2hlY2tBbmRBZGREcmFmdEZpbHRlciIsImZldGNoUHJvcGVydGllcyIsIm9Nb2RlbCIsIl9nZXRNb2RlbCIsInBDcmVhdGVQcm9wZXJ0eUluZm9zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJyZXNvbHZlciIsIm9uTW9kZWxDb250ZXh0Q2hhbmdlIiwidGhlbiIsIm9SZXRyaWV2ZWRNb2RlbCIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zIiwiTWFjcm9zRGVsZWdhdGVVdGlsIiwic2V0Q2FjaGVkUHJvcGVydGllcyIsIm9FdmVudCIsIm9EYXRhIiwiZ2V0U291cmNlIiwiZGV0YWNoTW9kZWxDb250ZXh0Q2hhbmdlIiwic0VudGl0eVNldFBhdGgiLCJvTWV0YU1vZGVsIiwiYVJlc3VsdHMiLCJhbGwiLCJyZXF1ZXN0T2JqZWN0Iiwib0VudGl0eVR5cGUiLCJnZXRDdXN0b21BZ2dyZWdhdGUiLCJzQW5ubyIsInNBbm5vS2V5IiwicmVwbGFjZSIsImFBbm5vIiwibVR5cGVBZ2dyZWdhdGFibGVQcm9wcyIsInNBZ2dyZWdhdGFibGUiLCJzUHJvcEtleSIsInByb3BlcnR5UGF0aCIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiZmV0Y2hDcml0aWNhbGl0eSIsImFEaW1lbnNpb25zIiwiYU1lYXN1cmVzIiwiYUNoYXJ0SXRlbXMiLCJnZXRJdGVtcyIsImdldFR5cGUiLCJnZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kIiwiZ2V0UHJvcGVydHlLZXkiLCJ2YWwiLCJheGlzMSIsImRhdGFwb2ludCIsInVuaXRQYXRoIiwic0N1c3RvbSIsIm9JdGVtIiwibWVyZ2UiLCJyZWJpbmQiLCJzU2VhcmNoIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJnZXRJbm5lckNoYXJ0Iiwib0NoYXJ0QmluZGluZyIsImdldEJpbmRpbmciLCJzdXNwZW5kIiwic2V0QWdncmVnYXRpb24iLCJvSW5uZXJDaGFydERlbGVnYXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJyZXN1bWUiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImZpcmVFdmVudCIsIl9zZXRDaGFydCIsIm9DaGFydEFQSSIsInNldFZpelByb3BlcnRpZXMiLCJkZXRhY2hTZWxlY3REYXRhIiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlIiwiZGV0YWNoRGVzZWxlY3REYXRhIiwiZGV0YWNoRHJpbGxlZFVwIiwiYXR0YWNoU2VsZWN0RGF0YSIsImF0dGFjaERlc2VsZWN0RGF0YSIsImF0dGFjaERyaWxsZWRVcCIsInNldFNlbGVjdGlvbk1vZGUiLCJnZXRQYXlsb2FkIiwic2VsZWN0aW9uTW9kZSIsInRvVXBwZXJDYXNlIiwiX2dldEJpbmRpbmdJbmZvIiwiX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlIiwib01ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsIm9QYXJhbXMiLCJlbnRpdHlTZXQiLCJjaGFydENvbnRleHRQYXRoIiwicmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0Iiwib01EQ0NoYXJ0SXRlbSIsImNhbGwiLCJmaXJlRGVzZWxlY3REYXRhIiwic29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5IiwiYklzVHJhbnNBZ2dyZWdhdGUiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiYUZpbHRlcnMiLCJraW5kIiwiZ2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQiLCJtZGNDaGFydCIsImdldFByb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHkiLCJnZXRGaWx0ZXJEZWxlZ2F0ZSIsIkZpbHRlckJhckRlbGVnYXRlIiwiYWRkSXRlbSIsIm9QYXJlbnRDb250cm9sIiwic1Byb3BlcnR5SW5mb05hbWUiLCJwcm9wIiwib0ZpbHRlckl0ZW0iLCJiaW5kUHJvcGVydHkiLCJzZXRQcm9wZXJ0eUtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnREZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHNhcENoYXJ0IGZyb20gXCJzYXAvY2hhcnQvQ2hhcnRcIjtcbmltcG9ydCBUaW1lVW5pdFR5cGUgZnJvbSBcInNhcC9jaGFydC9UaW1lVW5pdFR5cGVcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uTW9kZSB9IGZyb20gXCJzYXAvY2hhcnQvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0QXBwbHlTdXBwb3J0ZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL2ZpbHRlci9GaWx0ZXJSZXN0cmljdGlvbnNcIjtcbmltcG9ydCBGZXRjaEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWx0ZXJSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlLFxuXHRTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdFNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eUluZm9UeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBnZXRGaWx0ZXJhYmxlRGF0YSwgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyLCB7IGdldExvY2FsaXplZFRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db2xsZWN0aW9uQmluZGluZ0luZm9cIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IE1hY3Jvc0RlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydEhlbHBlclwiO1xuaW1wb3J0IENoYXJ0VXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRmlsdGVyQ29udHJvbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIHsgJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgVUk1RWxlbWVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIENoYXJ0SXRlbSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9DaGFydEl0ZW1cIjtcbmltcG9ydCB0eXBlIENoYXJ0UHJvcGVydHkgZnJvbSBcInNhcC91aS9tZGMvY2hhcnQvQ2hhcnRQcm9wZXJ0eVwiO1xuaW1wb3J0IHR5cGUgSXRlbSBmcm9tIFwic2FwL3VpL21kYy9jaGFydC9JdGVtXCI7XG5pbXBvcnQgQ2hhcnRJdGVtUm9sZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvQ2hhcnRJdGVtUm9sZVR5cGVcIjtcbmltcG9ydCB0eXBlIENoYXJ0UDEzbk1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvQ2hhcnRQMTNuTW9kZVwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC91dGlsL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEJhc2VDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3ZpekNoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sIE1ldGFNb2RlbFByb3BlcnR5IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBNZXRhTW9kZWxFbnVtIH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ2hhcnRUeXBlIGZyb20gXCIuLi9DaGFydFwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCIuLi9maWx0ZXJCYXIvRmlsdGVyQmFyRGVsZWdhdGVcIjtcblxuY29uc3QgQ2hhcnREZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEJhc2VDaGFydERlbGVnYXRlKTtcbkJhc2VDaGFydERlbGVnYXRlLmFwaVZlcnNpb24gPSAyO1xuQ2hhcnREZWxlZ2F0ZS5fbG9hZENoYXJ0ID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRhd2FpdCBMaWJyYXJ5LmxvYWQoeyBuYW1lOiBcInNhcC5jaGFydFwiIH0pO1xuXHRyZXR1cm4gQmFzZUNoYXJ0RGVsZWdhdGUuX2xvYWRDaGFydCgpO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRvTURDQ2hhcnQ6IENoYXJ0LFxuXHRtRW50aXR5U2V0QW5ub3RhdGlvbnM6IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb24sXG5cdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pj4sXG5cdG1DdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0YVByb3BlcnRpZXM6IENoYXJ0UHJvcGVydHlbXSxcblx0c0NyaXRpY2FsaXR5OiBzdHJpbmcsXG5cdHVuaXRPZk1lYXN1cmVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSkgYXMgQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhtRW50aXR5U2V0QW5ub3RhdGlvbnMpO1xuXHRjb25zdCBtZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IG9NRENDaGFydC5kYXRhKFwiZW50aXR5VHlwZVwiKTtcblx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlUeXBlUGF0aCkpO1xuXHRjb25zdCBmaWx0ZXJSZXN0cmljdGlvbnM6IEZpbHRlclJlc3RyaWN0aW9ucyA9IEZldGNoRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKFxuXHRcdGRhdGFNb2RlbCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cblx0KTtcblx0Y29uc3QgcHJvcGVydHlGaWx0ZXJhYmxlRGF0YTogUmVjb3JkPHN0cmluZywgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZT4gPSB7fTtcblx0Z2V0RmlsdGVyYWJsZURhdGEoXG5cdFx0cHJvcGVydHlGaWx0ZXJhYmxlRGF0YSxcblx0XHRmaWx0ZXJSZXN0cmljdGlvbnMuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMsXG5cdFx0T2JqZWN0LmtleXMoZmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucylcblx0KTtcblx0Y29uc3Qgb09iaiA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0T2JqZWN0KG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IHNLZXkgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE9iamVjdChgJHtvQ29udGV4dC5nZXRQYXRoKCl9QHNhcHVpLm5hbWVgKSBhcyBzdHJpbmc7XG5cdGNvbnN0IGFNb2RlcyA9IG9NRENDaGFydC5nZXRQMTNuTW9kZSgpO1xuXHRjaGVja0Zvck5vbmZpbHRlcmFibGVFbnRpdHlTZXQob01EQ0NoYXJ0LCBhTW9kZXMpO1xuXG5cdGlmIChvT2JqICYmIG9PYmouJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdC8vIGlnbm9yZSAoYXMgZm9yIG5vdykgYWxsIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdC8vIG5vdCBjbGVhciBpZiB0aGV5IG1pZ2h0IGJlIG5lc3RpbmcgKGNvbXBsZXggaW4gY29tcGxleClcblx0XHQvLyBub3QgY2xlYXIgaG93IHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIG5vbi1maWx0ZXJhYmxlIGFubm90YXRpb25cblx0XHQvLyBldGMuXG5cdFx0aWYgKG9PYmouJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly9Mb2cud2FybmluZyhcIkNvbXBsZXggcHJvcGVydHkgd2l0aCB0eXBlIFwiICsgb09iai4kVHlwZSArIFwiIGhhcyBiZWVuIGlnbm9yZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29Db250ZXh0LmdldFBhdGgoKX1AYCk7XG5cdFx0Y29uc3Qgc1BhdGggPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiwgbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkpO1xuXG5cdFx0Y29uc3QgYUdyb3VwYWJsZVByb3BlcnRpZXMgPSBvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLkdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdFx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cdFx0bGV0IGJHcm91cGFibGUgPSBhR3JvdXBhYmxlUHJvcGVydGllcyA/IGNoZWNrUHJvcGVydHlUeXBlKGFHcm91cGFibGVQcm9wZXJ0aWVzLCBzUGF0aCkgOiBmYWxzZTtcblx0XHRsZXQgYkFnZ3JlZ2F0YWJsZSA9IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID8gY2hlY2tQcm9wZXJ0eVR5cGUoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMsIHNQYXRoKSA6IGZhbHNlO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcyk7XG5cblx0XHRpZiAoIWFHcm91cGFibGVQcm9wZXJ0aWVzIHx8IChhR3JvdXBhYmxlUHJvcGVydGllcyAmJiAhYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoKSkge1xuXHRcdFx0Ykdyb3VwYWJsZSA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGVcIl07XG5cdFx0fVxuXHRcdGlmICghYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgfHwgKGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzICYmICFhQWdncmVnYXRhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiQWdncmVnYXRhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFnZ3JlZ2F0YWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vUmlnaHQgbm93OiBza2lwIHRoZW0sIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGNoYXJ0IGZyb20gaXRcblx0XHRpZiAoIWJHcm91cGFibGUgJiYgIWJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9wZXJ0eUZpbHRlcmFibGUgPSBDb21tb25IZWxwZXIuaXNQcm9wZXJ0eUZpbHRlcmFibGUob0NvbnRleHQpO1xuXHRcdGlmIChiQWdncmVnYXRhYmxlKSB7XG5cdFx0XHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllcyA9IENoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUoXG5cdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0c0tleSxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRcdFx0c29ydFJlc3RyaWN0aW9uc0luZm8sXG5cdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRtQ3VzdG9tQWdncmVnYXRlcyxcblx0XHRcdFx0b09iai4kVHlwZVxuXHRcdFx0KTtcblx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9BZ2dyZWdhdGVQcm9wZXJ0eTogQ2hhcnRQcm9wZXJ0eSkge1xuXHRcdFx0XHQvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSB0aGVuIGRvIG5vdCBhZGQgaXQgdG8gbWVhc3VyZXNcblx0XHRcdFx0aWYgKCF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhvQWdncmVnYXRlUHJvcGVydHkucGF0aCkpIHtcblx0XHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKG9BZ2dyZWdhdGVQcm9wZXJ0eSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9BZ2dyZWdhdGVQcm9wZXJ0eS5sYWJlbC5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdFx0XHRvQWdncmVnYXRlUHJvcGVydHkubGFiZWwgPSBNb2RlbEhlbHBlci5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKFxuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0ZVByb3BlcnR5LmxhYmVsLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0KG9NRENDaGFydC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvQWdncmVnYXRlUHJvcGVydHkubGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KG9BZ2dyZWdhdGVQcm9wZXJ0eS5sYWJlbCwgb01EQ0NoYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvL0FkZCB0cmFuc2Zvcm1hdGlvbiBhZ2dyZWdhdGVkIHByb3BlcnRpZXMgdG8gY2hhcnQgcHJvcGVydGllc1xuXHRcdFx0aWYgKGFNb2RlcyAmJiBhTW9kZXMuaW5jbHVkZXMoXCJGaWx0ZXJcIikpIHtcblx0XHRcdFx0Y29uc3QgYUtub3duQWdncmVnYXRhYmxlUHJvcHMgPSBPYmplY3Qua2V5cyhtS25vd25BZ2dyZWdhdGFibGVQcm9wcyk7XG5cdFx0XHRcdGNvbnN0IGFHcm91cGFibGVQcm9wZXJ0aWVzVmFsdWVzID0gYUdyb3VwYWJsZVByb3BlcnRpZXM/Lm1hcChcblx0XHRcdFx0XHQob1Byb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9KSA9PiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBBZGQgdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlZCBwcm9wZXJ0eSB0byBjaGFydCBzbyB0aGF0IGluIHRoZSBmaWx0ZXIgZHJvcGRvd24gaXQncyB2aXNpYmxlXG5cdFx0XHRcdC8vIEFsc28gbWFyayB2aXNpYmlsaXR5IGZhbHNlIGFzIHRoaXMgcHJvcGVydHkgc2hvdWxkIG5vdCBjb21lIHVwIGluIHVuZGVyIGNoYXJ0IHNlY3Rpb24gb2YgcGVyc29uYWxpemF0aW9uIGRpYWxvZ1xuXHRcdFx0XHQvLyBpZiBhIHByb3BlcnR5IGlzIFVPTSB0aGVuIGRvIG5vdCBhZGQgaXQgdG8gbWVhc3VyZXNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFLbm93bkFnZ3JlZ2F0YWJsZVByb3BzLmluY2x1ZGVzKHNLZXkpICYmXG5cdFx0XHRcdFx0IWFHcm91cGFibGVQcm9wZXJ0aWVzVmFsdWVzPy5pbmNsdWRlcyhzS2V5KSAmJlxuXHRcdFx0XHRcdCF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhzS2V5KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhUHJvcGVydGllcyA9IGFkZFByb3BlcnR5VG9DaGFydChcblx0XHRcdFx0XHRcdGFQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0c0tleSxcblx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSA/IGZhbHNlIDogY2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUoc0tleSwgcHJvcGVydHlGaWx0ZXJhYmxlLCBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhKSxcblx0XHRcdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucyxcblx0XHRcdFx0XHRcdGZhbHNlLCAvLyAnaXNTb3J0YWJsZScgaXMgc2V0IHRvICdmYWxzZScgdG8gYXZvaWQgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIHNvcnQgcXVldWUgZm9yIGFnZ3JlZ2F0YWJsZSBwcm9wZXJ0aWVzLiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IHF1ZXVlZCBmb3Igc29ydGluZyBpbiB0aGUgJ2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUnIG1ldGhvZC5cblx0XHRcdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0XHRcdHNDcml0aWNhbGl0eSxcblx0XHRcdFx0XHRcdG9PYmosXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYkdyb3VwYWJsZSkge1xuXHRcdFx0Y29uc3Qgc05hbWUgPSBzS2V5IHx8IFwiXCIsXG5cdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5UZXh0XVxuXHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuVGV4dF0uJFBhdGhcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgYklzTmF2aWdhdGlvblRleHQgPSBmYWxzZTtcblx0XHRcdGlmIChzTmFtZSAmJiBzTmFtZS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBQcm9wZXJ0eTogJHtzTmFtZX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAoc1RleHRQcm9wZXJ0eSAmJiBzVGV4dFByb3BlcnR5LmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdFx0TG9nLmVycm9yKGAkZXhwYW5kIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiBUZXh0IFByb3BlcnR5OiAke3NUZXh0UHJvcGVydHl9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0YklzTmF2aWdhdGlvblRleHQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0YVByb3BlcnRpZXMgPSBhZGRQcm9wZXJ0eVRvQ2hhcnQoXG5cdFx0XHRcdGFQcm9wZXJ0aWVzLFxuXHRcdFx0XHRzS2V5LFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0Y2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUoc0tleSwgcHJvcGVydHlGaWx0ZXJhYmxlLCBwcm9wZXJ0eUZpbHRlcmFibGVEYXRhKVxuXHRcdFx0XHRcdD8gKGN1c3RvbUFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc0tleSkgJiYgdW5pdE9mTWVhc3VyZXMuaW5jbHVkZXMoc0tleSkpIHx8ICF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhzS2V5KVxuXHRcdFx0XHRcdDogZmFsc2UsIC8vIFVPTSBwcm9wZXJ0eSBzaG91bGQgYmUgZmlsdGVyYWJsZSBpZiBpdCBpcyBtYXJrZWQgYXMgY3VzdG9tIGFnZ3JlZ2F0ZSBhcyB3ZWxsIGFzIGdyb3VwYWJsZVxuXHRcdFx0XHRmaWx0ZXJSZXN0cmljdGlvbnMsXG5cdFx0XHRcdENoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlKG9NRENDaGFydCwgc29ydFJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NLZXldLCBmYWxzZSksXG5cdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0c0NyaXRpY2FsaXR5LFxuXHRcdFx0XHRvT2JqLFxuXHRcdFx0XHQhY3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSB8fCAoY3VzdG9tQWdncmVnYXRlcy5pbmNsdWRlcyhzS2V5KSAmJiB1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyhzS2V5KSkgPyB0cnVlIDogZmFsc2UsIC8vIGlmIGEgcHJvcGVydHkgaXMgVU9NLCBtYXJrZWQgYXMgY3VzdG9tIGFnZ3JlZ2F0ZSBhbmQgZ3JvdXBhYmxlIHRoZW4gc2hvdyBpdCBpbiBkaW1lbnNpb25zXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRiSXNOYXZpZ2F0aW9uVGV4dFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgcHJvcGVydGllcyB3aGljaCBhcmUgbWFya2VkIGFzIHVuaXQgb2YgbWVhc3VyZS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIGNoYXJ0XG4gKiBAcGFyYW0gbWV0YU1vZGVsICBNZXRhTW9kZWxcbiAqIEBwYXJhbSBlbnRpdHlTZXRQYXRoIEVudGl0eSBzZXQgcGF0aFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgdW5pdCBvZiBtZWFzdXJlc1xuICovXG5mdW5jdGlvbiBfZ2V0VW5pdE9mTWVhc3VyZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgZW50aXR5U2V0UGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuXHRjb25zdCB1bml0T2ZNZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0Zm9yIChjb25zdCBzS2V5IGluIGVudGl0eVR5cGUpIHtcblx0XHRjb25zdCBjb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2VudGl0eVNldFBhdGh9LyR7c0tleX1gKTtcblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0Py5nZXRQYXRoKCl9QGApO1xuXHRcdGNvbnN0IHVuaXQgPVxuXHRcdFx0KHByb3BlcnR5QW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuSVNPQ3VycmVuY3lcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aCB8fFxuXHRcdFx0KHByb3BlcnR5QW5ub3RhdGlvbnM/LltcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuVW5pdFwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoO1xuXHRcdGlmICh1bml0ICYmICF1bml0T2ZNZWFzdXJlcy5pbmNsdWRlcyh1bml0KSkge1xuXHRcdFx0dW5pdE9mTWVhc3VyZXMucHVzaCh1bml0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuaXRPZk1lYXN1cmVzO1xufVxuXG4vLyBjcmVhdGUgcHJvcGVydGllcyBmb3IgY2hhcnRcbmZ1bmN0aW9uIGFkZFByb3BlcnR5VG9DaGFydChcblx0YVByb3BlcnRpZXM6IENoYXJ0UHJvcGVydHlbXSxcblx0c0tleTogc3RyaW5nLFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0aXNGaWx0ZXJhYmxlOiBib29sZWFuLFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRpc1NvcnRhYmxlOiBib29sZWFuLFxuXHRvTURDQ2hhcnQ6IENoYXJ0LFxuXHRzQ3JpdGljYWxpdHk6IHN0cmluZyxcblx0b09iajogTWV0YU1vZGVsUHJvcGVydHksXG5cdGJJc0dyb3VwYWJsZTogYm9vbGVhbixcblx0YklzQWdncmVnYXRhYmxlOiBib29sZWFuLFxuXHRiSXNOYXZpZ2F0aW9uVGV4dD86IGJvb2xlYW4sXG5cdGJJc0hpZGRlbj86IGJvb2xlYW5cbik6IENoYXJ0UHJvcGVydHlbXSB7XG5cdGxldCBjaGFydFJvbGUgPSBDaGFydEl0ZW1Sb2xlVHlwZS5jYXRlZ29yeTtcblx0Y29uc3QgY2hhcnREYXRhID0gb01EQ0NoYXJ0LmRhdGEoXCJjaGFydERpbWVuc2lvbktleUFuZFJvbGVcIik7XG5cblx0aWYgKEFycmF5LmlzQXJyYXkoY2hhcnREYXRhKSkge1xuXHRcdGNoYXJ0RGF0YS5mb3JFYWNoKChyZWNvcmQ6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9KSA9PiB7XG5cdFx0XHRpZiAocmVjb3JkW3NLZXldKSB7XG5cdFx0XHRcdGNoYXJ0Um9sZSA9IHJlY29yZFtzS2V5XS5zcGxpdChcIi9cIikucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgY2hhcnRSb2xlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBDaGFydFByb3BlcnR5ID0ge1xuXHRcdG5hbWU6IFwiX2ZlX2dyb3VwYWJsZV9cIiArIHNLZXksXG5cdFx0bGFiZWw6IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXT8udG9TdHJpbmcoKSB8fCBzS2V5LFxuXHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlLFxuXHRcdGZpbHRlcmFibGU6IGlzRmlsdGVyYWJsZSxcblx0XHRncm91cGFibGU6IGJJc0dyb3VwYWJsZSxcblx0XHRhZ2dyZWdhdGFibGU6IGJJc0FnZ3JlZ2F0YWJsZSxcblx0XHRtYXhDb25kaXRpb25zOiBpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW1wiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJdPy5bc0tleV0/LlswXSkgPyAtMSA6IDEsXG5cdFx0cGF0aDogc0tleSxcblx0XHRyb2xlOiBjaGFydFJvbGUsIC8vc3RhbmRhcmQsIG5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGZyb20gVUkuQ2hhcnQgYW5ub3RhdGlvblxuXHRcdGNyaXRpY2FsaXR5OiBzQ3JpdGljYWxpdHksIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRkYXRhVHlwZTogb09iai4kVHlwZSxcblx0XHR2aXNpYmxlOiBiSXNIaWRkZW4gPyAhYklzSGlkZGVuIDogdHJ1ZSxcblx0XHR0ZXh0UHJvcGVydHk6XG5cdFx0XHQhYklzTmF2aWdhdGlvblRleHQgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0PyAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pLiRQYXRoXG5cdFx0XHRcdDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdHRleHRGb3JtYXR0ZXI6IChvUHJvcGVydHlBbm5vdGF0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbXG5cdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIlxuXHRcdF0gYXMgTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+XG5cdH07XG5cdC8vIHRpbWVVbml0VHlwZSA9IHVuZGVmaW5lZCAtPiBjcmFzaGVzIHRoZSBjaGFydC4gdGhlcmVmb3JlOlxuXHRjb25zdCB0aW1lVW5pdFR5cGUgPSBDaGFydERlbGVnYXRlLl9nZXRUaW1lVHlwZShvT2JqLCBvUHJvcGVydHlBbm5vdGF0aW9ucyk7XG5cdGlmICh0aW1lVW5pdFR5cGUpIG9Qcm9wZXJ0eS50aW1lVW5pdFR5cGUgPSB0aW1lVW5pdFR5cGU7XG5cblx0aWYgKG9PYmouJFR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHwgb09iai4kVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRzd2l0Y2ggKG9PYmouJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0b1Byb3BlcnR5LmZvcm1hdE9wdGlvbnMgPSB7IHN0eWxlOiBcIm1lZGl1bS9zaG9ydFwiIH07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0b1Byb3BlcnR5LmZvcm1hdE9wdGlvbnMgPSB7IHN0eWxlOiBcInNob3J0XCIgfTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS5sYWJlbC5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRvUHJvcGVydHkubGFiZWwgPSBNb2RlbEhlbHBlci5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKFxuXHRcdFx0b1Byb3BlcnR5LmxhYmVsLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KG9NRENDaGFydC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRvUHJvcGVydHkubGFiZWwgPSBnZXRMb2NhbGl6ZWRUZXh0KG9Qcm9wZXJ0eS5sYWJlbCwgb01EQ0NoYXJ0KTtcblx0fVxuXG5cdGFQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5KTtcblx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcHJvcGVydHkgaXMgZmlsdGVyYWJsZSBvciBub3QuXG4gKiBAcGFyYW0ga2V5IFByb3BlcnR5IGtleVxuICogQHBhcmFtIHByb3BlcnR5RmlsdGVyYWJsZSAgRmlsdGVyIHJlc3RyaWN0aW9uc1xuICogQHBhcmFtIHByb3BlcnR5RmlsdGVyYWJsZURhdGFcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgZm9yIGEgcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wZXJ0eUZpbHRlcmFibGUoXG5cdGtleTogc3RyaW5nLFxuXHRwcm9wZXJ0eUZpbHRlcmFibGU6IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0cHJvcGVydHlGaWx0ZXJhYmxlRGF0YTogUmVjb3JkPHN0cmluZywgRmlsdGVyUmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZT5cbik6IGJvb2xlYW4ge1xuXHRpZiAocHJvcGVydHlGaWx0ZXJhYmxlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlGaWx0ZXJhYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0Ly8gcGF0aCBiYXNlZCBmaWx0ZXJhYmxlIGlzIHlldCB0byBoYW5kbGUgaGVyZSBpbiBmdXR1cmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gcHJvcGVydHlGaWx0ZXJhYmxlRGF0YT8uW2tleV0/LmZpbHRlcmFibGUgPz8gdHJ1ZTtcblx0fVxufVxuXG5DaGFydERlbGVnYXRlLl9nZXRUaW1lVHlwZSA9IGZ1bmN0aW9uIChvT2JqOiBNZXRhTW9kZWxQcm9wZXJ0eSwgb1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVGltZVVuaXRUeXBlIHwgdW5kZWZpbmVkIHtcblx0c3dpdGNoIChvT2JqLiRUeXBlKSB7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLkRhdGU7XG5cdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUuZmlzY2FseWVhcjtcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUGVyaW9kXSkge1xuXHRcdFx0XHRyZXR1cm4gVGltZVVuaXRUeXBlLmZpc2NhbHllYXJwZXJpb2Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyTW9udGhdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcm1vbnRoO1xuXHRcdFx0fSBlbHNlIGlmIChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBcIiArIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0NhbGVuZGFyWWVhclF1YXJ0ZXJdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcnF1YXJ0ZXI7XG5cdFx0XHR9IGVsc2UgaWYgKG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQFwiICsgQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzQ2FsZW5kYXJZZWFyV2Vla10pIHtcblx0XHRcdFx0cmV0dXJuIFRpbWVVbml0VHlwZS55ZWFyd2Vlaztcblx0XHRcdH0gZWxzZSBpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAXCIgKyBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNDYWxlbmRhckRhdGVdKSB7XG5cdFx0XHRcdHJldHVybiBUaW1lVW5pdFR5cGUueWVhcm1vbnRoZGF5O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbi8vIElmIGVudGl0eXNldCBpcyBub24gZmlsdGVyYWJsZSx0aGVuIGZyb20gcDEzbiBtb2RlcyByZW1vdmUgRmlsdGVyIHNvIHRoYXQgb24gVUkgZmlsdGVyIG9wdGlvbiBkb2Vzbid0IHNob3cgdXBcbmZ1bmN0aW9uIGNoZWNrRm9yTm9uZmlsdGVyYWJsZUVudGl0eVNldChvTURDQ2hhcnQ6IENoYXJ0LCBhTW9kZXM6IChDaGFydFAxM25Nb2RlIHwga2V5b2YgdHlwZW9mIENoYXJ0UDEzbk1vZGUpW10pOiB2b2lkIHtcblx0Y29uc3QgYkVudGl0eVNldEZpbGVyYWJsZSA9IG9NRENDaGFydFxuXHRcdD8uZ2V0TW9kZWwoKVxuXHRcdD8uZ2V0TWV0YU1vZGVsKClcblx0XHQ/LmdldE9iamVjdChgJHtvTURDQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpfUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2ApPy5GaWx0ZXJhYmxlO1xuXHRpZiAoYkVudGl0eVNldEZpbGVyYWJsZSAhPT0gdW5kZWZpbmVkICYmICFiRW50aXR5U2V0RmlsZXJhYmxlKSB7XG5cdFx0YU1vZGVzID0gYU1vZGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBcIkZpbHRlclwiKTtcblx0XHRvTURDQ2hhcnQuc2V0UDEzbk1vZGUoYU1vZGVzKTtcblx0fVxufVxuXG4vLyAgY2hlY2sgaWYgR3JvdXBhYmxlIC9BZ2dyZWdhdGFibGUgcHJvcGVydHkgaXMgcHJlc2VudCBvciBub3RcbmZ1bmN0aW9uIGNoZWNrUHJvcGVydHlUeXBlKFxuXHRhUHJvcGVydGllczogKEV4cGFuZFBhdGhUeXBlPFByb3BlcnR5UGF0aD4gJiB7IFByb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxQcm9wZXJ0eVBhdGg+IH0pW10sXG5cdHNQYXRoOiBzdHJpbmdcbik6IHRydWUgfCB1bmRlZmluZWQge1xuXHRpZiAoYVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFQcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAoZWxlbWVudD8uJFByb3BlcnR5UGF0aCA9PT0gc1BhdGggfHwgZWxlbWVudD8uUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5DaGFydERlbGVnYXRlLmZvcm1hdFRleHQgPSBmdW5jdGlvbiAob1ZhbHVlMTogc3RyaW5nLCBvVmFsdWUyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBzVmFsdWUgPSB0aGlzLnR5cGVDb25maWc/LnR5cGVJbnN0YW5jZT8uZm9ybWF0VmFsdWUob1ZhbHVlMSwgXCJzdHJpbmdcIikgfHwgb1ZhbHVlMTtcblxuXHRpZiAob1ZhbHVlMikge1xuXHRcdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gdGhpcy50ZXh0Rm9ybWF0dGVyO1xuXG5cdFx0aWYgKFxuXHRcdFx0IW9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIHx8XG5cdFx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRGaXJzdFwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhvVmFsdWUyLCBzVmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHNWYWx1ZSwgb1ZhbHVlMik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9WYWx1ZTIgfHwgc1ZhbHVlO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgdGhlIGlsbHVzdHJhdGVkIG1lc3NhZ2Ugd2l0aCBhIG5ldyB0aXRsZSwgZGVzY3JpcHRpb24sIGFuZCB0eXBlLlxuICogQHBhcmFtIG9DaGFydCBSZWZlcmVuY2UgdG8gdGhlIE1EQ19DaGFydFxuICogQHBhcmFtIGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbCBPYmplY3QgY29ycmVzcG9uZHMgdG8gdGhlIGlsbHVzdHJhdGVkIG1lc3NhZ2VcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5fdXBkYXRlSWxsdXN0cmF0ZWRNZXNzYWdlID0gZnVuY3Rpb24gKG9DaGFydDogQ2hhcnQsIGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbDogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzKTogdm9pZCB7XG5cdGNvbnN0IG5vRGF0YUNvbnRyb2wgPSBvQ2hhcnQuZ2V0Tm9EYXRhKCkgYXMgSWxsdXN0cmF0ZWRNZXNzYWdlO1xuXHRub0RhdGFDb250cm9sLnNldFRpdGxlKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC50aXRsZSk7XG5cdG5vRGF0YUNvbnRyb2wuc2V0RGVzY3JpcHRpb24oaWxsdXN0cmF0ZWRNZXNzYWdlRGV0YWlsLmRlc2NyaXB0aW9uKTtcblx0bm9EYXRhQ29udHJvbC5zZXRJbGx1c3RyYXRpb25UeXBlKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC5pbGx1c3RyYXRpb25UeXBlIHx8IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzKTtcblx0bm9EYXRhQ29udHJvbC5zZXRJbGx1c3RyYXRpb25TaXplKGlsbHVzdHJhdGVkTWVzc2FnZURldGFpbC5pbGx1c3RyYXRpb25TaXplIHx8IElsbHVzdHJhdGVkTWVzc2FnZVNpemUuQXV0byk7XG59O1xuXG4vKipcbiAqIFdlIHNldCB0aGUgaWxsdXN0cmF0ZWQgbWVzc2FnZSdzIHRpdGxlLCBkZXNjcmlwdGlvbiwgYW5kIHR5cGUgYmFzZWQgb24gZGlmZmVyZW50IGNvbmRpdGlvbnMuXG4gKiBAcGFyYW0gY2hhcnQgUmVmZXJlbmNlIHRvIHRoZSBNRENfQ2hhcnRcbiAqIEBwYXJhbSBiaW5kaW5nSW5mbyBCaW5kaW5nSW5mb1xuICovXG5DaGFydERlbGVnYXRlLnNldENoYXJ0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlID0gZnVuY3Rpb24gKGNoYXJ0OiBDaGFydCwgYmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB2b2lkIHtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbChjaGFydCk7XG5cdGxldCBpbGx1c3RyYXRlZEluZm9ybWF0aW9uOiAkSWxsdXN0cmF0ZWRNZXNzYWdlU2V0dGluZ3MgPSB7fTtcblx0Y29uc3QgY29udmVydGVyVHlwZSA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY2hhcnQpLmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZTtcblx0Y29uc3Qgb0NoYXJ0RmlsdGVySW5mbyA9IENoYXJ0VXRpbHMuZ2V0QWxsRmlsdGVySW5mbyhjaGFydCk7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYmluZGluZ0luZm8ucGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IGJpbmRpbmdJbmZvLnBhdGguc3Vic3RyKDEpIDogYmluZGluZ0luZm8ucGF0aDtcblx0Y29uc3QgZ2V0Tm9EYXRhSWxsdXN0cmF0ZWRNZXNzYWdlV2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKTogJElsbHVzdHJhdGVkTWVzc2FnZVNldHRpbmdzIHtcblx0XHRpZiAoY2hhcnQuZGF0YShcIm11bHRpVmlld3NcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PU0VBUkNIUkVTVUxUU1wiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRmlsdGVyUmVzdWx0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0lMTFVTVFJBVEVEX01FU1NBR0VfVElUTEVfTk9TRUFSQ0hSRVNVTFRTXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpLFxuXHRcdFx0ZGVzY3JpcHRpb246IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9GaWx0ZXJSZXN1bHRzLFxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZTogY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgPyBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLlNtYWxsIDogSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5BdXRvXG5cdFx0fTtcblx0fTtcblxuXHRpZiAoY2hhcnQuZ2V0RmlsdGVyKCkgJiYgY29udmVydGVyVHlwZSAhPT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRpZiAob0NoYXJ0RmlsdGVySW5mby5zZWFyY2ggfHwgb0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCBvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnM/Lmxlbmd0aCkge1xuXHRcdC8vY2hlY2sgaWYgY2hhcnQgaGFzIGFueSBwZXJzb25hbGl6YXRpb24gZmlsdGVyc1xuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSBnZXROb0RhdGFJbGx1c3RyYXRlZE1lc3NhZ2VXaXRoRmlsdGVycygpO1xuXHR9IGVsc2Uge1xuXHRcdGlsbHVzdHJhdGVkSW5mb3JtYXRpb24gPSB7XG5cdFx0XHR0aXRsZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9JTExVU1RSQVRFRF9NRVNTQUdFX1RJVExFX05PREFUQVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGRlc2NyaXB0aW9uOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KSxcblx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IElsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzLFxuXHRcdFx0aWxsdXN0cmF0aW9uU2l6ZTogSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5TbWFsbFxuXHRcdH07XG5cdH1cblxuXHRDaGFydERlbGVnYXRlLl91cGRhdGVJbGx1c3RyYXRlZE1lc3NhZ2UoY2hhcnQsIGlsbHVzdHJhdGVkSW5mb3JtYXRpb24pO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvQ2hhcnQ6IENoYXJ0LCBvQmluZGluZ0luZm86IFNlcmlhbGl6ZWRDb2xsZWN0aW9uQmluZGluZ0luZm8pOiB2b2lkIHtcblx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9DaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXG5cdGludGVybmFsQmluZGluZ0NvbnRleHQuc2V0UHJvcGVydHkoXCJpc0luc2lnaHRzRW5hYmxlZFwiLCB0cnVlKTtcblx0Q2hhcnREZWxlZ2F0ZS5zZXRDaGFydE5vRGF0YUlsbHVzdHJhdGVkTWVzc2FnZShvQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG5cdGNvbnN0IG9GaWx0ZXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9DaGFydC5nZXRGaWx0ZXIoKSk7XG5cdGNvbnN0IG1Db25kaXRpb25zID0gb0NoYXJ0LmdldENvbmRpdGlvbnMoKTtcblx0aWYgKCFvQmluZGluZ0luZm8pIHtcblx0XHRvQmluZGluZ0luZm8gPSB7fTtcblx0fVxuXHRpZiAoIW9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMgPSB7fTtcblx0fVxuXHRpZiAob0ZpbHRlcikge1xuXHRcdC8vIFNlYXJjaFxuXHRcdGNvbnN0IG9JbmZvID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVySW5mbyhvRmlsdGVyIGFzIElGaWx0ZXJDb250cm9sLCB7fSk7XG5cdFx0Y29uc3Qgb0FwcGx5U3VwcG9ydGVkID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvQ2hhcnQuZGF0YShcImFwcGx5U3VwcG9ydGVkXCIpKSBhcyBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRcdGlmIChvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCAmJiBvSW5mby5zZWFyY2gpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKG9JbmZvLnNlYXJjaCk7XG5cdFx0fSBlbHNlIGlmIChvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoKSB7XG5cdFx0XHRkZWxldGUgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0XHR9XG5cdH1cblx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBtQ29uZGl0aW9ucyA/IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJzSW5mbyhvRmlsdGVyLCBtQ29uZGl0aW9ucykgOiBudWxsO1xuXHRpZiAoc1BhcmFtZXRlclBhdGgpIHtcblx0XHRvQmluZGluZ0luZm8ucGF0aCA9IHNQYXJhbWV0ZXJQYXRoO1xuXHR9XG5cdGNvbnN0IG9GaWx0ZXJJbmZvID0gQ2hhcnRVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9DaGFydCk7XG5cdGlmIChvRmlsdGVySW5mby5iaW5kaW5nUGF0aCkge1xuXHRcdG9CaW5kaW5nSW5mby5wYXRoID0gb0ZpbHRlckluZm8uYmluZGluZ1BhdGg7XG5cdH1cblxuXHRpZiAob0JpbmRpbmdJbmZvLnBhdGggJiYgb0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRvQmluZGluZ0luZm8ucGF0aCA9IENoYXJ0SGVscGVyLmdldENvbGxlY3Rpb25OYW1lKG9CaW5kaW5nSW5mby5wYXRoKTtcblx0fVxuXG5cdC8vIHJlbW92ZSBwcmVmaXhlcyBzbyB0aGF0IGVudGl0eXNldCB3aWxsIG1hdGNoIHdpdGggdGhlIHByb3BlcnR5IG5hbWVzIHdpdGggdGhlc2UgZmllbGRcblx0aWYgKG9GaWx0ZXJJbmZvLmZpbHRlcnMpIHtcblx0XHRvRmlsdGVySW5mby5maWx0ZXJzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcblx0XHRcdGlmIChlbGVtZW50LmdldFBhdGgoKSkge1xuXHRcdFx0XHQoZWxlbWVudCBhcyB1bmtub3duIGFzIHsgc1BhdGg6IHN0cmluZyB9KS5zUGF0aCA9IChvQ2hhcnQuZ2V0UGFyZW50KCkgYXMgQ2hhcnRUeXBlKS5nZXRDaGFydFByb3BlcnRpZXNXaXRob3V0UHJlZml4ZXMoXG5cdFx0XHRcdFx0ZWxlbWVudC5nZXRQYXRoKCkhXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0b0JpbmRpbmdJbmZvLmV2ZW50cyA/Pz0ge307XG5cdG9CaW5kaW5nSW5mby5ldmVudHMuZGF0YVJlcXVlc3RlZCA9IChvQ2hhcnQuZ2V0UGFyZW50KCkgYXMgQ2hhcnRUeXBlKS5vbkludGVybmFsRGF0YVJlcXVlc3RlZC5iaW5kKG9DaGFydC5nZXRQYXJlbnQoKSk7XG5cblx0b0JpbmRpbmdJbmZvLmZpbHRlcnMgPSBvRmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCA+IDAgPyBuZXcgRmlsdGVyKHsgZmlsdGVyczogb0ZpbHRlckluZm8uZmlsdGVycywgYW5kOiB0cnVlIH0pIDogdW5kZWZpbmVkO1xuXHRvQmluZGluZ0luZm8uc29ydGVyID0gdGhpcy5nZXRTb3J0ZXJzKG9DaGFydCk7XG5cdENoYXJ0RGVsZWdhdGUuX2NoZWNrQW5kQWRkRHJhZnRGaWx0ZXIob0NoYXJ0LCBvQmluZGluZ0luZm8pO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAob01EQ0NoYXJ0OiBDaGFydCk6IFByb21pc2U8UHJvcGVydHlJbmZvW10+IHtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblx0bGV0IHBDcmVhdGVQcm9wZXJ0eUluZm9zOiBQcm9taXNlPFByb3BlcnR5SW5mb1tdPjtcblxuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHBDcmVhdGVQcm9wZXJ0eUluZm9zID0gbmV3IFByb21pc2U8T0RhdGFNb2RlbD4oKHJlc29sdmUpOiB2b2lkID0+IHtcblx0XHRcdG9NRENDaGFydC5hdHRhY2hNb2RlbENvbnRleHRDaGFuZ2UoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRyZXNvbHZlcjogcmVzb2x2ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbk1vZGVsQ29udGV4dENoYW5nZSBhcyAoZXY6IFVJNUV2ZW50KSA9PiB2b2lkLFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH0pLnRoZW4oKG9SZXRyaWV2ZWRNb2RlbDogT0RhdGFNb2RlbCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZVByb3BlcnR5SW5mb3Mob01EQ0NoYXJ0LCBvUmV0cmlldmVkTW9kZWwpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHBDcmVhdGVQcm9wZXJ0eUluZm9zID0gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9Nb2RlbCk7XG5cdH1cblxuXHRyZXR1cm4gcENyZWF0ZVByb3BlcnR5SW5mb3MudGhlbihmdW5jdGlvbiAoYVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKSB7XG5cdFx0XHRvTURDQ2hhcnQuZGF0YShcIiRtZGNDaGFydFByb3BlcnR5SW5mb1wiLCBhUHJvcGVydGllcyk7XG5cdFx0XHQvLyBzdG9yZSB0aGUgcHJvcGVydGllcyB0byBmZXRjaCBkdXJpbmcgcDEzbiBjYWxjdWxhdGlvblxuXHRcdFx0TWFjcm9zRGVsZWdhdGVVdGlsLnNldENhY2hlZFByb3BlcnRpZXMob01EQ0NoYXJ0LCBhUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcGVydGllcztcblx0fSk7XG59O1xuZnVuY3Rpb24gb25Nb2RlbENvbnRleHRDaGFuZ2UodGhpczogdHlwZW9mIENoYXJ0RGVsZWdhdGUsIG9FdmVudDogVUk1RXZlbnQ8e30sIENoYXJ0Piwgb0RhdGE6IHsgcmVzb2x2ZXI6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0Y29uc3Qgb01EQ0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRjb25zdCBvTW9kZWwgPSB0aGlzLl9nZXRNb2RlbChvTURDQ2hhcnQpO1xuXG5cdGlmIChvTW9kZWwpIHtcblx0XHRvTURDQ2hhcnQuZGV0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKG9uTW9kZWxDb250ZXh0Q2hhbmdlIGFzIChldjogVUk1RXZlbnQpID0+IHZvaWQpO1xuXHRcdG9EYXRhLnJlc29sdmVyKG9Nb2RlbCk7XG5cdH1cbn1cbkNoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3MgPSBhc3luYyBmdW5jdGlvbiAob01EQ0NoYXJ0OiBDaGFydCwgb01vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9bXT4ge1xuXHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAvJHtvTURDQ2hhcnQuZGF0YShcImVudGl0eVNldFwiKX1gO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGFSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW29NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vYCksIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH1AYCldKTtcblx0Y29uc3QgYVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdID0gW107XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gYVJlc3VsdHNbMF07XG5cdGNvbnN0IG1FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGFSZXN1bHRzWzFdO1xuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJjdXN0b21BZ2dcIikpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRnZXRDdXN0b21BZ2dyZWdhdGUobUN1c3RvbUFnZ3JlZ2F0ZXMsIG9NRENDaGFydCk7XG5cdGxldCBzQW5ubztcblx0Zm9yIChjb25zdCBzQW5ub0tleSBpbiBtRW50aXR5U2V0QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoc0Fubm9LZXkuc3RhcnRzV2l0aChcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlXCIpKSB7XG5cdFx0XHRzQW5ubyA9IHNBbm5vS2V5LnJlcGxhY2UoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZSNcIiwgXCJcIik7XG5cdFx0XHRjb25zdCBhQW5ubyA9IHNBbm5vLnNwbGl0KFwiQFwiKTtcblxuXHRcdFx0aWYgKGFBbm5vLmxlbmd0aCA9PSAyICYmIGFBbm5vWzFdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpIHtcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbYUFubm9bMF1dID0gbUVudGl0eVNldEFubm90YXRpb25zW3NBbm5vS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgbVR5cGVBZ2dyZWdhdGFibGVQcm9wcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJ0cmFuc0FnZ1wiKSkgYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7IHByb3BlcnR5UGF0aDogc3RyaW5nOyBhZ2dyZWdhdGlvbk1ldGhvZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVxuXHQ+O1xuXHRjb25zdCBtS25vd25BZ2dyZWdhdGFibGVQcm9wczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4+ID0ge307XG5cdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzKSB7XG5cdFx0Y29uc3Qgc1Byb3BLZXkgPSBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLnByb3BlcnR5UGF0aDtcblx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gPSBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gfHwge307XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldW21UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0uYWdncmVnYXRpb25NZXRob2RdID0ge1xuXHRcdFx0bmFtZTogbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5uYW1lLFxuXHRcdFx0bGFiZWw6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubGFiZWxcblx0XHR9O1xuXHR9XG5cdGNvbnN0IHVuaXRPZk1lYXN1cmVzID0gX2dldFVuaXRPZk1lYXN1cmVzKG9FbnRpdHlUeXBlLCBvTWV0YU1vZGVsLCBzRW50aXR5U2V0UGF0aCk7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChzS2V5LmluZGV4T2YoXCIkXCIpICE9PSAwKSB7XG5cdFx0XHRjb25zdCBjcml0aWNhbGl0eSA9IENoYXJ0SGVscGVyLmZldGNoQ3JpdGljYWxpdHkob01ldGFNb2RlbCwgb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzRW50aXR5U2V0UGF0aH0vJHtzS2V5fWApISk7XG5cdFx0XHRDaGFydERlbGVnYXRlLl9oYW5kbGVQcm9wZXJ0eShcblx0XHRcdFx0b01ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChgJHtzRW50aXR5U2V0UGF0aH0vJHtzS2V5fWApLFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyxcblx0XHRcdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHMsXG5cdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdFx0XHRhUHJvcGVydGllcyxcblx0XHRcdFx0Y3JpdGljYWxpdHksXG5cdFx0XHRcdHVuaXRPZk1lYXN1cmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVByb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBnZXRDdXN0b21BZ2dyZWdhdGUobUN1c3RvbUFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvTURDQ2hhcnQ6IENoYXJ0KTogdm9pZCB7XG5cdGNvbnN0IGFEaW1lbnNpb25zOiBzdHJpbmdbXSA9IFtdLFxuXHRcdGFNZWFzdXJlczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG1DdXN0b21BZ2dyZWdhdGVzICYmIE9iamVjdC5rZXlzKG1DdXN0b21BZ2dyZWdhdGVzKS5sZW5ndGggPj0gMSkge1xuXHRcdGNvbnN0IGFDaGFydEl0ZW1zID0gb01EQ0NoYXJ0LmdldEl0ZW1zKCk7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gYUNoYXJ0SXRlbXMpIHtcblx0XHRcdGlmIChhQ2hhcnRJdGVtc1trZXldLmdldFR5cGUoKSA9PT0gXCJncm91cGFibGVcIikge1xuXHRcdFx0XHRhRGltZW5zaW9ucy5wdXNoKENoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZChhQ2hhcnRJdGVtc1trZXldLmdldFByb3BlcnR5S2V5KCksIFwiZ3JvdXBhYmxlXCIpKTtcblx0XHRcdH0gZWxzZSBpZiAoYUNoYXJ0SXRlbXNba2V5XS5nZXRUeXBlKCkgPT09IFwiYWdncmVnYXRhYmxlXCIpIHtcblx0XHRcdFx0YU1lYXN1cmVzLnB1c2goXG5cdFx0XHRcdFx0Q2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKGFDaGFydEl0ZW1zW2tleV0uZ2V0UHJvcGVydHlLZXkoKSwgXCJhZ2dyZWdhdGFibGVcIilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0YU1lYXN1cmVzLmZpbHRlcihmdW5jdGlvbiAodmFsOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIGFEaW1lbnNpb25zLmluY2x1ZGVzKHZhbCk7XG5cdFx0XHR9KS5sZW5ndGggPj0gMVxuXHRcdCkge1xuXHRcdFx0TG9nLmVycm9yKFwiRGltZW5zaW9uIGFuZCBNZWFzdXJlIGhhcyB0aGUgc2FtZVByb3BlcnR5IENvbmZpZ3VyZWRcIik7XG5cdFx0fVxuXHR9XG59XG5cbkNoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdHNLZXk6IHN0cmluZyxcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnMsXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9Pj4sXG5cdG1DdXN0b21BZ2dyZWdhdGVzOiB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHVua25vd24gfSxcblx0ZGF0YVR5cGU6IHN0cmluZ1xuKTogb2JqZWN0W10ge1xuXHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllczogb2JqZWN0W10gPSBbXTtcblx0aWYgKE9iamVjdC5rZXlzKG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzKS5pbmNsdWRlcyhzS2V5KSkge1xuXHRcdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XSkge1xuXHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLm5hbWUsXG5cdFx0XHRcdGxhYmVsOlxuXHRcdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLmxhYmVsIHx8XG5cdFx0XHRcdFx0YCR7b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdfSAoJHtzQWdncmVnYXRhYmxlfSlgIHx8XG5cdFx0XHRcdFx0YCR7c0tleX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCxcblx0XHRcdFx0c29ydGFibGU6IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XSA/IHNvcnRSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XS5zb3J0YWJsZSA6IHRydWUsXG5cdFx0XHRcdGZpbHRlcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdHBhdGg6IHNLZXksXG5cdFx0XHRcdGRhdGFUeXBlOiBkYXRhVHlwZSxcblx0XHRcdFx0YWdncmVnYXRpb25NZXRob2Q6IHNBZ2dyZWdhdGFibGUsXG5cdFx0XHRcdG1heENvbmRpdGlvbnM6IGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIl0/LltzS2V5XT8uWzBdKSA/IC0xIDogMSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdGRhdGFwb2ludDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR1bml0UGF0aDpcblx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykuaW5jbHVkZXMoc0tleSkpIHtcblx0XHRmb3IgKGNvbnN0IHNDdXN0b20gaW4gbUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGlmIChzQ3VzdG9tID09PSBzS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9JdGVtID0gbWVyZ2Uoe30sIG1DdXN0b21BZ2dyZWdhdGVzW3NDdXN0b21dIGFzIG9iamVjdCwge1xuXHRcdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIHNDdXN0b20sXG5cdFx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdFx0cGF0aDogc0N1c3RvbSxcblx0XHRcdFx0XHRkYXRhVHlwZTogZGF0YVR5cGUsXG5cdFx0XHRcdFx0ZGF0YXBvaW50OiBudWxsLCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHRcdFx0dW5pdFBhdGg6XG5cdFx0XHRcdFx0XHQob1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIGFzIHsgJFBhdGg6IHN0cmluZyB9KT8uJFBhdGggfHxcblx0XHRcdFx0XHRcdChvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuVW5pdFwiXSBhcyB7ICRQYXRoOiBzdHJpbmcgfSk/LiRQYXRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5wdXNoKG9JdGVtKTtcblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGFBZ2dyZWdhdGVQcm9wZXJ0aWVzO1xufTtcbkNoYXJ0RGVsZWdhdGUucmViaW5kID0gZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQsIG9CaW5kaW5nSW5mbzogUHJvcGVydHlCaW5kaW5nSW5mbyk6IHZvaWQge1xuXHRjb25zdCBzU2VhcmNoID0gb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblxuXHRpZiAoc1NlYXJjaCkge1xuXHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHR9XG5cblx0QmFzZUNoYXJ0RGVsZWdhdGUucmViaW5kKG9NRENDaGFydCwgb0JpbmRpbmdJbmZvKTtcblxuXHRpZiAoc1NlYXJjaCkge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gKG9NRENDaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgQ2hhcnREZWxlZ2F0ZSkuZ2V0SW5uZXJDaGFydChvTURDQ2hhcnQpLFxuXHRcdFx0b0NoYXJ0QmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXG5cdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhpcyBpcyBmaXhlZCBpbiBNRENDaGFydCAvIFVJNSBDaGFydFxuXHRcdC8vIEluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyAyIE9EYXRhIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHN1c3BlbmQgdGhlIGJpbmRpbmcgYmVmb3JlIHNldHRpbmcgc29tZSBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Ly8gYW5kIHJlc3VtZSBpdCBvbmNlIHRoZSBjaGFydCBoYXMgYWRkZWQgb3RoZXIgYWdncmVnYXRpb24gcHJvcGVydGllcyAoaW4gb25CZWZvcmVSZW5kZXJpbmcpXG5cdFx0b0NoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0b0NoYXJ0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IHNlYXJjaDogc1NlYXJjaCB9KTtcblxuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0RGVsZWdhdGUgPSB7XG5cdFx0XHRvbkJlZm9yZVJlbmRlcmluZzogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRvQ2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0XHRvSW5uZXJDaGFydC5yZW1vdmVFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b0lubmVyQ2hhcnQuYWRkRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0fVxuXG5cdG9NRENDaGFydC5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcbn07XG5DaGFydERlbGVnYXRlLl9zZXRDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvSW5uZXJDaGFydDogc2FwQ2hhcnQpOiB2b2lkIHtcblx0Y29uc3Qgb0NoYXJ0QVBJID0gb01EQ0NoYXJ0LmdldFBhcmVudCgpIGFzIENoYXJ0VHlwZTtcblx0b0lubmVyQ2hhcnQuc2V0Vml6UHJvcGVydGllcyhvTURDQ2hhcnQuZGF0YShcInZpelByb3BlcnRpZXNcIikpO1xuXHRvSW5uZXJDaGFydC5kZXRhY2hTZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRGVzZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoRHJpbGxlZFVwKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpIGFzIChlOiBVSTVFdmVudDxvYmplY3QsIEV2ZW50UHJvdmlkZXI+KSA9PiB2b2lkKTtcblx0b0lubmVyQ2hhcnQuYXR0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSBhcyAoZTogVUk1RXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCk7XG5cblx0b0lubmVyQ2hhcnQuc2V0U2VsZWN0aW9uTW9kZSgob01EQ0NoYXJ0LmdldFBheWxvYWQoKSBhcyB7IHNlbGVjdGlvbk1vZGU6IHN0cmluZyB9KS5zZWxlY3Rpb25Nb2RlLnRvVXBwZXJDYXNlKCkgYXMgU2VsZWN0aW9uTW9kZSk7XG5cdEJhc2VDaGFydERlbGVnYXRlLl9zZXRDaGFydChvTURDQ2hhcnQsIG9Jbm5lckNoYXJ0KTtcbn07XG5DaGFydERlbGVnYXRlLl9nZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0KTogUHJvcGVydHlCaW5kaW5nSW5mbyB7XG5cdGlmICh0aGlzLl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZShvTURDQ2hhcnQpKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlKG9NRENDaGFydCk7XG5cdH1cblxuXHRjb25zdCBvTWV0YWRhdGFJbmZvID0gKG9NRENDaGFydC5nZXREZWxlZ2F0ZSgpIGFzIHsgcGF5bG9hZDogdW5rbm93biB9KS5wYXlsb2FkIGFzIHsgcGFyYW1ldGVyczogb2JqZWN0OyBjaGFydENvbnRleHRQYXRoOiBzdHJpbmcgfTtcblx0Y29uc3Qgb1BhcmFtcyA9IG1lcmdlKHt9LCBvTWV0YWRhdGFJbmZvLnBhcmFtZXRlcnMsIHtcblx0XHRlbnRpdHlTZXQ6IG9NRENDaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpXG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHBhdGg6IG9NZXRhZGF0YUluZm8uY2hhcnRDb250ZXh0UGF0aCxcblx0XHRldmVudHM6IHtcblx0XHRcdGRhdGFSZXF1ZXN0ZWQ6IChvTURDQ2hhcnQuZ2V0UGFyZW50KCkgYXMgQ2hhcnRUeXBlKS5vbkludGVybmFsRGF0YVJlcXVlc3RlZC5iaW5kKG9NRENDaGFydC5nZXRQYXJlbnQoKSlcblx0XHR9LFxuXHRcdHBhcmFtZXRlcnM6IG9QYXJhbXNcblx0fTtcbn07XG5DaGFydERlbGVnYXRlLnJlbW92ZUl0ZW1Gcm9tSW5uZXJDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0LCBvTURDQ2hhcnRJdGVtOiBDaGFydEl0ZW0pOiB2b2lkIHtcblx0QmFzZUNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0LmNhbGwodGhpcywgb01EQ0NoYXJ0LCBvTURDQ2hhcnRJdGVtKTtcblx0aWYgKG9NRENDaGFydEl0ZW0uZ2V0VHlwZSgpID09PSBcImdyb3VwYWJsZVwiKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSB0aGlzLmdldElubmVyQ2hhcnQob01EQ0NoYXJ0KTtcblx0XHRvSW5uZXJDaGFydC5maXJlRGVzZWxlY3REYXRhKCk7XG5cdH1cbn07XG5DaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5OiBTb3J0UmVzdHJpY3Rpb25zUHJvcGVydHlJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0YklzVHJhbnNBZ2dyZWdhdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRpZiAoYklzVHJhbnNBZ2dyZWdhdGUpIHtcblx0XHRpZiAob01EQ0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKS50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5ID8gc29ydFJlc3RyaWN0aW9uc1Byb3BlcnR5LnNvcnRhYmxlIDogdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eSA/IHNvcnRSZXN0cmljdGlvbnNQcm9wZXJ0eS5zb3J0YWJsZSA6IHRydWU7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlciA9IGZ1bmN0aW9uIChvQ2hhcnQ6IENoYXJ0LCBvQmluZGluZ0luZm86IFByb3BlcnR5QmluZGluZ0luZm8pOiB2b2lkIHtcblx0aWYgKG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikudG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb0JpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gW107XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycz8uYUZpbHRlcnM/LnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBJRCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJuYWwgY2hhcnQgZm9yIHRoZSBtZWFzdXJlIG9yIGRpbWVuc2lvbi5cbiAqIEZvciBzdGFuZGFyZCBjYXNlcywgdGhpcyBpcyBqdXN0IHRoZSBJRCBvZiB0aGUgcHJvcGVydHkuXG4gKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIGFub3RoZXIgSUQgaW50ZXJuYWxseSBpbnNpZGUgdGhlIGNoYXJ0IChlLmcuIG9uIGR1cGxpY2F0ZSBwcm9wZXJ0eSBJRHMpIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbi5cbiAqIEluIHRoaXMgY2FzZSwgPGNvZGU+Z2V0UHJvcGVydHlGcm9tTmFtZUFuZEtpbmQ8L2NvZGU+IG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuIGFzIHdlbGwuXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBraW5kIFR5cGUgb2YgdGhlIHByb3BlcnR5IChtZWFzdXJlIG9yIGRpbWVuc2lvbilcbiAqIEByZXR1cm5zIEludGVybmFsIElEIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIsIFwiXCIpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1hcHMgYW4gaWQgb2YgYW4gaW50ZXJuYWwgY2hhcnQgZGltZW5zaW9uIG9yIG1lYXN1cmUgJiB0eXBlIG9mIGEgcHJvcGVydHkgdG8gaXRzIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgZW50cnkuXG4gKiBAcGFyYW0gbmFtZSBJRCBvZiBpbnRlcm5hbCBjaGFydCBtZWFzdXJlIG9yIGRpbWVuc2lvblxuICogQHBhcmFtIGtpbmQgVGhlIGtpbmQgb2YgcHJvcGVydHkgdGhhdCBpcyB1c2VkXG4gKiBAcGFyYW0gbWRjQ2hhcnQgUmVmZXJlbmNlIHRvIHRoZSBNRENfQ2hhcnRcbiAqIEByZXR1cm5zIFByb3BlcnR5SW5mbyBvYmplY3RcbiAqL1xuQ2hhcnREZWxlZ2F0ZS5nZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZywgbWRjQ2hhcnQ6IENoYXJ0KTogc3RyaW5nIHtcblx0cmV0dXJuIG1kY0NoYXJ0LmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoXCJfZmVfXCIgKyBraW5kICsgXCJfXCIgKyBuYW1lKTtcbn07XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgY2hhcnQncyBmaWx0ZXIgZGVsZWdhdGUgdG8gcHJvdmlkZSBiYXNpYyBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGFkZGluZyBGaWx0ZXJGaWVsZHMuXG4gKiBAcmV0dXJucyBPYmplY3QgZm9yIHRoZSBwZXJzb25hbGl6YXRpb24gb2YgdGhlIGNoYXJ0IGZpbHRlclxuICovXG5DaGFydERlbGVnYXRlLmdldEZpbHRlckRlbGVnYXRlID0gZnVuY3Rpb24gKCk6IG9iamVjdCB7XG5cdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdHtcblx0XHRcdGFwaVZlcnNpb246IDJcblx0XHR9LFxuXHRcdEZpbHRlckJhckRlbGVnYXRlLFxuXHRcdHtcblx0XHRcdGFkZEl0ZW06IGFzeW5jIGZ1bmN0aW9uIChvUGFyZW50Q29udHJvbDogQ29udHJvbCwgc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RWxlbWVudCB8IHVuZGVmaW5lZD4ge1xuXHRcdFx0XHRjb25zdCBwcm9wID0gQ2hhcnREZWxlZ2F0ZS5nZXRJbnRlcm5hbENoYXJ0TmFtZUZyb21Qcm9wZXJ0eU5hbWVBbmRLaW5kKHNQcm9wZXJ0eUluZm9OYW1lLCBcImdyb3VwYWJsZVwiKTtcblx0XHRcdFx0cmV0dXJuIEZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0ob1BhcmVudENvbnRyb2wgYXMgRmlsdGVyQmFyLCBwcm9wKS50aGVuKChvRmlsdGVySXRlbSkgPT4ge1xuXHRcdFx0XHRcdChvRmlsdGVySXRlbSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKT8uYmluZFByb3BlcnR5KFwiY29uZGl0aW9uc1wiLCB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIiRmaWx0ZXJzPi9jb25kaXRpb25zL1wiICsgc1Byb3BlcnR5SW5mb05hbWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQob0ZpbHRlckl0ZW0gYXMgdW5rbm93biBhcyBJdGVtKT8uc2V0UHJvcGVydHlLZXkoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVySXRlbSBhcyBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydERlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztFQWlFQSxNQUFNQSxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FBQztFQUMxREEsaUJBQWlCLENBQUNDLFVBQVUsR0FBRyxDQUFDO0VBQ2hDSixhQUFhLENBQUNLLFVBQVUsR0FBRyxrQkFBb0M7SUFDOUQsTUFBTUMsT0FBTyxDQUFDQyxJQUFJLENBQUM7TUFBRUMsSUFBSSxFQUFFO0lBQVksQ0FBQyxDQUFDO0lBQ3pDLE9BQU9MLGlCQUFpQixDQUFDRSxVQUFVLENBQUMsQ0FBQztFQUN0QyxDQUFDO0VBRURMLGFBQWEsQ0FBQ1MsZUFBZSxHQUFHLFVBQy9CQyxRQUFpQixFQUNqQkMsU0FBZ0IsRUFDaEJDLHFCQUFtRCxFQUNuREMsdUJBQXdGLEVBQ3hGQyxpQkFBMEMsRUFDMUNDLFdBQTRCLEVBQzVCQyxZQUFvQixFQUNwQkMsY0FBd0IsRUFDakI7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RWtJLFFBQVEsRUFBRXBRLElBQUksQ0FBQyxJQUFJaUssTUFBTSxDQUFDLGdCQUFnQixFQUFFaUcsY0FBYyxDQUFDQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDNUY7SUFDRDtFQUNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0F4VSxhQUFhLENBQUNtUiwyQ0FBMkMsR0FBRyxVQUFVM1EsSUFBWSxFQUFFa1UsSUFBWSxFQUFVO0lBQ3pHLE9BQU9sVSxJQUFJLENBQUM4UCxPQUFPLENBQUMsTUFBTSxHQUFHb0UsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUM7RUFDN0MsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBMVUsYUFBYSxDQUFDMlUsMEJBQTBCLEdBQUcsVUFBVW5VLElBQVksRUFBRWtVLElBQVksRUFBRUUsUUFBZSxFQUFVO0lBQ3pHLE9BQU9BLFFBQVEsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsTUFBTSxHQUFHSixJQUFJLEdBQUcsR0FBRyxHQUFHbFUsSUFBSSxDQUFDO0VBQzVFLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7RUFDQVIsYUFBYSxDQUFDK1UsaUJBQWlCLEdBQUcsWUFBb0I7SUFDckQsT0FBTzlVLE1BQU0sQ0FBQ0MsTUFBTSxDQUNuQjtNQUNDRSxVQUFVLEVBQUU7SUFDYixDQUFDLEVBQ0Q0VSxpQkFBaUIsRUFDakI7TUFDQ0MsT0FBTyxFQUFFLGVBQUFBLENBQWdCQyxjQUF1QixFQUFFQyxpQkFBeUIsRUFBbUM7UUFDN0csTUFBTUMsSUFBSSxHQUFHcFYsYUFBYSxDQUFDbVIsMkNBQTJDLENBQUNnRSxpQkFBaUIsRUFBRSxXQUFXLENBQUM7UUFDdEcsT0FBT0gsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQ0MsY0FBYyxFQUFlRSxJQUFJLENBQUMsQ0FBQ2hHLElBQUksQ0FBRWlHLFdBQVcsSUFBSztVQUN4RkEsV0FBVyxFQUE2QkMsWUFBWSxDQUFDLFlBQVksRUFBRTtZQUNuRWxSLElBQUksRUFBRSx1QkFBdUIsR0FBRytRO1VBQ2pDLENBQUMsQ0FBQztVQUNERSxXQUFXLEVBQXNCRSxjQUFjLENBQUNKLGlCQUFpQixDQUFDO1VBQ25FLE9BQU9FLFdBQVc7UUFDbkIsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUNELENBQUM7RUFDRixDQUFDO0VBQUMsT0FFYXJWLGFBQWE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -22,7 +22,8 @@ import type {
22
22
  } from "sap/fe/core/helpers/MetaModelFunction";
23
23
  import { getFilterableData, getSortRestrictionsInfo, isMultiValueFilterExpression } from "sap/fe/core/helpers/MetaModelFunction";
24
24
  import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
25
- import ResourceModelHelper from "sap/fe/core/helpers/ResourceModelHelper";
25
+ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
26
+ import ResourceModelHelper, { getLocalizedText } from "sap/fe/core/helpers/ResourceModelHelper";
26
27
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
27
28
  import type { SerializedCollectionBindingInfo } from "sap/fe/macros/CollectionBindingInfo";
28
29
  import CommonHelper from "sap/fe/macros/CommonHelper";
@@ -149,6 +150,15 @@ ChartDelegate._handleProperty = function (
149
150
  if (!unitOfMeasures.includes(oAggregateProperty.path)) {
150
151
  aProperties.push(oAggregateProperty);
151
152
  }
153
+ if (oAggregateProperty.label.startsWith("{metaModel>")) {
154
+ oAggregateProperty.label = ModelHelper.fetchTextFromMetaModel(
155
+ oAggregateProperty.label,
156
+ undefined,
157
+ (oMDCChart.getModel() as ODataModel).getMetaModel()
158
+ );
159
+ } else {
160
+ oAggregateProperty.label = getLocalizedText(oAggregateProperty.label, oMDCChart);
161
+ }
152
162
  });
153
163
  //Add transformation aggregated properties to chart properties
154
164
  if (aModes && aModes.includes("Filter")) {
@@ -302,6 +312,15 @@ function addPropertyToChart(
302
312
  break;
303
313
  }
304
314
  }
315
+ if (oProperty.label.startsWith("{metaModel>")) {
316
+ oProperty.label = ModelHelper.fetchTextFromMetaModel(
317
+ oProperty.label,
318
+ undefined,
319
+ (oMDCChart.getModel() as ODataModel).getMetaModel()
320
+ );
321
+ } else {
322
+ oProperty.label = getLocalizedText(oProperty.label, oMDCChart);
323
+ }
305
324
 
306
325
  aProperties.push(oProperty);
307
326
  return aProperties;