@sapui5/sap.fe.macros 1.142.0 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
  4. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
  5. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  6. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  7. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  8. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  9. package/src/sap/fe/macros/Field.js +5 -5
  10. package/src/sap/fe/macros/Field.ts +5 -3
  11. package/src/sap/fe/macros/FooterContent.js +3 -2
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +5 -5
  15. package/src/sap/fe/macros/MacroAPI.js +2 -2
  16. package/src/sap/fe/macros/MacroAPI.ts +1 -1
  17. package/src/sap/fe/macros/MessageButton.js +3 -3
  18. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  19. package/src/sap/fe/macros/MicroChart.js +3 -2
  20. package/src/sap/fe/macros/MicroChart.tsx +1 -1
  21. package/src/sap/fe/macros/Share.js +7 -7
  22. package/src/sap/fe/macros/Share.tsx +9 -6
  23. package/src/sap/fe/macros/Status.js +6 -5
  24. package/src/sap/fe/macros/Status.tsx +3 -4
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  27. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  28. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
  33. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  34. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  35. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  36. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  37. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  38. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  39. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  40. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  41. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
  42. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
  43. package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
  44. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  45. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  46. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  47. package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
  48. package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
  49. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
  50. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
  51. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
  52. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
  53. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  54. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  55. package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
  56. package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
  57. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  58. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  59. package/src/sap/fe/macros/library.js +5 -6
  60. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  61. package/src/sap/fe/macros/messagebundle.properties +6 -0
  62. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  63. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  64. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  65. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  66. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  67. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  68. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  69. package/src/sap/fe/macros/table/Action.js +7 -4
  70. package/src/sap/fe/macros/table/Action.ts +3 -3
  71. package/src/sap/fe/macros/table/Column.js +3 -2
  72. package/src/sap/fe/macros/table/Column.ts +1 -1
  73. package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
  74. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
  75. package/src/sap/fe/macros/table/Table.block.js +6 -3
  76. package/src/sap/fe/macros/table/Table.block.tsx +13 -3
  77. package/src/sap/fe/macros/table/TableAPI.js +13 -8
  78. package/src/sap/fe/macros/table/TableAPI.ts +10 -3
  79. package/src/sap/fe/macros/table/TableDefinition.js +2 -2
  80. package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
  81. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
  82. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
  83. package/src/sap/fe/macros/table/TableRuntime.js +24 -12
  84. package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
  85. package/src/sap/fe/macros/table/Utils.js +9 -3
  86. package/src/sap/fe/macros/table/Utils.ts +14 -8
  87. package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
  88. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
  89. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  90. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  91. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
  92. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
  93. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  94. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  95. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
  96. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
  97. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  98. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  99. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  100. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  101. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  102. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
@@ -55,7 +55,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
55
55
  }
56
56
  return ConverterContext.createConverterContextForMacro(oVisualizationObjectPath.startingEntitySet.name, oMetaModel, oAppComponent?.getDiagnostics(), merge, oVisualizationObjectPath.contextLocation, new ManifestWrapper(manifestSettings ?? {}));
57
57
  },
58
- getConvertedFilterFields: function (oFilterControl, sEntityTypePath, includeHidden, metaModel, appComponent, oModifier, lineItemTerm) {
58
+ getConvertedFilterFields: function (oFilterControl, sEntityTypePath, includeHidden, metaModel, appComponent, oModifier, lineItemTerm, propertyInfosFromFilterBar) {
59
59
  const oMetaModel = this._getFilterMetaModel(oFilterControl, metaModel);
60
60
  const sFilterEntityTypePath = DelegateUtil.getCustomData(oFilterControl, "entityType");
61
61
  const annotationPath = DelegateUtil.getCustomData(oFilterControl, "annotationPath"),
@@ -64,7 +64,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
64
64
  const oConverterContext = this.createConverterContext(oFilterControl, sEntityTypePath, metaModel ?? oMetaModel, appComponent);
65
65
 
66
66
  //aSelectionFields = FilterBarConverter.getSelectionFields(oConverterContext);
67
- return this._getSelectionFields(oFilterControl, sEntityTypePath, sFilterEntityTypePath, contextPath, lrTables, oMetaModel, oConverterContext, includeHidden, oModifier, lineItemTerm, annotationPath);
67
+ return this._getSelectionFields(oFilterControl, sEntityTypePath, sFilterEntityTypePath, contextPath, lrTables, oMetaModel, oConverterContext, includeHidden, oModifier, lineItemTerm, annotationPath, propertyInfosFromFilterBar);
68
68
  },
69
69
  getBindingPathForParameters: function (oIFilter, mConditions, aFilterPropertiesMetadata, aParameters) {
70
70
  const aParams = [];
@@ -891,10 +891,16 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
891
891
  }
892
892
  return [];
893
893
  },
894
- _getSelectionFields: function (oFilterControl, sEntityTypePath, sFilterEntityTypePath, contextPath, lrTables, oMetaModel, oConverterContext, includeHidden, oModifier, lineItemTerm, annotationPath) {
894
+ _getSelectionFields: function (oFilterControl, sEntityTypePath, sFilterEntityTypePath, contextPath, lrTables, oMetaModel, oConverterContext, includeHidden, oModifier, lineItemTerm, annotationPath, propertyInfosFromFilterBar) {
895
895
  const filterFields = FilterBarConverter.getSelectionFields(oConverterContext, lrTables, annotationPath, includeHidden, lineItemTerm);
896
896
  let selectionFields = filterFields.selectionFields;
897
- const propertyInfos = oFilterControl.data ? this.getFilterPropertyInfo(oFilterControl) : JSON.parse(filterFields.sPropertyInfo.replace(/\\\{/g, "{").replace(/\\\}/g, "}")); // propertyInfo string is returned from the getSelectionFields
897
+ let propertyInfos;
898
+ //During templating time while adding a flex change propertyInfosFromFilterBar will be passed
899
+ if (propertyInfosFromFilterBar && propertyInfosFromFilterBar.length > 0) {
900
+ propertyInfos = propertyInfosFromFilterBar;
901
+ } else {
902
+ propertyInfos = oFilterControl.data ? this.getFilterPropertyInfo(oFilterControl) : JSON.parse(filterFields.sPropertyInfo.replace(/\\\{/g, "{").replace(/\\\}/g, "}")); // propertyInfo string is returned from the getSelectionFields
903
+ }
898
904
  if ((oModifier ? oModifier.getControlType(oFilterControl) === "sap.ui.mdc.FilterBar" : oFilterControl.isA("sap.ui.mdc.FilterBar")) && sEntityTypePath !== sFilterEntityTypePath) {
899
905
  /**
900
906
  * We are in a multi-entity set scenario so we add annotation "SelectionFields"
@@ -1085,8 +1091,28 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
1085
1091
  }
1086
1092
  return _propertyInfo;
1087
1093
  });
1094
+ },
1095
+ /**
1096
+ * Checks if the Property already exists in the propertyInfo array, used during templating to avoid duplicates.
1097
+ * @param parentControl FilterBar control where the custom data is stored
1098
+ * @param modifier Modifier
1099
+ * @param propertyInfoName Name of the property to be checked
1100
+ * @returns Array of PropertyInfos after removing the unwanted properties
1101
+ */
1102
+ _checkIfPropertyInfoExists: async function (parentControl, modifier, propertyInfoName) {
1103
+ let propertyInfo = [];
1104
+ try {
1105
+ const customDataValue = await DelegateUtil.getCustomDataWithModifier(parentControl, "feFilterInfo", modifier);
1106
+ if (customDataValue) {
1107
+ propertyInfo = JSON.parse(customDataValue);
1108
+ return propertyInfo.some(obj => obj.name === propertyInfoName);
1109
+ }
1110
+ return false;
1111
+ } catch (error) {
1112
+ return false;
1113
+ }
1088
1114
  }
1089
1115
  };
1090
1116
  return oFilterUtils;
1091
1117
  }, false);
1092
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9wZXJ0eUluZm9LZXlzIiwiQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCIsIm9GaWx0ZXJVdGlscyIsImdldEZpbHRlciIsInZJRmlsdGVyIiwiYUZpbHRlcnMiLCJnZXRGaWx0ZXJJbmZvIiwiZmlsdGVycyIsImxlbmd0aCIsIkZpbHRlciIsInVuZGVmaW5lZCIsImdldEZpbHRlckZpZWxkIiwicHJvcGVydHlQYXRoIiwiY29udmVydGVyQ29udGV4dCIsImVudGl0eVR5cGUiLCJGaWx0ZXJCYXJDb252ZXJ0ZXIiLCJidWlsZFByb3BlcnlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJvUHJvcGVydHlJbmZvIiwiYVR5cGVDb25maWciLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsIm9UeXBlQ29uZmlnIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJrZXkiLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsIm9GaWx0ZXJDb250cm9sIiwic0VudGl0eVR5cGVQYXRoIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50Iiwic0ZpbHRlckVudGl0eVR5cGVQYXRoIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImNvbnRleHRQYXRoIiwib1ZpZXciLCJpc0EiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtYW5pZmVzdFNldHRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImNvbnRleHRMb2NhdGlvbiIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImluY2x1ZGVIaWRkZW4iLCJvTW9kaWZpZXIiLCJsaW5lSXRlbVRlcm0iLCJfZ2V0RmlsdGVyTWV0YU1vZGVsIiwibHJUYWJsZXMiLCJfZ2V0RmllbGRzRm9yVGFibGUiLCJvQ29udmVydGVyQ29udGV4dCIsIl9nZXRTZWxlY3Rpb25GaWVsZHMiLCJnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMiLCJvSUZpbHRlciIsIm1Db25kaXRpb25zIiwiYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSIsImFQYXJhbWV0ZXJzIiwiYVBhcmFtcyIsInNldFR5cGVDb25maWdUb1Byb3BlcnRpZXMiLCJzRmllbGRQYXRoIiwib0NvbmRpdGlvbkludGVybmFsIiwib1Byb3BlcnR5IiwiRmlsdGVyVXRpbCIsImdldFByb3BlcnR5QnlLZXkiLCJ0eXBlQ29uZmlnIiwiVHlwZU1hcCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsImZvcm1hdE9wdGlvbnMiLCJjb25zdHJhaW50cyIsIm1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiIsIkNvbmRpdGlvbkNvbnZlcnRlciIsInRvVHlwZSIsImdldFR5cGVNYXAiLCJzRWRtVHlwZSIsIk9EQVRBX1RZUEVfTUFQUElORyIsImNsYXNzTmFtZSIsInB1c2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsInZhbHVlcyIsImRhdGEiLCJzRW50aXR5U2V0UGF0aCIsInN1YnN0cmluZyIsInNQYXJhbWV0ZXJFbnRpdHlTZXQiLCJzbGljZSIsImxhc3RJbmRleE9mIiwic1RhcmdldE5hdmlnYXRpb24iLCJ0b1N0cmluZyIsImdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0IiwiYklzSGlkZURyYWZ0IiwiJGVkaXRTdGF0ZSIsIm9Db25kaXRpb24iLCJmaW5kIiwiY29uZGl0aW9uIiwib3BlcmF0b3IiLCJpbmNsdWRlcyIsIm1Qcm9wZXJ0aWVzIiwibUZpbHRlckNvbmRpdGlvbnMiLCJhSWdub3JlUHJvcGVydGllcyIsImlnbm9yZWRQcm9wZXJ0aWVzIiwib1RhcmdldENvbnRyb2wiLCJ0YXJnZXRDb250cm9sIiwic1RhcmdldEVudGl0eVBhdGgiLCJtUGFyYW1ldGVycyIsInNTZWFyY2giLCJzQmluZGluZ1BhdGgiLCJhUHJvcGVydGllc01ldGFkYXRhIiwicHJvcGVydGllc01ldGFkYXRhIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiX2dldFNlYXJjaEZpZWxkIiwiX2dldEZpbHRlckNvbmRpdGlvbnMiLCJnZXRGaWx0ZXJQcm9wZXJ0eUluZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJfZ2V0RmlsdGVyUHJvcGVydGllc01ldGFkYXRhIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzS2V5IiwiSlNPTiIsInBhcnNlIiwicGFyYW0iLCJyZXF1aXJlZFBhcmFtIiwibVBhcmFtZXRlcnNWYWx1ZSIsImFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGEiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJfYUlnbm9yZVByb3BlcnRpZXMiLCJfZ2V0SWdub3JlZFByb3BlcnRpZXMiLCJjb25jYXQiLCJnZXRFZGl0U3RhdGVBbmRGaWx0ZXIiLCJwYXJhbWV0ZXJzIiwic2VhcmNoIiwiYmluZGluZ1BhdGgiLCJfcmVmIiwib0ZpbHRlciIsImhhc0VkaXRTdGF0ZU1ldGFkYXRhIiwiZmlsdGVyIiwicHJvcGVydHkiLCJlZGl0U3RhdGVGaWx0ZXIiLCJoYXNPd25Qcm9wZXJ0eSIsImVkaXRTdGF0ZVZhbHVlIiwiRURJVFNUQVRFIiwiZ2V0RmlsdGVyRm9yRWRpdFN0YXRlIiwidmlldyIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJnZXRQcm9wZXJ0eSIsIl90cmFuc2Zvcm1EYXRlVGltZU9mZnNldEZpbHRlcnMiLCJoYXNFZGl0U3RhdGVGaWx0ZXIiLCJoYXNFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseSIsImV4Y2hhbmdlRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkiLCJhbmQiLCJvRmlsdGVyQmFyIiwiQXJyYXkiLCJpc0FycmF5IiwiYWN0dWFsRmlsdGVycyIsImZpcnN0RmlsdGVyIiwib1Byb3BlcnR5SGVscGVyIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJkYXRlVGltZU9mZnNldFBhdGhzIiwiTWFwIiwic0NvbmRpdGlvblBhdGgiLCJwcm9wZXJ0eUluZm8iLCJpc0RhdGVUaW1lT2Zmc2V0IiwidHlwZUluc3RhbmNlIiwiZ2V0TmFtZSIsInByZWNpc2lvbiIsInNldCIsIl90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlUmVjdXJzaXZlbHkiLCJpIiwiZmlsdGVyV2l0aE5lc3RlZEZpbHRlcnMiLCJmaWx0ZXJQYXRoIiwiZ2V0UGF0aCIsImZpbHRlck9wZXJhdG9yIiwiZ2V0T3BlcmF0b3IiLCJmaWx0ZXJWYWx1ZTEiLCJnZXRWYWx1ZTEiLCJmaWx0ZXJWYWx1ZTIiLCJnZXRWYWx1ZTIiLCJMb2ciLCJ3YXJuaW5nIiwic2hvdWxkVHJhbnNmb3JtIiwiaGFzIiwiZ2V0IiwidHJhbnNmb3JtZWRGaWx0ZXIiLCJfdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZSIsIm5lc3RlZEZpbHRlciIsImdldENvbmRpdGlvbiIsIm5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMiLCJoYXNUcmFuc2Zvcm1hdGlvbiIsImoiLCJzdWJGaWx0ZXIiLCJzdWJGaWx0ZXJXaXRoTmVzdGluZyIsInN1YkZpbHRlclBhdGgiLCJzdWJGaWx0ZXJPcGVyYXRvciIsInN1YkZpbHRlclZhbHVlMSIsInN1YkZpbHRlclZhbHVlMiIsInNob3VsZFRyYW5zZm9ybVN1YkZpbHRlciIsIm1hdGNoaW5nQ29uZGl0aW9uUGF0aCIsImZyb20iLCJwYXRoUGFydHMiLCJzcGxpdCIsIm5hdmlnYXRpb25QYXJ0IiwicmVwbGFjZSIsInByb3BlcnR5UGFydCIsIkJvb2xlYW4iLCJlbmRzV2l0aCIsInRyYW5zZm9ybWVkU3ViRmlsdGVyIiwicGF0aCIsInZhcmlhYmxlIiwiZ2V0VmFyaWFibGUiLCJiQW5kIiwibmVzdGVkRmlsdGVyUGF0aCIsIm5lc3RlZEZpbHRlck9wZXJhdG9yIiwibmVzdGVkRmlsdGVyVmFsdWUxIiwibmVzdGVkRmlsdGVyVmFsdWUyIiwic2hvdWxkVHJhbnNmb3JtTmVzdGVkIiwidHJhbnNmb3JtZWROZXN0ZWRGaWx0ZXIiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJvcmlnaW5hbFZhbHVlMSIsImRhdGVUaW1lTWF0Y2gxIiwibWF0Y2giLCJkYXRlVGltZVBhcnQxIiwidGltZXpvbmUxIiwibWF4RGVjaW1hbFZhbHVlIiwicmVwZWF0Iiwic3RhcnRWYWx1ZSIsImVuZFZhbHVlIiwiRmlsdGVyT3BlcmF0b3IiLCJCVCIsIm9yaWdpbmFsVmFsdWUyIiwiZGF0ZVRpbWVNYXRjaDIiLCJkYXRlVGltZVBhcnQyIiwidGltZXpvbmUyIiwiYWRqdXN0ZWRWYWx1ZTIiLCJzb21lIiwiZ2V0RmlsdGVycyIsIm1hcCIsImlzQW5kIiwiYVByb3BlcnRpZXMiLCJvSUZpbHRlclByb3BlcnR5IiwiZ2V0Q29uc3RyYWludHMiLCJGdW5jdGlvbiIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwib0NvbnRyb2wiLCJzVGFyZ2V0RW50aXR5VHlwZVBhdGgiLCJvRmlsdGVyQmFyRW50aXR5UGF0aCIsIm9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9ucyIsImdldE9iamVjdCIsImFOb3RBcHBsaWNhYmxlIiwiZ2V0Q29uZGl0aW9ucyIsImJJc0ZpbHRlckJhckVudGl0eVR5cGUiLCJiSXNDaGFydCIsImJJc0FuYWx5dGljYWxUYWJsZSIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImJJc1RyZWVUYWJsZSIsImNvbnRyb2wiLCJ0eXBlIiwiYkVuYWJsZVNlYXJjaCIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImVuYWJsZVNlYXJjaCIsImVuYWJsZUJhc2ljU2VhcmNoIiwiYVRhcmdldFByb3BlcnRpZXMiLCJtVGFyZ2V0UHJvcGVydGllcyIsInJlZHVjZSIsIm1Qcm9wIiwib1Byb3AiLCJtQWdncmVnYXRlZFByb3BlcnRpZXMiLCJjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9ucyIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIm1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRBbGxDdXN0b21BZ2dyZWdhdGVzIiwic0FnZ3JlZ2F0ZU5hbWUiLCJvQWdncmVnYXRlIiwic1Byb3BlcnR5IiwiYUNvbmRpdGlvblByb3BlcnR5IiwidHlwZUNoZWNrIiwiaXNDdXN0b21GaWx0ZXIiLCJnZXRTZWFyY2giLCJfZ2V0VmFsdWVMaXN0SW5mbyIsImZpbHRlckJhciIsInByb3BlcnR5TmFtZSIsInZhbHVlTGlzdEluZm9zIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJjYXRjaCIsIl9wcm9wZXJ0eUluZm8iLCJfZ2V0Q29uZGl0aW9uVmFsaWRhdGVkIiwidmFsdWVMaXN0SW5mbyIsInZhbHVlIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiTm90VmFsaWRhdGVkIiwidmFsdWVMaXN0UHJvcGVydGllcyIsIlBhcmFtZXRlcnMiLCJwYXJhbWV0ZXIiLCJ2YWx1ZU9mIiwiJFR5cGUiLCJMb2NhbERhdGFQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJWYWx1ZUxpc3RQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5UGF0aCIsIkVRIiwibGlzdEJpbmRpbmciLCIkbW9kZWwiLCJiaW5kTGlzdCIsIkNvbGxlY3Rpb25QYXRoIiwiJHNlbGVjdCIsInZhbHVlRXhpc3RzIiwicmVxdWVzdENvbnRleHRzIiwiVmFsaWRhdGVkIiwiZXJyb3IiLCJfY2xlYXJGaWx0ZXJWYWx1ZSIsImNvbmRpdGlvblBhdGgiLCJvU3RhdGUiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJmaWx0ZXJlZCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInNldEZpbHRlclZhbHVlcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsIl9zZXRGaWx0ZXJWYWx1ZXMiLCJhZGRGaWx0ZXJWYWx1ZXMiLCJfbGVuMiIsIl9rZXkyIiwiZ2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgiLCJnZXRGaWx0ZXJCYXJGb3JBZGFwdGF0aW9uQ29udHJvbCIsInBvdGVudGlhbEZpbHRlckJhciIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsImVudGl0eVR5cGVQYXRoIiwiYXBwZW5kIiwiX2xlbjMiLCJfa2V5MyIsInNPcGVyYXRvciIsInZWYWx1ZXMiLCJ3aGVuSW5pdGlhbGl6ZWQiLCJTZW1hbnRpY0RhdGVPcGVyYXRvcnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwic3VwcG9ydGVkVmFsdWVUeXBlcyIsIkVycm9yIiwibWFpbkZpbHRlckJhckNvbnRyb2wiLCJwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiT3BlcmF0b3JOYW1lIiwiTk9UQlQiLCJDb25kaXRpb24iLCJjcmVhdGVDb25kaXRpb24iLCJQcm9taXNlIiwiYWxsIiwiY29uZGl0aW9uVmFsaWRhdGVkU3RhdHVzIiwiY29uZGl0aW9uVG9Nb2RlbFBhdGgiLCJfZ2V0RW50aXR5U2V0UGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0RW50aXR5U2V0UGF0aCIsInRhYmxlQ29udHJvbHMiLCJnZXRDb250cm9sbGVyIiwiX2dldENvbnRyb2xzIiwib1RhYmxlIiwiZmlsdGVyRmllbGRzIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwic2VsZWN0aW9uRmllbGRzIiwicHJvcGVydHlJbmZvcyIsInNQcm9wZXJ0eUluZm8iLCJnZXRDb250cm9sVHlwZSIsIm9QYWdlQ29udGV4dCIsImFGaWx0ZXJCYXJTZWxlY3Rpb25GaWVsZHNBbm5vdGF0aW9uIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwibWFwU2VsZWN0aW9uRmllbGRzIiwib1NlbGVjdGlvbkZpZWxkIiwib0ZpbHRlckJhclNlbGVjdGlvbkZpZWxkQW5ub3RhdGlvbiIsInNQYXRoIiwib0ZpbHRlckZpZWxkIiwiZmllbGROYW1lcyIsIm9GaWVsZCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNGcm9tUHJvcGVydHlJbmZvcyIsInNlbEZpZWxkIiwiaW5kZXhPZiIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwibGFiZWwiLCJnZXRQcm9wZXJ0eUluZm8iLCJmaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaWdub3JlUHJvcGVydGllcyIsImZpbHRlclByb3BlcnR5IiwiZmlsdGVyUHJvcGVydHlOYW1lIiwiZW50aXR5UHJvcGVydGllc0N1cnJlbnQiLCJlbnRpdHkiLCJpc0luaXRpYWxpemVkIiwiZm9ybWF0UHJvcGVydHlJbmZvIiwicHJvcEluZm8iLCJwcm9wSW5mb3MiLCJfZm9ybWF0UHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwic3RyaW5naWZ5IiwiaGlkZGVuRmlsdGVyIiwicmVxdWlyZWQiLCJ0b29sdGlwIiwidmlzaWJsZSIsIm1heENvbmRpdGlvbnMiLCJjYXNlU2Vuc2l0aXZlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvbkZpZWxkcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBIaWRkZW5EcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eVR5cGVDb25maWcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZCwgUHJvcGVydHlJbmZvLCBQcm9wZXJ0eUluZm9FeHRlcm5hbCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgKiBhcyBGaWx0ZXJCYXJDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IGdldEFsbEN1c3RvbUFnZ3JlZ2F0ZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgT0RBVEFfVFlQRV9NQVBQSU5HIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHsgdHlwZSBkZWZhdWx0IGFzIEZFRmlsdGVyQmFyIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbEJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBDb25kaXRpb24gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvbkNvbnZlcnRlciBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uQ29udmVydGVyXCI7XG5pbXBvcnQgQ29uZGl0aW9uVmFsaWRhdGVkIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0NvbmRpdGlvblZhbGlkYXRlZFwiO1xuaW1wb3J0IE9wZXJhdG9yTmFtZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9PcGVyYXRvck5hbWVcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3V0aWwvRmlsdGVyVXRpbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IEVESVRTVEFURSBmcm9tIFwiLi4vZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIElGaWx0ZXJDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0U2VhcmNoPzogKCkgPT4gc3RyaW5nO1xuXHRnZXRQcm9wZXJ0eUluZm9TZXQ/OiAoKSA9PiBQcm9wZXJ0eUluZm9bXTtcblx0Z2V0UHJvcGVydHlJbmZvPzogKCkgPT4gUHJvcGVydHlJbmZvW107XG5cdGdldFR5cGVNYXA6ICgpID0+IFR5cGVNYXA7XG5cdGdldENvbnRyb2xEZWxlZ2F0ZT86ICgpID0+IHtcblx0XHRmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IChzRW50aXR5U2V0UGF0aDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NvbnRyb2w6IENvbnRyb2wpID0+IFByb3BlcnR5SW5mb1tdO1xuXHR9O1xuXHRpc0luaXRpYWxpemVkPzogKCkgPT4gYm9vbGVhbjtcblx0Z2V0Q3VycmVudFN0YXRlPzogKCkgPT4geyBpdGVtcz86IHsga2V5OiBzdHJpbmcgfVtdIH07XG59ICYgSUZpbHRlcjtcbmVudW0gUHJvcGVydHlJbmZvS2V5cyB7XG5cdGhpZGRlbkZpbHRlciA9IFwiaGlkZGVuRmlsdGVyXCIsXG5cdHJlcXVpcmVkID0gXCJyZXF1aXJlZFwiLFxuXHRwYXRoID0gXCJwYXRoXCIsXG5cdHRvb2x0aXAgPSBcInRvb2x0aXBcIixcblx0dmlzaWJsZSA9IFwidmlzaWJsZVwiLFxuXHRtYXhDb25kaXRpb25zID0gXCJtYXhDb25kaXRpb25zXCIsXG5cdGZvcm1hdE9wdGlvbnMgPSBcImZvcm1hdE9wdGlvbnNcIixcblx0Y29uc3RyYWludHMgPSBcImNvbnN0cmFpbnRzXCIsXG5cdGdyb3VwID0gXCJncm91cFwiLFxuXHRncm91cExhYmVsID0gXCJncm91cExhYmVsXCIsXG5cdGNhc2VTZW5zaXRpdmUgPSBcImNhc2VTZW5zaXRpdmVcIlxufVxuXG5jb25zdCBDT05ESVRJT05fUEFUSF9UT19QUk9QRVJUWV9QQVRIX1JFR0VYID0gL1srKl0vZztcblxuY29uc3Qgb0ZpbHRlclV0aWxzID0ge1xuXHRnZXRGaWx0ZXI6IGZ1bmN0aW9uICh2SUZpbHRlcjogc3RyaW5nIHwgSUZpbHRlckNvbnRyb2wgfCBudWxsKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJVdGlscy5nZXRGaWx0ZXJJbmZvKHZJRmlsdGVyKS5maWx0ZXJzO1xuXHRcdHJldHVybiBhRmlsdGVycz8ubGVuZ3RoID8gbmV3IEZpbHRlcihhRmlsdGVycywgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRGaWx0ZXJGaWVsZDogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0fSxcblx0YnVpbGRQcm9wZXJ5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFByb3BlcnR5SW5mbyB7XG5cdFx0bGV0IG9Qcm9wZXJ0eUluZm87XG5cdFx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5VHlwZUNvbmZpZz4gPSB7fTtcblx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQcm9wZXJ0eT4ocHJvcGVydHlJbmZvRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IEZpbHRlckJhckNvbnZlcnRlci5mZXRjaFR5cGVDb25maWcocHJvcGVydHlUYXJnZXRPYmplY3QpO1xuXHRcdG9Qcm9wZXJ0eUluZm8gPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIG9UeXBlQ29uZmlnKTtcblx0XHRhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IEZpbHRlckJhckNvbnZlcnRlci5hc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKG9Qcm9wZXJ0eUluZm8sIGNvbnZlcnRlckNvbnRleHQsIFtdLCBhVHlwZUNvbmZpZyk7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH0sXG5cdGNyZWF0ZUNvbnZlcnRlckNvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0bWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50XG5cdCk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdGNvbnRleHRQYXRoID0gc0VudGl0eVR5cGVQYXRoIHx8IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aDtcblxuXHRcdGNvbnN0IG9WaWV3ID0gKG9GaWx0ZXJDb250cm9sIGFzIFBhcnRpYWw8SUZpbHRlckNvbnRyb2w+KS5pc0EgPyBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9GaWx0ZXJDb250cm9sKSA6IG51bGw7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChtZXRhTW9kZWwgfHwgb0ZpbHRlckNvbnRyb2wuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBhcHBDb21wb25lbnQgfHwgKG9WaWV3ICYmIENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldykpO1xuXHRcdGNvbnN0IG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjb250ZXh0UGF0aCEpISk7XG5cdFx0bGV0IG1hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbC5pc0EgJiYgIW9GaWx0ZXJDb250cm9sLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkZpbHRlckJhclwiKSkge1xuXHRcdFx0bWFuaWZlc3RTZXR0aW5ncyA9ICgob1ZpZXcgJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKSkgfHwge30pIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50Py5nZXREaWFnbm9zdGljcygpIGFzIHVua25vd24gYXMgSURpYWdub3N0aWNzLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0bmV3IE1hbmlmZXN0V3JhcHBlcigobWFuaWZlc3RTZXR0aW5ncyA/PyB7fSkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpXG5cdFx0KTtcblx0fSxcblx0Z2V0Q29udmVydGVkRmlsdGVyRmllbGRzOiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sLFxuXHRcdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRcdG1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCxcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuXHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fZ2V0RmlsdGVyTWV0YU1vZGVsKG9GaWx0ZXJDb250cm9sLCBtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiZW50aXR5VHlwZVwiKTtcblx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiYW5ub3RhdGlvblBhdGhcIiksXG5cdFx0XHRjb250ZXh0UGF0aCA9IHNFbnRpdHlUeXBlUGF0aCB8fCBzRmlsdGVyRW50aXR5VHlwZVBhdGg7XG5cblx0XHRjb25zdCBsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSB0aGlzLl9nZXRGaWVsZHNGb3JUYWJsZShvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKTtcblxuXHRcdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0KG9GaWx0ZXJDb250cm9sLCBzRW50aXR5VHlwZVBhdGgsIG1ldGFNb2RlbCA/PyBvTWV0YU1vZGVsLCBhcHBDb21wb25lbnQpO1xuXG5cdFx0Ly9hU2VsZWN0aW9uRmllbGRzID0gRmlsdGVyQmFyQ29udmVydGVyLmdldFNlbGVjdGlvbkZpZWxkcyhvQ29udmVydGVyQ29udGV4dCk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdG9GaWx0ZXJDb250cm9sLFxuXHRcdFx0c0VudGl0eVR5cGVQYXRoLFxuXHRcdFx0c0ZpbHRlckVudGl0eVR5cGVQYXRoISxcblx0XHRcdGNvbnRleHRQYXRoISxcblx0XHRcdGxyVGFibGVzLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdG9Nb2RpZmllcixcblx0XHRcdGxpbmVJdGVtVGVybSxcblx0XHRcdGFubm90YXRpb25QYXRoXG5cdFx0KTtcblx0fSxcblxuXHRnZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnM6IGZ1bmN0aW9uIChcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2wsXG5cdFx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhOiBQcm9wZXJ0eUluZm9bXSB8IG51bGwsXG5cdFx0YVBhcmFtZXRlcnM6IHN0cmluZ1tdXG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgYVBhcmFtczogc3RyaW5nW10gPSBbXTtcblx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0ZpbHRlclV0aWxzLnNldFR5cGVDb25maWdUb1Byb3BlcnRpZXMoYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSkhO1xuXHRcdC8vIENvbGxlY3RpbmcgYWxsIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSBjb25kaXRpb25zXG5cdFx0Zm9yIChjb25zdCBzRmllbGRQYXRoIG9mIGFQYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnNbc0ZpZWxkUGF0aF0gJiYgbUNvbmRpdGlvbnNbc0ZpZWxkUGF0aF0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBXZSB3b3VsZCBiZSB1c2luZyBvbmx5IHRoZSBmaXJzdCBjb25kaXRpb24gZm9yIHBhcmFtZXRlciB2YWx1ZS5cblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbkludGVybmFsID0gbWVyZ2Uoe30sIG1Db25kaXRpb25zW3NGaWVsZFBhdGhdWzBdKSBhcyBDb25kaXRpb25PYmplY3Q7XG5cdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IEZpbHRlclV0aWwuZ2V0UHJvcGVydHlCeUtleShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhLCBzRmllbGRQYXRoKSBhcyBQcm9wZXJ0eUluZm87XG5cdFx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID1cblx0XHRcdFx0XHRvUHJvcGVydHkudHlwZUNvbmZpZyB8fCBUeXBlTWFwLmdldFR5cGVDb25maWcob1Byb3BlcnR5LmRhdGFUeXBlLCBvUHJvcGVydHkuZm9ybWF0T3B0aW9ucywgb1Byb3BlcnR5LmNvbnN0cmFpbnRzKTtcblx0XHRcdFx0Y29uc3QgbUludGVybmFsUGFyYW1ldGVyQ29uZGl0aW9uID0gQ29uZGl0aW9uQ29udmVydGVyLnRvVHlwZShvQ29uZGl0aW9uSW50ZXJuYWwsIG9UeXBlQ29uZmlnLCBvSUZpbHRlci5nZXRUeXBlTWFwKCkpO1xuXHRcdFx0XHRjb25zdCBzRWRtVHlwZSA9IE9EQVRBX1RZUEVfTUFQUElOR1tvVHlwZUNvbmZpZy5jbGFzc05hbWVdO1xuXHRcdFx0XHRhUGFyYW1zLnB1c2goXG5cdFx0XHRcdFx0YCR7c0ZpZWxkUGF0aH09JHtlbmNvZGVVUklDb21wb25lbnQoT0RhdGFVdGlscy5mb3JtYXRMaXRlcmFsKG1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbi52YWx1ZXNbMF0sIHNFZG1UeXBlKSl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEJpbmRpbmcgcGF0aCBmcm9tIEVudGl0eVR5cGVcblx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBvSUZpbHRlci5kYXRhKFwiZW50aXR5VHlwZVwiKTtcblx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IHNFbnRpdHlUeXBlUGF0aC5zdWJzdHJpbmcoMCwgc0VudGl0eVR5cGVQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdGNvbnN0IHNQYXJhbWV0ZXJFbnRpdHlTZXQgPSBzRW50aXR5U2V0UGF0aC5zbGljZSgwLCBzRW50aXR5U2V0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHNUYXJnZXROYXZpZ2F0aW9uID0gc0VudGl0eVNldFBhdGguc3Vic3RyaW5nKHNFbnRpdHlTZXRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdC8vIGNyZWF0ZSBwYXJhbWV0ZXIgY29udGV4dFxuXHRcdHJldHVybiBgJHtzUGFyYW1ldGVyRW50aXR5U2V0fSgke2FQYXJhbXMudG9TdHJpbmcoKX0pLyR7c1RhcmdldE5hdmlnYXRpb259YDtcblx0fSxcblxuXHRnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdDogZnVuY3Rpb24gKG1Db25kaXRpb25zPzogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+KTogYm9vbGVhbiB7XG5cdFx0bGV0IGJJc0hpZGVEcmFmdCA9IGZhbHNlO1xuXHRcdGlmIChtQ29uZGl0aW9ucyAmJiBtQ29uZGl0aW9ucy4kZWRpdFN0YXRlKSB7XG5cdFx0XHRjb25zdCBvQ29uZGl0aW9uID0gbUNvbmRpdGlvbnMuJGVkaXRTdGF0ZS5maW5kKGZ1bmN0aW9uIChjb25kaXRpb246IENvbmRpdGlvbk9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gY29uZGl0aW9uLm9wZXJhdG9yID09PSBcIkRSQUZUX0VESVRfU1RBVEVcIjtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9Db25kaXRpb24gJiYgKG9Db25kaXRpb24udmFsdWVzLmluY2x1ZGVzKFwiQUxMX0hJRElOR19EUkFGVFNcIikgfHwgb0NvbmRpdGlvbi52YWx1ZXMuaW5jbHVkZXMoXCJTQVZFRF9PTkxZXCIpKSkge1xuXHRcdFx0XHRiSXNIaWRlRHJhZnQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzSGlkZURyYWZ0O1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyBhbGwgZmlsdGVycyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHRoZSBNREMgRmlsdGVyQmFyLlxuXHQgKiBAcGFyYW0gdklGaWx0ZXIgU3RyaW5nIG9yIG9iamVjdCBpbnN0YW5jZSByZWxhdGVkIHRvIE1EQ19GaWx0ZXJCYXIvVGFibGUvQ2hhcnRcblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzIFByb3BlcnRpZXMgb24gZmlsdGVycyB0aGF0IGFyZSB0byBiZSByZXRyaWV2ZWQuIEF2YWlsYWJsZSBwYXJhbWV0ZXJzOlxuXHQgKiBAcGFyYW0gbVByb3BlcnRpZXMuaWdub3JlZFByb3BlcnRpZXMgQXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgd2hpY2ggc2hvdWxkIGJlIG5vdCBjb25zaWRlcmVkIGZvciBmaWx0ZXJpbmdcblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzLnByb3BlcnRpZXNNZXRhZGF0YSBBcnJheSB3aXRoIGFsbCB0aGUgcHJvcGVydHkgbWV0YWRhdGEuIElmIG5vdCBwcm92aWRlZCwgcHJvcGVydGllcyB3aWxsIGJlIHJldHJpZXZlZCBmcm9tIHZJRmlsdGVyLlxuXHQgKiBAcGFyYW0gbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCBNRENfdGFibGUgb3IgY2hhcnQuIElmIHByb3ZpZGVkLCBwcm9wZXJ0eSBuYW1lcyB3aGljaCBhcmUgbm90IHJlbGV2YW50IGZvciB0aGUgdGFyZ2V0IGNvbnRyb2wgZW50aXR5U2V0IGFyZSBub3QgY29uc2lkZXJlZC5cblx0ICogQHBhcmFtIG1GaWx0ZXJDb25kaXRpb25zIE1hcCB3aXRoIGV4dGVybmFsaXplZCBmaWx0ZXIgY29uZGl0aW9ucy5cblx0ICogQHJldHVybnMgRmlsdGVyQmFyIGZpbHRlcnMgYW5kIGJhc2ljIHNlYXJjaFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0RmlsdGVySW5mbzogZnVuY3Rpb24gKFxuXHRcdHZJRmlsdGVyOiBzdHJpbmcgfCBJRmlsdGVyQ29udHJvbCB8IG51bGwsXG5cdFx0bVByb3BlcnRpZXM/OiB7IGlnbm9yZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107IHByb3BlcnRpZXNNZXRhZGF0YT86IFByb3BlcnR5SW5mb1tdOyB0YXJnZXRDb250cm9sPzogQ29udHJvbCB9LFxuXHRcdG1GaWx0ZXJDb25kaXRpb25zPzogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+XG5cdCk6IEludGVybmFsQmluZGluZ0luZm8ge1xuXHRcdGxldCBhSWdub3JlUHJvcGVydGllcyA9IChtUHJvcGVydGllcyAmJiBtUHJvcGVydGllcy5pZ25vcmVkUHJvcGVydGllcykgfHwgW107XG5cdFx0Y29uc3Qgb1RhcmdldENvbnRyb2wgPSBtUHJvcGVydGllcyAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLFxuXHRcdFx0c1RhcmdldEVudGl0eVBhdGggPSBvVGFyZ2V0Q29udHJvbCA/IG9UYXJnZXRDb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0bGV0IG9JRmlsdGVyOiBJRmlsdGVyQ29udHJvbCA9IHZJRmlsdGVyIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0c1NlYXJjaCxcblx0XHRcdGFGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdLFxuXHRcdFx0c0JpbmRpbmdQYXRoLFxuXHRcdFx0YVByb3BlcnRpZXNNZXRhZGF0YSA9IG1Qcm9wZXJ0aWVzICYmIG1Qcm9wZXJ0aWVzLnByb3BlcnRpZXNNZXRhZGF0YTtcblx0XHRpZiAodHlwZW9mIHZJRmlsdGVyID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRvSUZpbHRlciA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodklGaWx0ZXIpIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2w7XG5cdFx0fVxuXHRcdGlmIChvSUZpbHRlcikge1xuXHRcdFx0c1NlYXJjaCA9IHRoaXMuX2dldFNlYXJjaEZpZWxkKG9JRmlsdGVyLCBhSWdub3JlUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IHRoaXMuX2dldEZpbHRlckNvbmRpdGlvbnMobVByb3BlcnRpZXMsIG1GaWx0ZXJDb25kaXRpb25zISwgb0lGaWx0ZXIpO1xuXHRcdFx0bGV0IGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgbnVsbDtcblx0XHRcdGlmIChvSUZpbHRlci5pc0E8RmlsdGVyQmFyPihcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEgPSB0aGlzLmdldEZpbHRlclByb3BlcnR5SW5mbyhvSUZpbHRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvU2V0ID8gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvU2V0KCkgOiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSA9IHRoaXMuX2dldEZpbHRlclByb3BlcnRpZXNNZXRhZGF0YShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhLCBvSUZpbHRlcik7XG5cdFx0XHRpZiAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmIChzS2V5ID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGFQYXJhbWV0ZXJzID0gb0lGaWx0ZXIuZGF0YShcInBhcmFtZXRlcnNcIikgfHwgW107XG5cdFx0XHRhUGFyYW1ldGVycyA9IHR5cGVvZiBhUGFyYW1ldGVycyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UoYVBhcmFtZXRlcnMpIDogYVBhcmFtZXRlcnM7XG5cdFx0XHRpZiAoYVBhcmFtZXRlcnMgJiYgYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBCaW5kaW5nIHBhdGggY2hhbmdlcyBpbiBjYXNlIG9mIHBhcmFtZXRlcnMuXG5cdFx0XHRcdHNCaW5kaW5nUGF0aCA9IG9GaWx0ZXJVdGlscy5nZXRCaW5kaW5nUGF0aEZvclBhcmFtZXRlcnMob0lGaWx0ZXIsIG1Db25kaXRpb25zLCBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhLCBhUGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhtQ29uZGl0aW9ucykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmZvckVhY2goKHBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKChyZXF1aXJlZFBhcmFtOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtID09PSByZXF1aXJlZFBhcmFtKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbVBhcmFtZXRlcnNWYWx1ZSA9IG1Db25kaXRpb25zW3BhcmFtXVswXS52YWx1ZXM7XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnNbcmVxdWlyZWRQYXJhbV0gPSBtUGFyYW1ldGVyc1ZhbHVlWzBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG1Db25kaXRpb25zKSB7XG5cdFx0XHRcdC8vRXhjbHVkZSBJbnRlcmZhY2UgRmlsdGVyIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHJlbGV2YW50IGZvciB0aGUgVGFyZ2V0IGNvbnRyb2wgZW50aXR5U2V0XG5cdFx0XHRcdGlmIChzVGFyZ2V0RW50aXR5UGF0aCAmJiBvSUZpbHRlci5kYXRhKFwiZW50aXR5VHlwZVwiKSAmJiBvSUZpbHRlci5kYXRhKFwiZW50aXR5VHlwZVwiKSAhPT0gc1RhcmdldEVudGl0eVBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0lGaWx0ZXIuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRcdFx0Y29uc3QgYVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YSA9IG9JRmlsdGVyXG5cdFx0XHRcdFx0XHQuZ2V0Q29udHJvbERlbGVnYXRlPy4oKVxuXHRcdFx0XHRcdFx0LmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzVGFyZ2V0RW50aXR5UGF0aCwgb01ldGFNb2RlbCwgb0lGaWx0ZXIpIGFzIFByb3BlcnR5SW5mb1tdO1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEgPSBhVGFyZ2V0UHJvcGVydGllc01ldGFkYXRhO1xuXG5cdFx0XHRcdFx0Y29uc3QgX2FJZ25vcmVQcm9wZXJ0aWVzID0gdGhpcy5fZ2V0SWdub3JlZFByb3BlcnRpZXMoXG5cdFx0XHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhIGFzIFByb3BlcnR5SW5mb1tdLFxuXHRcdFx0XHRcdFx0YVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKF9hSWdub3JlUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRhSWdub3JlUHJvcGVydGllcyA9IGFJZ25vcmVQcm9wZXJ0aWVzLmNvbmNhdChfYUlnbm9yZVByb3BlcnRpZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYVByb3BlcnRpZXNNZXRhZGF0YSAmJiBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhKSB7XG5cdFx0XHRcdFx0YVByb3BlcnRpZXNNZXRhZGF0YSA9IGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFyIGFQYXJhbUtleXMgPSBbXTtcblx0XHRcdFx0Ly8gYVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtKSB7XG5cdFx0XHRcdC8vIFx0YVBhcmFtS2V5cy5wdXNoKG9QYXJhbS5rZXkpO1xuXHRcdFx0XHQvLyB9KTtcblx0XHRcdFx0YUZpbHRlcnMgPSB0aGlzLmdldEVkaXRTdGF0ZUFuZEZpbHRlcih7XG5cdFx0XHRcdFx0b0lGaWx0ZXIsXG5cdFx0XHRcdFx0bUNvbmRpdGlvbnMsXG5cdFx0XHRcdFx0YVByb3BlcnRpZXNNZXRhZGF0YSxcblx0XHRcdFx0XHRhSWdub3JlUHJvcGVydGllcyxcblx0XHRcdFx0XHRhUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgcGFyYW1ldGVyczogbVBhcmFtZXRlcnMsIGZpbHRlcnM6IGFGaWx0ZXJzLCBzZWFyY2g6IHNTZWFyY2ggfHwgdW5kZWZpbmVkLCBiaW5kaW5nUGF0aDogc0JpbmRpbmdQYXRoIH07XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBGaWx0ZXIgcGFyYW1zIHRha2luZyBpbiBjb25zaWRlcmF0aW9uIHRoZSBFZGl0aW5nIFN0YXR1cyBmaWVsZCxcblx0ICogbWVyZ2VzL292ZXJyaWRlcyB0aGUgZGF0YSB0aGF0J3MgY29taW5nIGZyb20gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvLCBhbmQsXG5cdCAqIHJldHVybnMgYSBtYXBwZWQgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kLlxuXHQgKiBAcGFyYW0gcGFyYW0gT2JqZWN0XG5cdCAqIEBwYXJhbSBwYXJhbS5vSUZpbHRlciBPYmplY3QgRmlsdGVyQmFyIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBwYXJhbS5tQ29uZGl0aW9ucyBPYmplY3QgQ29uZGl0aW9ucyB0aGF0IGNvbWVzIGZyb20gdGhlIEZpbHRlciBGaWVsZHNcblx0ICogQHBhcmFtIHBhcmFtLmFQcm9wZXJ0aWVzTWV0YWRhdGEgQXJyYXkgRmlsdGVyIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBwYXJhbS5hSWdub3JlUHJvcGVydGllcyBBcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIGZpZWxkIGtleXMgd2hpY2ggbmVlZCB0byBiZSBpZ25vcmVkXG5cdCAqIEBwYXJhbSBwYXJhbS5hUGFyYW1ldGVycyBBcnJheSBVUkwgcGFyYW1zIHRoYXQgYWxzbyBuZWVkIHRvIGJlIGlnbm9yZSBhbmQgYXJlIG1lcmdlZCBpbnRvIHRoZSBhSWdub3JlUHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyBGaWx0ZXJCYXIgZmlsdGVycyBhcnJheVxuXHQgKi9cblx0Z2V0RWRpdFN0YXRlQW5kRmlsdGVyOiBmdW5jdGlvbiAoe1xuXHRcdG9JRmlsdGVyLFxuXHRcdG1Db25kaXRpb25zLFxuXHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEsXG5cdFx0YUlnbm9yZVByb3BlcnRpZXMsXG5cdFx0YVBhcmFtZXRlcnNcblx0fToge1xuXHRcdG9JRmlsdGVyOiBJRmlsdGVyQ29udHJvbDtcblx0XHRtQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+O1xuXHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgdW5kZWZpbmVkO1xuXHRcdGFJZ25vcmVQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0XHRhUGFyYW1ldGVyczogQ29uY2F0QXJyYXk8c3RyaW5nPjtcblx0fSk6IEZpbHRlcltdIHtcblx0XHRjb25zdCBvRmlsdGVyID0gKFxuXHRcdFx0RmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKFxuXHRcdFx0XHRvSUZpbHRlcixcblx0XHRcdFx0bUNvbmRpdGlvbnMsXG5cdFx0XHRcdG9GaWx0ZXJVdGlscy5zZXRUeXBlQ29uZmlnVG9Qcm9wZXJ0aWVzKGFQcm9wZXJ0aWVzTWV0YWRhdGEpISxcblx0XHRcdFx0YUlnbm9yZVByb3BlcnRpZXMuY29uY2F0KGFQYXJhbWV0ZXJzKVxuXHRcdFx0KSBhcyB7IGZpbHRlcnM6IEZpbHRlciB9XG5cdFx0KS5maWx0ZXJzO1xuXHRcdGNvbnN0IGhhc0VkaXRTdGF0ZU1ldGFkYXRhID0gYVByb3BlcnRpZXNNZXRhZGF0YT8uZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gXCIkZWRpdFN0YXRlXCIpO1xuXHRcdGxldCBlZGl0U3RhdGVGaWx0ZXI6IEZpbHRlciB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWFJZ25vcmVQcm9wZXJ0aWVzLmluY2x1ZGVzKFwiJGVkaXRTdGF0ZVwiKSAmJiBoYXNFZGl0U3RhdGVNZXRhZGF0YSAmJiBoYXNFZGl0U3RhdGVNZXRhZGF0YS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoXCIkZWRpdFN0YXRlXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGVkaXRTdGF0ZVZhbHVlID0gbUNvbmRpdGlvbnNbXCIkZWRpdFN0YXRlXCJdO1xuXHRcdFx0XHRlZGl0U3RhdGVGaWx0ZXIgPSBFRElUU1RBVEUuZ2V0RmlsdGVyRm9yRWRpdFN0YXRlKGVkaXRTdGF0ZVZhbHVlPy5bMF0/LnZhbHVlcz8uWzBdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRTdGF0ZUZpbHRlciA9IEVESVRTVEFURS5nZXRGaWx0ZXJGb3JFZGl0U3RhdGUoXCJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9JRmlsdGVyKTtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KTtcblx0XHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKGFwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHRcdD8uZW5hYmxlZDtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNIaWRkZW5EcmFmdEVuYWJsZWQgJiZcblx0XHRcdFx0b0lGaWx0ZXIuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlRHJhZnRFZGl0U3RhdGVGaWx0ZXJcIikgJiZcblx0XHRcdFx0b0lGaWx0ZXIuZ2V0UHJvcGVydHkoXCJkaXNhYmxlRHJhZnRFZGl0U3RhdGVGaWx0ZXJcIilcblx0XHRcdCkge1xuXHRcdFx0XHRlZGl0U3RhdGVGaWx0ZXIgPSBFRElUU1RBVEUuZ2V0RmlsdGVyRm9yRWRpdFN0YXRlKFwiQUxMXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgYUZpbHRlcnMgPSBvRmlsdGVyID8gW29GaWx0ZXJdIDogW107XG5cblx0XHQvLyggVHJhbnNmb3JtIERhdGVUaW1lT2Zmc2V0IHByZWNpc2lvbiA3IGZpbHRlcnNcblx0XHRpZiAob0lGaWx0ZXIuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0dGhpcy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZzZXRGaWx0ZXJzKGFGaWx0ZXJzLCBtQ29uZGl0aW9ucywgb0lGaWx0ZXIgYXMgRmlsdGVyQmFyKTtcblx0XHR9XG5cblx0XHRpZiAoZWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0XHRjb25zdCBoYXNFZGl0U3RhdGVGaWx0ZXIgPSB0aGlzLmhhc0VkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5KGFGaWx0ZXJzKTtcblx0XHRcdGlmIChoYXNFZGl0U3RhdGVGaWx0ZXIpIHtcblx0XHRcdFx0YUZpbHRlcnMgPSB0aGlzLmV4Y2hhbmdlRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkoZWRpdFN0YXRlRmlsdGVyLCBhRmlsdGVycyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVycyA9IFtcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdGZpbHRlcnM6IFsuLi5hRmlsdGVycywgZWRpdFN0YXRlRmlsdGVyXSxcblx0XHRcdFx0XHRcdGFuZDogdHJ1ZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhRmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogVHJhbnNmb3JtcyBEYXRlVGltZU9mZnNldCBmaWx0ZXJzIGJ5IGNvbnZlcnRpbmcgRVEgb3BlcmF0b3JzIHRvIEJUIG9wZXJhdG9yc1xuXHQgKiB3aXRoIHByZWNpc2lvbi1iYXNlZCByYW5nZSBmcm9tIC4wMDAuLi4gdG8gLjk5OS4uLiBiYXNlZCBvbiBwcm9wZXJ0eSBwcmVjaXNpb24uXG5cdCAqIEBwYXJhbSBhRmlsdGVycyBBcnJheSBvZiBmaWx0ZXIgb2JqZWN0cyB0byB0cmFuc2Zvcm1cblx0ICogQHBhcmFtIG1Db25kaXRpb25zIEZpbHRlciBjb25kaXRpb25zIGZyb20gdGhlIGZpbHRlciBiYXJcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgaW5zdGFuY2UgdG8gYWNjZXNzIHByb3BlcnR5IGluZm9ybWF0aW9uXG5cdCAqL1xuXHRfdHJhbnNmb3JtRGF0ZVRpbWVPZmZzZXRGaWx0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0YUZpbHRlcnM6IEZpbHRlcltdLFxuXHRcdG1Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdFx0b0ZpbHRlckJhcjogRmlsdGVyQmFyXG5cdCk6IHZvaWQge1xuXHRcdGlmICghYUZpbHRlcnMgfHwgIUFycmF5LmlzQXJyYXkoYUZpbHRlcnMpIHx8ICFtQ29uZGl0aW9ucykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBuZXN0ZWQgZmlsdGVyIHN0cnVjdHVyZSAtIHdoZW4gbXVsdGlwbGUgZmlsdGVycyBhcmUgZGVmaW5lZCxcblx0XHQvLyB0aGV5IG1heSBiZSBjb250YWluZWQgd2l0aGluIGFGaWx0ZXJzWzBdLmFGaWx0ZXJzXG5cdFx0bGV0IGFjdHVhbEZpbHRlcnM6IEZpbHRlcltdID0gYUZpbHRlcnM7XG5cdFx0Y29uc3QgZmlyc3RGaWx0ZXIgPSBhRmlsdGVyc1swXSBhcyBGaWx0ZXIgJiB7IGFGaWx0ZXJzPzogRmlsdGVyW10gfTtcblx0XHRpZiAoZmlyc3RGaWx0ZXI/LmFGaWx0ZXJzICYmIGZpcnN0RmlsdGVyLmFGaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFjdHVhbEZpbHRlcnMgPSBmaXJzdEZpbHRlci5hRmlsdGVycztcblx0XHR9XG5cblx0XHQvLyBHZXQgcHJvcGVydHkgaGVscGVyIHRvIGFjY2VzcyBwcm9wZXJ0eSBtZXRhZGF0YVxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUhlbHBlciA9IG9GaWx0ZXJCYXIuZ2V0UHJvcGVydHlIZWxwZXIoKTtcblx0XHRpZiAoIW9Qcm9wZXJ0eUhlbHBlcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIG1hcCBvZiBjb25kaXRpb24gcGF0aHMgdG8gdGhlaXIgcHJlY2lzaW9uIGxldmVsc1xuXHRcdGNvbnN0IGRhdGVUaW1lT2Zmc2V0UGF0aHM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG5cdFx0T2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlmIChtQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aF0gJiYgbUNvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gVXNlIHRoZSBmdWxsIGNvbmRpdGlvbiBwYXRoIGZvciBwcm9wZXJ0eSBoZWxwZXJcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gb1Byb3BlcnR5SGVscGVyLmdldFByb3BlcnR5KHNDb25kaXRpb25QYXRoKSBhc1xuXHRcdFx0XHRcdHwge1xuXHRcdFx0XHRcdFx0XHRkYXRhVHlwZT86IHN0cmluZztcblx0XHRcdFx0XHRcdFx0Y29uc3RyYWludHM/OiB7IHByZWNpc2lvbj86IG51bWJlciB9O1xuXHRcdFx0XHRcdFx0XHR0eXBlQ29uZmlnPzoge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGVJbnN0YW5jZT86IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0cmFpbnRzPzogeyBwcmVjaXNpb24/OiBudW1iZXIgfTtcblx0XHRcdFx0XHRcdFx0XHRcdGdldE5hbWUoKTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0fCB1bmRlZmluZWQ7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgcHJvcGVydHkgaXMgRGF0ZVRpbWVPZmZzZXRcblx0XHRcdFx0Y29uc3QgaXNEYXRlVGltZU9mZnNldDogYm9vbGVhbiA9XG5cdFx0XHRcdFx0KHByb3BlcnR5SW5mbz8uZGF0YVR5cGU/LmluY2x1ZGVzKFwiRGF0ZVRpbWVPZmZzZXRcIikgPz8gZmFsc2UpIHx8XG5cdFx0XHRcdFx0KHByb3BlcnR5SW5mbz8udHlwZUNvbmZpZz8udHlwZUluc3RhbmNlPy5nZXROYW1lKCkuaW5jbHVkZXMoXCJEYXRlVGltZU9mZnNldFwiKSA/PyBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IHByZWNpc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID1cblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8/LmNvbnN0cmFpbnRzPy5wcmVjaXNpb24gPz8gcHJvcGVydHlJbmZvPy50eXBlQ29uZmlnPy50eXBlSW5zdGFuY2U/LmNvbnN0cmFpbnRzPy5wcmVjaXNpb247XG5cblx0XHRcdFx0Ly8gT25seSBwcm9jZXNzIERhdGVUaW1lT2Zmc2V0IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHByZWNpc2lvblxuXHRcdFx0XHRpZiAoaXNEYXRlVGltZU9mZnNldCAmJiBwcmVjaXNpb24gIT09IHVuZGVmaW5lZCAmJiBwcmVjaXNpb24gPiAwKSB7XG5cdFx0XHRcdFx0ZGF0ZVRpbWVPZmZzZXRQYXRocy5zZXQoc0NvbmRpdGlvblBhdGgsIHByZWNpc2lvbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIFRyYW5zZm9ybSBmaWx0ZXJzIHJlY3Vyc2l2ZWx5IHRvIGhhbmRsZSBhbGwgbmVzdGVkIHN0cnVjdHVyZXNcblx0XHR0aGlzLl90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlUmVjdXJzaXZlbHkoYWN0dWFsRmlsdGVycywgZGF0ZVRpbWVPZmZzZXRQYXRocyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgZmlsdGVycyB0byBoYW5kbGUgYWxsIHBvc3NpYmxlIG5lc3RlZCBhRmlsdGVycyBzdHJ1Y3R1cmVzLlxuXHQgKiBAcGFyYW0gYUZpbHRlcnMgQXJyYXkgb2YgZmlsdGVyIG9iamVjdHMgdG8gdHJhbnNmb3JtXG5cdCAqIEBwYXJhbSBkYXRlVGltZU9mZnNldFBhdGhzIE1hcCBvZiBjb25kaXRpb24gcGF0aHMgdG8gdGhlaXIgcHJlY2lzaW9uIGxldmVsc1xuXHQgKi9cblx0X3RyYW5zZm9ybURhdGVUaW1lT2ZmU2V0RmlsdGVyVmFsdWVSZWN1cnNpdmVseTogZnVuY3Rpb24gKGFGaWx0ZXJzOiBGaWx0ZXJbXSwgZGF0ZVRpbWVPZmZzZXRQYXRoczogTWFwPHN0cmluZywgbnVtYmVyPik6IHZvaWQge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUZpbHRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGZpbHRlcjogRmlsdGVyID0gYUZpbHRlcnNbaV07XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoaXMgZmlsdGVyIGhhcyBuZXN0ZWQgYUZpbHRlcnMgKG11bHRpcGxlIGNvbmRpdGlvbnMgZm9yIHNhbWUgZmllbGQpXG5cdFx0XHRjb25zdCBmaWx0ZXJXaXRoTmVzdGVkRmlsdGVycyA9IGZpbHRlciBhcyBGaWx0ZXIgJiB7IGFGaWx0ZXJzPzogRmlsdGVyW107IGJBbmQ/OiBib29sZWFuIH07XG5cdFx0XHRpZiAoZmlsdGVyV2l0aE5lc3RlZEZpbHRlcnMuYUZpbHRlcnMgJiYgZmlsdGVyV2l0aE5lc3RlZEZpbHRlcnMuYUZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBSZWN1cnNpdmVseSB0cmFuc2Zvcm0gbmVzdGVkIGZpbHRlcnMgZm9yIGRlZXBlciBuZXN0aW5nIGxldmVsc1xuXHRcdFx0XHR0aGlzLl90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlUmVjdXJzaXZlbHkoZmlsdGVyV2l0aE5lc3RlZEZpbHRlcnMuYUZpbHRlcnMsIGRhdGVUaW1lT2Zmc2V0UGF0aHMpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZmlsdGVyUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZmlsdGVyLmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IGZpbHRlck9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciB8IHVuZGVmaW5lZCA9IGZpbHRlci5nZXRPcGVyYXRvcigpIGFzIEZpbHRlck9wZXJhdG9yIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZmlsdGVyVmFsdWUxOiB1bmtub3duID0gZmlsdGVyLmdldFZhbHVlMSgpO1xuXHRcdFx0Y29uc3QgZmlsdGVyVmFsdWUyOiB1bmtub3duID0gZmlsdGVyLmdldFZhbHVlMj8uKCk7XG5cblx0XHRcdC8vIEhhbmRsZSB1bmRlZmluZWQgZmlsdGVyT3BlcmF0b3IgZ3JhY2VmdWxseVxuXHRcdFx0aWYgKGZpbHRlck9wZXJhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XCJGaWx0ZXJVdGlscy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZzZXRGaWx0ZXJzOiBGaWx0ZXIgb3BlcmF0b3IgaXMgdW5kZWZpbmVkLCBza2lwcGluZyBmaWx0ZXIgdHJhbnNmb3JtYXRpb25cIixcblx0XHRcdFx0XHRgZmlsdGVyUGF0aDogJHtmaWx0ZXJQYXRofSwgZmlsdGVyVmFsdWUxOiAke2ZpbHRlclZhbHVlMX1gXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgZmlsdGVyIGFuZCBjb250aW51ZSB3aXRoIG5leHQgb25lXG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGZvciB0cmFuc2Zvcm1hdGlvbiBjb25kaXRpb25zOlxuXHRcdFx0Ly8gMS4gRVEgb3BlcmF0b3Igd2l0aCB2YWxpZCBmaXJzdCB2YWx1ZVxuXHRcdFx0Ly8gMi4gQW55IG9wZXJhdG9yIHdpdGggdHdvIHZhbHVlcyAoaXJyZXNwZWN0aXZlIG9mIG9wZXJhdG9yIHR5cGUpXG5cdFx0XHRjb25zdCBzaG91bGRUcmFuc2Zvcm06IGJvb2xlYW4gPVxuXHRcdFx0XHQoZmlsdGVyT3BlcmF0b3IgPT09IFwiRVFcIiAmJiBmaWx0ZXJWYWx1ZTEgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJWYWx1ZTEgIT09IG51bGwpIHx8XG5cdFx0XHRcdChmaWx0ZXJWYWx1ZTEgIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJWYWx1ZTEgIT09IG51bGwgJiYgZmlsdGVyVmFsdWUyICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUyICE9PSBudWxsKTtcblxuXHRcdFx0aWYgKHNob3VsZFRyYW5zZm9ybSkge1xuXHRcdFx0XHQvLyBGb3IgZGlyZWN0IHByb3BlcnRpZXMgLSBjaGVjayBpZiB0aGUgcGF0aCBtYXRjaGVzIGFueSBjb25kaXRpb24gcGF0aFxuXHRcdFx0XHRpZiAoZmlsdGVyUGF0aCAmJiBkYXRlVGltZU9mZnNldFBhdGhzLmhhcyhmaWx0ZXJQYXRoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHByZWNpc2lvbjogbnVtYmVyID0gZGF0ZVRpbWVPZmZzZXRQYXRocy5nZXQoZmlsdGVyUGF0aCkhO1xuXHRcdFx0XHRcdGNvbnN0IHRyYW5zZm9ybWVkRmlsdGVyOiBGaWx0ZXIgfCBudWxsID0gdGhpcy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZShmaWx0ZXIsIHByZWNpc2lvbik7XG5cdFx0XHRcdFx0aWYgKHRyYW5zZm9ybWVkRmlsdGVyKSB7XG5cdFx0XHRcdFx0XHRhRmlsdGVyc1tpXSA9IHRyYW5zZm9ybWVkRmlsdGVyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChmaWx0ZXJPcGVyYXRvciA9PT0gXCJBbnlcIikge1xuXHRcdFx0XHQvLyBIYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBmaWx0ZXJzXG5cdFx0XHRcdGNvbnN0IG5lc3RlZEZpbHRlciA9IGZpbHRlci5nZXRDb25kaXRpb24oKTtcblx0XHRcdFx0aWYgKCFuZXN0ZWRGaWx0ZXIpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBuZXN0ZWQgZmlsdGVyIGhhcyBtdWx0aXBsZSBjb25kaXRpb25zIChhRmlsdGVycyBhcnJheSlcblx0XHRcdFx0Y29uc3QgbmVzdGVkRmlsdGVyV2l0aE11bHRpcGxlQ29uZGl0aW9ucyA9IG5lc3RlZEZpbHRlciBhcyBGaWx0ZXIgJiB7IGFGaWx0ZXJzPzogRmlsdGVyW107IGJBbmQ/OiBib29sZWFuIH07XG5cdFx0XHRcdGlmIChuZXN0ZWRGaWx0ZXJXaXRoTXVsdGlwbGVDb25kaXRpb25zLmFGaWx0ZXJzICYmIG5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMuYUZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBjb25kaXRpb25zIHdpdGhpbiBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0bGV0IGhhc1RyYW5zZm9ybWF0aW9uID0gZmFsc2U7XG5cblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMuYUZpbHRlcnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YkZpbHRlcjogRmlsdGVyID0gbmVzdGVkRmlsdGVyV2l0aE11bHRpcGxlQ29uZGl0aW9ucy5hRmlsdGVyc1tqXTtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIGZ1cnRoZXIgbmVzdGluZyB3aXRoaW4gc3ViLWZpbHRlcnNcblx0XHRcdFx0XHRcdGNvbnN0IHN1YkZpbHRlcldpdGhOZXN0aW5nID0gc3ViRmlsdGVyIGFzIEZpbHRlciAmIHsgYUZpbHRlcnM/OiBGaWx0ZXJbXSB9O1xuXHRcdFx0XHRcdFx0aWYgKHN1YkZpbHRlcldpdGhOZXN0aW5nLmFGaWx0ZXJzICYmIHN1YkZpbHRlcldpdGhOZXN0aW5nLmFGaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVjdXJzaXZlbHkgaGFuZGxlIGRlZXBlciBuZXN0aW5nIGxldmVsc1xuXHRcdFx0XHRcdFx0XHR0aGlzLl90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlUmVjdXJzaXZlbHkoc3ViRmlsdGVyV2l0aE5lc3RpbmcuYUZpbHRlcnMsIGRhdGVUaW1lT2Zmc2V0UGF0aHMpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViRmlsdGVyUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gc3ViRmlsdGVyLmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YkZpbHRlck9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciB8IHVuZGVmaW5lZCA9IHN1YkZpbHRlci5nZXRPcGVyYXRvcigpIGFzIEZpbHRlck9wZXJhdG9yIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViRmlsdGVyVmFsdWUxOiB1bmtub3duID0gc3ViRmlsdGVyLmdldFZhbHVlMSgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViRmlsdGVyVmFsdWUyOiB1bmtub3duID0gc3ViRmlsdGVyLmdldFZhbHVlMj8uKCk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSB1bmRlZmluZWQgc3ViRmlsdGVyT3BlcmF0b3IgZ3JhY2VmdWxseVxuXHRcdFx0XHRcdFx0aWYgKHN1YkZpbHRlck9wZXJhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRcdFx0XCJGaWx0ZXJVdGlscy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZzZXRGaWx0ZXJzOiBGaWx0ZXIgb3BlcmF0b3IgaXMgdW5kZWZpbmVkLCBza2lwcGluZyBmaWx0ZXIgdHJhbnNmb3JtYXRpb25cIixcblx0XHRcdFx0XHRcdFx0XHRgZmlsdGVyUGF0aDogJHtzdWJGaWx0ZXJQYXRofSwgZmlsdGVyVmFsdWUxOiAke3N1YkZpbHRlclZhbHVlMX1gXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgc3ViLWZpbHRlclxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayBmb3IgdHJhbnNmb3JtYXRpb24gY29uZGl0aW9ucyBmb3Igc3ViLWZpbHRlcnNcblx0XHRcdFx0XHRcdGNvbnN0IHNob3VsZFRyYW5zZm9ybVN1YkZpbHRlcjogYm9vbGVhbiA9XG5cdFx0XHRcdFx0XHRcdChzdWJGaWx0ZXJPcGVyYXRvciA9PT0gXCJFUVwiICYmIHN1YkZpbHRlclZhbHVlMSAhPT0gdW5kZWZpbmVkICYmIHN1YkZpbHRlclZhbHVlMSAhPT0gbnVsbCkgfHxcblx0XHRcdFx0XHRcdFx0KHN1YkZpbHRlclZhbHVlMSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdFx0c3ViRmlsdGVyVmFsdWUxICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRcdFx0c3ViRmlsdGVyVmFsdWUyICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRzdWJGaWx0ZXJWYWx1ZTIgIT09IG51bGwpO1xuXG5cdFx0XHRcdFx0XHRpZiAoc2hvdWxkVHJhbnNmb3JtU3ViRmlsdGVyKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGFueSBjb25kaXRpb24gcGF0aCBtYXRjaGVzIHRoZSBuYXZpZ2F0aW9uIHBhdHRlcm5cblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF0Y2hpbmdDb25kaXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBBcnJheS5mcm9tKGRhdGVUaW1lT2Zmc2V0UGF0aHMua2V5cygpKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdFx0XHRcdFx0XHRzQ29uZGl0aW9uUGF0aDogc3RyaW5nXG5cdFx0XHRcdFx0XHRcdCk6IGJvb2xlYW4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEV4dHJhY3QgbmF2aWdhdGlvbiBhbmQgcHJvcGVydHkgcGFydHMgZnJvbSBjb25kaXRpb24gcGF0aFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhdGhQYXJ0czogc3RyaW5nW10gPSBzQ29uZGl0aW9uUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHBhdGhQYXJ0cy5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJ0OiBzdHJpbmcgPSBwYXRoUGFydHNbMF0ucmVwbGFjZShcIipcIiwgXCJcIik7IC8vIFwiX0l0ZW0qXCIgLT4gXCJfSXRlbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhcnQ6IHN0cmluZyA9IHBhdGhQYXJ0c1sxXTsgLy8gXCJCaWxsaW5nRG9jdW1lbnREYXRlXCJcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgZmlsdGVyIG5hdmlnYXRpb24gbWF0Y2hlcyBhbmQgc3ViIGZpbHRlciBlbmRzIHdpdGggcHJvcGVydHlcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmaWx0ZXJQYXRoID09PSBuYXZpZ2F0aW9uUGFydCAmJiBCb29sZWFuKHN1YkZpbHRlclBhdGg/LmVuZHNXaXRoKHByb3BlcnR5UGFydCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChtYXRjaGluZ0NvbmRpdGlvblBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcmVjaXNpb246IG51bWJlciA9IGRhdGVUaW1lT2Zmc2V0UGF0aHMuZ2V0KG1hdGNoaW5nQ29uZGl0aW9uUGF0aCkhO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRyYW5zZm9ybWVkU3ViRmlsdGVyOiBGaWx0ZXIgfCBudWxsID0gdGhpcy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZShzdWJGaWx0ZXIsIHByZWNpc2lvbik7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRyYW5zZm9ybWVkU3ViRmlsdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXN0ZWRGaWx0ZXJXaXRoTXVsdGlwbGVDb25kaXRpb25zLmFGaWx0ZXJzW2pdID0gdHJhbnNmb3JtZWRTdWJGaWx0ZXI7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNUcmFuc2Zvcm1hdGlvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWYgYW55IHRyYW5zZm9ybWF0aW9uIG9jY3VycmVkLCByZWNyZWF0ZSB0aGUgQW55IGZpbHRlciB3aXRoIHVwZGF0ZWQgbmVzdGVkIGNvbmRpdGlvbnNcblx0XHRcdFx0XHRpZiAoaGFzVHJhbnNmb3JtYXRpb24pIHtcblx0XHRcdFx0XHRcdGFGaWx0ZXJzW2ldID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IGZpbHRlclBhdGgsXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkFueVwiLFxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZTogZmlsdGVyLmdldFZhcmlhYmxlKCksXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbjogbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdFx0ZmlsdGVyczogbmVzdGVkRmlsdGVyV2l0aE11bHRpcGxlQ29uZGl0aW9ucy5hRmlsdGVycyxcblx0XHRcdFx0XHRcdFx0XHRhbmQ6IG5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMuYkFuZCA/PyB0cnVlXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNpbmdsZSBjb25kaXRpb24gd2l0aGluIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0XHRjb25zdCBuZXN0ZWRGaWx0ZXJQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBuZXN0ZWRGaWx0ZXIuZ2V0UGF0aCgpO1xuXHRcdFx0XHRcdGNvbnN0IG5lc3RlZEZpbHRlck9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciB8IHVuZGVmaW5lZCA9IG5lc3RlZEZpbHRlci5nZXRPcGVyYXRvcigpIGFzIEZpbHRlck9wZXJhdG9yIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGNvbnN0IG5lc3RlZEZpbHRlclZhbHVlMTogdW5rbm93biA9IG5lc3RlZEZpbHRlci5nZXRWYWx1ZTEoKTtcblx0XHRcdFx0XHRjb25zdCBuZXN0ZWRGaWx0ZXJWYWx1ZTI6IHVua25vd24gPSBuZXN0ZWRGaWx0ZXIuZ2V0VmFsdWUyPy4oKTtcblxuXHRcdFx0XHRcdC8vIEhhbmRsZSB1bmRlZmluZWQgbmVzdGVkRmlsdGVyT3BlcmF0b3IgZ3JhY2VmdWxseVxuXHRcdFx0XHRcdGlmIChuZXN0ZWRGaWx0ZXJPcGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcdFx0XCJGaWx0ZXJVdGlscy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZzZXRGaWx0ZXJzOiBGaWx0ZXIgb3BlcmF0b3IgaXMgdW5kZWZpbmVkLCBza2lwcGluZyBmaWx0ZXIgdHJhbnNmb3JtYXRpb25cIixcblx0XHRcdFx0XHRcdFx0YGZpbHRlclBhdGg6ICR7bmVzdGVkRmlsdGVyUGF0aH0sIGZpbHRlclZhbHVlMTogJHtuZXN0ZWRGaWx0ZXJWYWx1ZTF9YFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgbmVzdGVkIGZpbHRlclxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENoZWNrIGZvciB0cmFuc2Zvcm1hdGlvbiBjb25kaXRpb25zIGZvciBuZXN0ZWQgZmlsdGVyc1xuXHRcdFx0XHRcdGNvbnN0IHNob3VsZFRyYW5zZm9ybU5lc3RlZDogYm9vbGVhbiA9XG5cdFx0XHRcdFx0XHQobmVzdGVkRmlsdGVyT3BlcmF0b3IgPT09IFwiRVFcIiAmJiBuZXN0ZWRGaWx0ZXJWYWx1ZTEgIT09IHVuZGVmaW5lZCAmJiBuZXN0ZWRGaWx0ZXJWYWx1ZTEgIT09IG51bGwpIHx8XG5cdFx0XHRcdFx0XHQobmVzdGVkRmlsdGVyVmFsdWUxICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHRcdFx0bmVzdGVkRmlsdGVyVmFsdWUxICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRcdG5lc3RlZEZpbHRlclZhbHVlMiAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdG5lc3RlZEZpbHRlclZhbHVlMiAhPT0gbnVsbCk7XG5cblx0XHRcdFx0XHRpZiAoc2hvdWxkVHJhbnNmb3JtTmVzdGVkKSB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBhbnkgY29uZGl0aW9uIHBhdGggbWF0Y2hlcyB0aGUgbmF2aWdhdGlvbiBwYXR0ZXJuXG5cdFx0XHRcdFx0XHRjb25zdCBtYXRjaGluZ0NvbmRpdGlvblBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IEFycmF5LmZyb20oZGF0ZVRpbWVPZmZzZXRQYXRocy5rZXlzKCkpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0XHRcdFx0XHRzQ29uZGl0aW9uUGF0aDogc3RyaW5nXG5cdFx0XHRcdFx0XHQpOiBib29sZWFuIHtcblx0XHRcdFx0XHRcdFx0Ly8gRXh0cmFjdCBuYXZpZ2F0aW9uIGFuZCBwcm9wZXJ0eSBwYXJ0cyBmcm9tIGNvbmRpdGlvbiBwYXRoXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHBhdGhQYXJ0czogc3RyaW5nW10gPSBzQ29uZGl0aW9uUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXRoUGFydHMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhcnQ6IHN0cmluZyA9IHBhdGhQYXJ0c1swXS5yZXBsYWNlKFwiKlwiLCBcIlwiKTsgLy8gXCJfSXRlbSpcIiAtPiBcIl9JdGVtXCJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhcnQ6IHN0cmluZyA9IHBhdGhQYXJ0c1sxXTsgLy8gXCJSZXF1ZXN0ZWREZWxpdmVyeURhdGVcIlxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgZmlsdGVyIG5hdmlnYXRpb24gbWF0Y2hlcyBhbmQgbmVzdGVkIGZpbHRlciBlbmRzIHdpdGggcHJvcGVydHlcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmlsdGVyUGF0aCA9PT0gbmF2aWdhdGlvblBhcnQgJiYgQm9vbGVhbihuZXN0ZWRGaWx0ZXJQYXRoPy5lbmRzV2l0aChwcm9wZXJ0eVBhcnQpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0aWYgKG1hdGNoaW5nQ29uZGl0aW9uUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVjaXNpb246IG51bWJlciA9IGRhdGVUaW1lT2Zmc2V0UGF0aHMuZ2V0KG1hdGNoaW5nQ29uZGl0aW9uUGF0aCkhO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0cmFuc2Zvcm1lZE5lc3RlZEZpbHRlcjogRmlsdGVyIHwgbnVsbCA9IHRoaXMuX3RyYW5zZm9ybURhdGVUaW1lT2ZmU2V0RmlsdGVyVmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0bmVzdGVkRmlsdGVyLFxuXHRcdFx0XHRcdFx0XHRcdHByZWNpc2lvblxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAodHJhbnNmb3JtZWROZXN0ZWRGaWx0ZXIpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBDcmVhdGUgbmV3IEFueSBmaWx0ZXIgd2l0aCB0cmFuc2Zvcm1lZCBuZXN0ZWQgZmlsdGVyXG5cdFx0XHRcdFx0XHRcdFx0YUZpbHRlcnNbaV0gPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdGg6IGZpbHRlclBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogXCJBbnlcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhYmxlOiBmaWx0ZXIuZ2V0VmFyaWFibGUoKSxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbmRpdGlvbjogdHJhbnNmb3JtZWROZXN0ZWRGaWx0ZXJcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVHJhbnNmb3JtcyBhIHNpbmdsZSBmaWx0ZXIgdmFsdWUgZm9yIERhdGVUaW1lT2Zmc2V0IHByZWNpc2lvbiBwcm9wZXJ0aWVzLlxuXHQgKiBIYW5kbGVzIEVRIG9wZXJhdG9yIGJ5IGNvbnZlcnRpbmcgdG8gQlQgcmFuZ2UsIGFuZCBhZGp1c3RzIHNlY29uZCB2YWx1ZSBmb3IgYW55IGZpbHRlciB3aXRoIHR3byB2YWx1ZXMuXG5cdCAqIFByZWNpc2lvbiBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXM6IHByZWNpc2lvbiAzID0gLjk5OSwgcHJlY2lzaW9uIDcgPSAuOTk5OTk5OS5cblx0ICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIHRyYW5zZm9ybVxuXHQgKiBAcGFyYW0gcHJlY2lzaW9uIFRoZSBwcmVjaXNpb24gbGV2ZWwgZm9yIHRoZSBEYXRlVGltZU9mZnNldCBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBUcmFuc2Zvcm1lZCBmaWx0ZXIgd2l0aCBtaWNyb3NlY29uZCBwcmVjaXNpb24gb3IgbnVsbCBpZiBubyB0cmFuc2Zvcm1hdGlvbiBuZWVkZWRcblx0ICovXG5cdF90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlOiBmdW5jdGlvbiAoZmlsdGVyOiBGaWx0ZXIsIHByZWNpc2lvbjogbnVtYmVyKTogRmlsdGVyIHwgbnVsbCB7XG5cdFx0Y29uc3Qgb3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGZpbHRlci5nZXRPcGVyYXRvcigpO1xuXHRcdGNvbnN0IHZhbHVlMTogdW5rbm93biA9IGZpbHRlci5nZXRWYWx1ZTEoKTtcblx0XHRjb25zdCB2YWx1ZTI6IHVua25vd24gPSBmaWx0ZXIuZ2V0VmFsdWUyPy4oKTtcblxuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XCJGaWx0ZXJVdGlscy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZzZXRGaWx0ZXJzOiBGaWx0ZXIgb3BlcmF0b3IgaXMgdW5kZWZpbmVkLCBza2lwcGluZyBmaWx0ZXIgdHJhbnNmb3JtYXRpb25cIixcblx0XHRcdFx0YGZpbHRlclBhdGg6ICR7ZmlsdGVyLmdldFBhdGgoKX0sIGZpbHRlclZhbHVlMTogJHt2YWx1ZTF9YFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIE9ubHkgcHJvY2VzcyBmaWx0ZXJzIHdpdGggdmFsaWQgZmlyc3QgdmFsdWVcblx0XHRpZiAodmFsdWUxID09PSBudWxsIHx8IHZhbHVlMSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBvcmlnaW5hbFZhbHVlMTogc3RyaW5nID0gdmFsdWUxIGFzIHN0cmluZztcblxuXHRcdC8vIFBhcnNlIGRhdGV0aW1lOiAyMDI1LTA4LTEzVDE1OjE5OjE1LjAwMDAwMDArMDI6MDAgb3IgWlxuXHRcdGNvbnN0IGRhdGVUaW1lTWF0Y2gxOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IG9yaWdpbmFsVmFsdWUxLm1hdGNoKFxuXHRcdFx0L14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0pKD86XFwuKFxcZHswLDd9KSk/KFsrLV1cXGR7Mn06XFxkezJ9fFopJC9cblx0XHQpO1xuXG5cdFx0aWYgKCFkYXRlVGltZU1hdGNoMSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGF0ZVRpbWVQYXJ0MTogc3RyaW5nID0gZGF0ZVRpbWVNYXRjaDFbMV07XG5cdFx0Y29uc3QgdGltZXpvbmUxOiBzdHJpbmcgPSBkYXRlVGltZU1hdGNoMVszXTtcblxuXHRcdC8vIEdlbmVyYXRlIHByZWNpc2lvbi1iYXNlZCBkZWNpbWFsIHN1ZmZpeCAoZS5nLiwgLjk5OSBmb3IgcHJlY2lzaW9uIDMsIC45OTk5OTk5IGZvciBwcmVjaXNpb24gNylcblx0XHRjb25zdCBtYXhEZWNpbWFsVmFsdWU6IHN0cmluZyA9IFwiOVwiLnJlcGVhdChwcmVjaXNpb24pO1xuXG5cdFx0Ly8gSGFuZGxlIEVRIG9wZXJhdG9yIC0gY29udmVydCB0byBCVCB3aXRoIGZ1bGwgcHJlY2lzaW9uIHJhbmdlXG5cdFx0aWYgKG9wZXJhdG9yID09PSBcIkVRXCIpIHtcblx0XHRcdGNvbnN0IHN0YXJ0VmFsdWUgPSBgJHtkYXRlVGltZVBhcnQxfS4ke1wiMFwiLnJlcGVhdChwcmVjaXNpb24pfSR7dGltZXpvbmUxfWA7XG5cdFx0XHRjb25zdCBlbmRWYWx1ZSA9IGAke2RhdGVUaW1lUGFydDF9LiR7bWF4RGVjaW1hbFZhbHVlfSR7dGltZXpvbmUxfWA7XG5cblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogZmlsdGVyLmdldFBhdGgoKSxcblx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJULFxuXHRcdFx0XHR2YWx1ZTE6IHN0YXJ0VmFsdWUsXG5cdFx0XHRcdHZhbHVlMjogZW5kVmFsdWVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIEZvciBhbnkgb3BlcmF0b3Igd2l0aCB0d28gdmFsdWVzLCBhZGp1c3QgdGhlIHNlY29uZCB2YWx1ZSB0byBtYXggcHJlY2lzaW9uXG5cdFx0aWYgKHZhbHVlMiAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxWYWx1ZTI6IHN0cmluZyA9IHZhbHVlMiBhcyBzdHJpbmc7XG5cdFx0XHRjb25zdCBkYXRlVGltZU1hdGNoMjogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBvcmlnaW5hbFZhbHVlMi5tYXRjaChcblx0XHRcdFx0L14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0pKD86XFwuKFxcZHswLDd9KSk/KFsrLV1cXGR7Mn06XFxkezJ9fFopJC9cblx0XHRcdCk7XG5cblx0XHRcdGlmICghZGF0ZVRpbWVNYXRjaDIpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGVUaW1lUGFydDI6IHN0cmluZyA9IGRhdGVUaW1lTWF0Y2gyWzFdO1xuXHRcdFx0Y29uc3QgdGltZXpvbmUyOiBzdHJpbmcgPSBkYXRlVGltZU1hdGNoMlszXTtcblxuXHRcdFx0Ly8gS2VlcCBmaXJzdCB2YWx1ZSB1bmNoYW5nZWQsIG1vZGlmeSBzZWNvbmQgdmFsdWUgdG8gbWF4IHByZWNpc2lvblxuXHRcdFx0Y29uc3QgYWRqdXN0ZWRWYWx1ZTIgPSBgJHtkYXRlVGltZVBhcnQyfS4ke21heERlY2ltYWxWYWx1ZX0ke3RpbWV6b25lMn1gO1xuXG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IGZpbHRlci5nZXRQYXRoKCksXG5cdFx0XHRcdG9wZXJhdG9yOiBmaWx0ZXIuZ2V0T3BlcmF0b3IoKSxcblx0XHRcdFx0dmFsdWUxOiBvcmlnaW5hbFZhbHVlMSwgLy8gS2VlcCBvcmlnaW5hbCBmaXJzdCB2YWx1ZSB1bmNoYW5nZWRcblx0XHRcdFx0dmFsdWUyOiBhZGp1c3RlZFZhbHVlMiAvLyBUcmFuc2Zvcm0gc2Vjb25kIHZhbHVlIHRvIG1heCBwcmVjaXNpb25cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIE5vIHRyYW5zZm9ybWF0aW9uIG5lZWRlZCBmb3Igc2luZ2xlLXZhbHVlIG5vbi1FUSBvcGVyYXRvcnNcblx0XHRyZXR1cm4gbnVsbDtcblx0fSxcblx0aGFzRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHk6IGZ1bmN0aW9uIChmaWx0ZXJzOiBGaWx0ZXJbXSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmaWx0ZXJzLnNvbWUoKGZpbHRlcik6IGJvb2xlYW4gPT4ge1xuXHRcdFx0aWYgKGZpbHRlci5nZXRQYXRoKCkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChmaWx0ZXIuZ2V0RmlsdGVycygpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFzRWRpdFN0YXRlRmlsdGVyUmVjdXJzaXZlbHkoZmlsdGVyLmdldEZpbHRlcnMoKSEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXHRleGNoYW5nZUVkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5OiBmdW5jdGlvbiAoZWRpdFN0YXRlRmlsdGVyOiBGaWx0ZXIsIGZpbHRlcnM6IEZpbHRlcltdKTogRmlsdGVyW10ge1xuXHRcdHJldHVybiBmaWx0ZXJzLm1hcCgoZmlsdGVyKTogRmlsdGVyID0+IHtcblx0XHRcdGlmIChmaWx0ZXIuZ2V0UGF0aCgpID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4gZWRpdFN0YXRlRmlsdGVyO1xuXHRcdFx0fSBlbHNlIGlmIChmaWx0ZXIuZ2V0RmlsdGVycygpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0ZmlsdGVyczogdGhpcy5leGNoYW5nZUVkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5KGVkaXRTdGF0ZUZpbHRlciwgZmlsdGVyLmdldEZpbHRlcnMoKSEpLFxuXHRcdFx0XHRcdGFuZDogZmlsdGVyLmlzQW5kKClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmlsdGVyO1xuXHRcdH0pO1xuXHR9LFxuXHRzZXRUeXBlQ29uZmlnVG9Qcm9wZXJ0aWVzOiBmdW5jdGlvbiAoYVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb3BlcnR5SW5mb1tdIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFQcm9wZXJ0aWVzICYmIGFQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob0lGaWx0ZXJQcm9wZXJ0eTogUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgJiZcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcudHlwZUluc3RhbmNlICYmXG5cdFx0XHRcdFx0KG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZy50eXBlSW5zdGFuY2UgYXMgeyBnZXRDb25zdHJhaW50cz86IEZ1bmN0aW9uIH0pLmdldENvbnN0cmFpbnRzIGluc3RhbmNlb2YgRnVuY3Rpb25cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvSUZpbHRlclByb3BlcnR5LnBhdGggPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIsIHt9LCB7fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0lGaWx0ZXJQcm9wZXJ0eS5wYXRoID09PSBcIiRzZWFyY2hcIikge1xuXHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLCB7fSwge30pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9JRmlsdGVyUHJvcGVydHkuZGF0YVR5cGUgfHwgKG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZyAmJiBvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcuY2xhc3NOYW1lKSkge1xuXHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkuZGF0YVR5cGUgfHwgb0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnPy5jbGFzc05hbWUsXG5cdFx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LmNvbnN0cmFpbnRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcGVydGllcztcblx0fSxcblx0Z2V0Tm90QXBwbGljYWJsZUZpbHRlcnM6IGZ1bmN0aW9uIChvRmlsdGVyQmFyOiBGaWx0ZXJCYXIsIG9Db250cm9sOiBDb250cm9sKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHNUYXJnZXRFbnRpdHlUeXBlUGF0aCA9IG9Db250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0b0ZpbHRlckJhckVudGl0eVBhdGggPSBvRmlsdGVyQmFyLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9GaWx0ZXJCYXIuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkhLFxuXHRcdFx0b0ZpbHRlckJhckVudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qob0ZpbHRlckJhckVudGl0eVBhdGgpLFxuXHRcdFx0YU5vdEFwcGxpY2FibGUgPSBbXSxcblx0XHRcdG1Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCksXG5cdFx0XHRiSXNGaWx0ZXJCYXJFbnRpdHlUeXBlID0gc1RhcmdldEVudGl0eVR5cGVQYXRoID09PSBvRmlsdGVyQmFyRW50aXR5UGF0aCxcblx0XHRcdGJJc0NoYXJ0ID0gb0NvbnRyb2wuaXNBPENoYXJ0PihcInNhcC51aS5tZGMuQ2hhcnRcIiksXG5cdFx0XHRiSXNBbmFseXRpY2FsVGFibGUgPSAhYklzQ2hhcnQgJiYgKG9Db250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVBbmFseXRpY3MsXG5cdFx0XHRiSXNUcmVlVGFibGUgPSAhYklzQ2hhcnQgJiYgKG9Db250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIsXG5cdFx0XHRiRW5hYmxlU2VhcmNoID0gYklzQ2hhcnRcblx0XHRcdFx0PyAoQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvQ29udHJvbCwgXCJhcHBseVN1cHBvcnRlZFwiKSkgYXMgeyBlbmFibGVTZWFyY2g/OiBib29sZWFuIH0pXG5cdFx0XHRcdFx0XHQuZW5hYmxlU2VhcmNoXG5cdFx0XHRcdDogIShiSXNBbmFseXRpY2FsVGFibGUgfHwgYklzVHJlZVRhYmxlKSB8fCAob0NvbnRyb2wuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpLmVuYWJsZUJhc2ljU2VhcmNoO1xuXG5cdFx0aWYgKG1Db25kaXRpb25zICYmICghYklzRmlsdGVyQmFyRW50aXR5VHlwZSB8fCBiSXNBbmFseXRpY2FsVGFibGUgfHwgYklzQ2hhcnQgfHwgYklzVHJlZVRhYmxlKSkge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ugb24gcHJvcGVydHkgTGV2ZWwgaWYgZW50aXR5IHNldHMgYXJlIGlkZW50aWNhbFxuXHRcdFx0Y29uc3QgYVRhcmdldFByb3BlcnRpZXMgPSBiSXNGaWx0ZXJCYXJFbnRpdHlUeXBlXG5cdFx0XHRcdFx0PyBbXVxuXHRcdFx0XHRcdDogKG9GaWx0ZXJCYXJcblx0XHRcdFx0XHRcdFx0LmdldENvbnRyb2xEZWxlZ2F0ZSgpXG5cdFx0XHRcdFx0XHRcdC5mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoc1RhcmdldEVudGl0eVR5cGVQYXRoLCBvTWV0YU1vZGVsLCBvRmlsdGVyQmFyKSBhcyBQcm9wZXJ0eUluZm9bXSksXG5cdFx0XHRcdG1UYXJnZXRQcm9wZXJ0aWVzID0gYVRhcmdldFByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChtUHJvcDogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eUluZm8gfSwgb1Byb3A6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRcdG1Qcm9wW29Qcm9wLm5hbWVdID0gb1Byb3A7XG5cdFx0XHRcdFx0cmV0dXJuIG1Qcm9wO1xuXHRcdFx0XHR9LCB7fSksXG5cdFx0XHRcdG1BZ2dyZWdhdGVkUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdGNvbnN0IGNoYXJ0RW50aXR5VHlwZUFubm90YXRpb25zID0gb0NvbnRyb2xcblx0XHRcdFx0LmdldE1vZGVsKCkhXG5cdFx0XHRcdC5nZXRNZXRhTW9kZWwoKSFcblx0XHRcdFx0LmdldE9iamVjdChvQ29udHJvbC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikgKyBcIi9cIik7XG5cdFx0XHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRjb25zdCBvRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBvQ29udHJvbFxuXHRcdFx0XHRcdFx0LmdldE1vZGVsKCkhXG5cdFx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHRcdFx0XHQuZ2V0T2JqZWN0KGAke29Db250cm9sLmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKX1AYCksXG5cdFx0XHRcdFx0bUNoYXJ0Q3VzdG9tQWdncmVnYXRlcyA9IGdldEFsbEN1c3RvbUFnZ3JlZ2F0ZXMob0VudGl0eVNldEFubm90YXRpb25zKTtcblx0XHRcdFx0T2JqZWN0LmtleXMobUNoYXJ0Q3VzdG9tQWdncmVnYXRlcykuZm9yRWFjaChmdW5jdGlvbiAoc0FnZ3JlZ2F0ZU5hbWU6IHN0cmluZykge1xuXHRcdFx0XHRcdGlmICghbUFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzW3NBZ2dyZWdhdGVOYW1lXSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0FnZ3JlZ2F0ZSA9IG1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXNbc0FnZ3JlZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0bUFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzW3NBZ2dyZWdhdGVOYW1lXSA9IG9BZ2dyZWdhdGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBzUHJvcGVydHkgaW4gbUNvbmRpdGlvbnMpIHtcblx0XHRcdFx0Ly8gTmVlZCB0byBjaGVjayB0aGUgbGVuZ3RoIG9mIG1Db25kaXRpb25zW3NQcm9wZXJ0eV0gc2luY2UgcHJldmlvdXMgZmlsdGVyZWQgcHJvcGVydGllcyBhcmUga2VwdCBpbnRvIG1Db25kaXRpb25zIHdpdGggZW1wdHkgYXJyYXkgYXMgZGVmaW5pdGlvblxuXHRcdFx0XHRjb25zdCBhQ29uZGl0aW9uUHJvcGVydHkgPSBtQ29uZGl0aW9uc1tzUHJvcGVydHldO1xuXHRcdFx0XHRsZXQgdHlwZUNoZWNrID0gdHJ1ZTtcblx0XHRcdFx0aWYgKGNoYXJ0RW50aXR5VHlwZUFubm90YXRpb25zW3NQcm9wZXJ0eV0gJiYgb0ZpbHRlckJhckVudGl0eVNldEFubm90YXRpb25zW3NQcm9wZXJ0eV0pIHtcblx0XHRcdFx0XHR0eXBlQ2hlY2sgPSBjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9uc1tzUHJvcGVydHldW1wiJFR5cGVcIl0gPT09IG9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9uc1tzUHJvcGVydHldW1wiJFR5cGVcIl07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoYUNvbmRpdGlvblByb3BlcnR5KSAmJlxuXHRcdFx0XHRcdGFDb25kaXRpb25Qcm9wZXJ0eS5sZW5ndGggPiAwICYmIC8vaGFzIGEgZmlsdGVyIHZhbHVlXG5cdFx0XHRcdFx0KCgoIW1UYXJnZXRQcm9wZXJ0aWVzW3NQcm9wZXJ0eV0gfHwgLy8gbm8gdGFyZ2V0IHByb3BlcnR5IGZvdW5kIGJ5IHByb3BlcnR5IG5hbWVcblx0XHRcdFx0XHRcdChtVGFyZ2V0UHJvcGVydGllc1tzUHJvcGVydHldLmlzQ3VzdG9tRmlsdGVyICYmIG1UYXJnZXRQcm9wZXJ0aWVzW3NQcm9wZXJ0eV0uYW5ub3RhdGlvblBhdGggPT0gdW5kZWZpbmVkKSB8fCAvLyBjdXN0b20gZmlsdGVyIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgZW50aXR5U2V0XG5cdFx0XHRcdFx0XHQobVRhcmdldFByb3BlcnRpZXNbc1Byb3BlcnR5XSAmJiAhdHlwZUNoZWNrKSkgJiZcblx0XHRcdFx0XHRcdCghYklzRmlsdGVyQmFyRW50aXR5VHlwZSB8fCAoc1Byb3BlcnR5ID09PSBcIiRlZGl0U3RhdGVcIiAmJiAoYklzQ2hhcnQgfHwgYklzVHJlZVRhYmxlIHx8IGJJc0FuYWx5dGljYWxUYWJsZSkpKSkgfHwgLy90eXBlIGRvZXMgbm90IG1hdGNoIE9SICRlZGl0U3RhdGUgb24gc2Vjb25kYXJ5IGVudGl0eSBzZXRcblx0XHRcdFx0XHRcdG1BZ2dyZWdhdGVkUHJvcGVydGllc1tzUHJvcGVydHldKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKHNQcm9wZXJ0eS5yZXBsYWNlKC9bK3wqXS9nLCBcIlwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFiRW5hYmxlU2VhcmNoICYmIG9GaWx0ZXJCYXIuZ2V0U2VhcmNoKCkpIHtcblx0XHRcdGFOb3RBcHBsaWNhYmxlLnB1c2goXCIkc2VhcmNoXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYU5vdEFwcGxpY2FibGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24gb2YgYSBwcm9wZXJ0eSBhcyBkZWZpbmVkIGZvciBhIGdpdmVuIGZpbHRlciBiYXIuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdG8gZ2V0IHRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uIGZvclxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSB0byBnZXQgdGhlIHZhbHVlIGxpc3QgaW5mb3JtYXRpb24gZm9yXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uXG5cdCAqL1xuXHRhc3luYyBfZ2V0VmFsdWVMaXN0SW5mbyhmaWx0ZXJCYXI6IEZpbHRlckJhciwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFubm90YXRpb25WYWx1ZUxpc3RUeXBlIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gZmlsdGVyQmFyLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXG5cdFx0aWYgKCFtZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHZhbHVlTGlzdEluZm9zID0gYXdhaXQgbWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKGVudGl0eVR5cGUgKyBwcm9wZXJ0eU5hbWUsIHRydWUpLmNhdGNoKCgpID0+IG51bGwpO1xuXHRcdHJldHVybiB2YWx1ZUxpc3RJbmZvcz8uW1wiXCJdO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBsaXN0IG9mIGFsbCB0aGUgZmlsdGVyIHByb3BlcnRpZXMuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgSW5zdGFuY2Ugb2YgRmlsdGVyQmFyXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGZpbHRlciBwcm9wZXJ0aWVzIGZvciBGaWx0ZXJCYXJcblx0ICovXG5cdGdldEZpbHRlclByb3BlcnR5SW5mbyhmaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sKTogUHJvcGVydHlJbmZvW10ge1xuXHRcdGxldCBfcHJvcGVydHlJbmZvID0gZmlsdGVyQmFyLmRhdGEoXCJmZUZpbHRlckluZm9cIik7XG5cdFx0aWYgKHR5cGVvZiBfcHJvcGVydHlJbmZvID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRfcHJvcGVydHlJbmZvID0gSlNPTi5wYXJzZShfcHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdFx0cmV0dXJuIF9wcm9wZXJ0eUluZm8gfHwgW107XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHtAbGluayBDb25kaXRpb25WYWxpZGF0ZWR9IHN0YXRlIGZvciBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBkZWNpZGVzIHdoZXRoZXIgdGhlIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYSBzZWxlY3RlZCB2YWx1ZVxuXHQgKiBpbiBhIHZhbHVlIGhlbHAsIG1lYW5pbmcgdGhhdCBpdHMgZGVzY3JpcHRpb24gaXMgbG9hZGVkIGFuZCBkaXNwbGF5ZWQgaWYgZXhpc3RpbmcsIG9yIHdoZXRoZXIgaXQgaXMgZGlzcGxheWVkIGFzIGFcblx0ICogY29uZGl0aW9uIChlLmcuIFwiPTFcIikuXG5cdCAqXG5cdCAqIFZhbHVlcyBmb3IgcHJvcGVydGllcyB3aXRob3V0IHZhbHVlIGxpc3QgaW5mbyBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMge0BsaW5rIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWR9LlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBUaGUgdmFsdWUgbGlzdCBpbmZvIGZyb20gdGhlIHtAbGluayBNZXRhTW9kZWx9XG5cdCAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgc2luZ2xlIHZhbHVlIHRvIGdldCB0aGUgc3RhdGUgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQ29uZGl0aW9uVmFsaWRhdGVkfSBzdGF0ZSBmb3IgdGhlIHZhbHVlXG5cdCAqL1xuXHRfZ2V0Q29uZGl0aW9uVmFsaWRhdGVkOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dmFsdWVMaXN0SW5mbzogQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgfCB1bmRlZmluZWQsXG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IFByb21pc2U8Q29uZGl0aW9uVmFsaWRhdGVkPiB7XG5cdFx0aWYgKCF2YWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRyZXR1cm4gQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZDtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UHJvcGVydGllcyA9IHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycy5maWx0ZXIoKHBhcmFtZXRlcikgPT5cblx0XHRcdFx0W0NvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dC52YWx1ZU9mKCksIENvbW1vbkFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXQudmFsdWVPZigpXS5pbmNsdWRlcyhcblx0XHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGVcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdFx0XHQuZmlsdGVyKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gcHJvcGVydHlOYW1lKVxuXHRcdFx0XHQubWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSk7XG5cblx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5UGF0aCA9IHZhbHVlTGlzdFByb3BlcnRpZXNbMF0gPz8gcHJvcGVydHlOYW1lO1xuXG5cdFx0XHRjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDogdmFsdWVMaXN0UHJvcGVydHlQYXRoLFxuXHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdHZhbHVlMTogdmFsdWVcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVyLCB7XG5cdFx0XHRcdCRzZWxlY3Q6IHZhbHVlTGlzdFByb3BlcnR5UGF0aFxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHZhbHVlRXhpc3RzID0gKGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygpKS5sZW5ndGggPiAwO1xuXHRcdFx0aWYgKHZhbHVlRXhpc3RzKSB7XG5cdFx0XHRcdHJldHVybiBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkZpbHRlclV0aWxzOiBFcnJvciB3aGlsZSByZXRyaWV2aW5nIENvbmRpdGlvblZhbGlkYXRlZFwiLCBlcnJvciBhcyBFcnJvciB8IHN0cmluZyk7XG5cdFx0XHRyZXR1cm4gQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZDtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgZmlsdGVyIHZhbHVlIGZvciBhIHNwZWNpZmljIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGlzIGlzIGEgcHJlcmVxdWlzaXRlIGJlZm9yZSBuZXcgdmFsdWVzIGNhbiBiZSBzZXQgY2xlYW5seS5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBmaWx0ZXIgZmllbGRcblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICovXG5cdGFzeW5jIF9jbGVhckZpbHRlclZhbHVlKGZpbHRlckJhcjogRmlsdGVyQmFyLCBjb25kaXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKGZpbHRlckJhcik7XG5cdFx0aWYgKG9TdGF0ZS5maWx0ZXJbY29uZGl0aW9uUGF0aF0pIHtcblx0XHRcdG9TdGF0ZS5maWx0ZXJbY29uZGl0aW9uUGF0aF0uZm9yRWFjaCgob0NvbmRpdGlvbjogQ29uZGl0aW9uT2JqZWN0KSA9PiB7XG5cdFx0XHRcdG9Db25kaXRpb24uZmlsdGVyZWQgPSBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdFx0YXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIsIHsgZmlsdGVyOiB7IFtjb25kaXRpb25QYXRoXTogb1N0YXRlLmZpbHRlcltjb25kaXRpb25QYXRoXSB9IH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSBmaWx0ZXIgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqIFRoZSBmaWx0ZXIgdmFsdWVzIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHQgKiBFYWNoIGZpbHRlciB2YWx1ZSBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgcHJpbWl0aXZlIHZhbHVlLlxuXHQgKiBAcGFyYW0gb0ZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBmaWx0ZXIgZmllbGRcblx0ICogQHBhcmFtIHNDb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqIEBwYXJhbSBhcmdzIExpc3Qgb2Ygb3B0aW9uYWwgcGFyYW1ldGVyc1xuXHQgKiAgW3NPcGVyYXRvcl0gVGhlIG9wZXJhdG9yIHRvIGJlIHVzZWQgLSBpZiBub3Qgc2V0LCB0aGUgZGVmYXVsdCBvcGVyYXRvciAoRVEpIHdpbGwgYmUgdXNlZFxuXHQgKiAgW3ZWYWx1ZXNdIFRoZSB2YWx1ZXMgdG8gYmUgYXBwbGllZCAtIGlmIHNPcGVyYXRvciBpcyBtaXNzaW5nLCB2VmFsdWVzIGlzIHVzZWQgYXMgM3JkIHBhcmFtZXRlclxuXHQgKi9cblx0c2V0RmlsdGVyVmFsdWVzOiBhc3luYyBmdW5jdGlvbiAob0ZpbHRlckJhcjogRmlsdGVyQmFyIHwgdW5kZWZpbmVkLCBzQ29uZGl0aW9uUGF0aDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLl9zZXRGaWx0ZXJWYWx1ZXMob0ZpbHRlckJhciwgZmFsc2UsIHNDb25kaXRpb25QYXRoLCAuLi5hcmdzKTtcblx0fSxcblxuXHQvKipcblx0ICogQWRkIHRoZSBmaWx0ZXIgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqXG5cdCAqIFRoZSBmaWx0ZXIgdmFsdWVzIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVzLlxuXHQgKiBFYWNoIGZpbHRlciB2YWx1ZSBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgcHJpbWl0aXZlIHZhbHVlLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIGZpbHRlciBmaWVsZFxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gYXJncyBMaXN0IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnNcblx0ICovXG5cdGFkZEZpbHRlclZhbHVlczogYXN5bmMgZnVuY3Rpb24gKGZpbHRlckJhcjogRmlsdGVyQmFyIHwgdW5kZWZpbmVkLCBjb25kaXRpb25QYXRoOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuX3NldEZpbHRlclZhbHVlcyhmaWx0ZXJCYXIsIHRydWUsIGNvbmRpdGlvblBhdGgsIC4uLmFyZ3MpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgcHJvcGVydHkgcGF0aCBmcm9tIGNvbmRpdGlvbiBwYXRoLlxuXHQgKlxuXHQgKiBJdCByZW1vdmVzIHRoZSBjb25kaXRpb24gcGF0aCBzcGVjaWZpYyBjaGFyYWN0ZXJzIGxpa2UgXCIrXCIgYW5kIFwiKlwiLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgcGF0aCBkZXJpdmVkIGZyb20gdGhlIGNvbmRpdGlvbiBwYXRoXG5cdCAqL1xuXHRnZXRQcm9wZXJ0eVBhdGhGcm9tQ29uZGl0aW9uUGF0aChjb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBjb25kaXRpb25QYXRoLnJlcGxhY2UoQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCwgXCJcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBtYWluIGZpbHRlciBiYXIgZm9yIHRoZSBnaXZlbiBwMTNuIGFkYXB0YXRpb24gZmlsdGVyIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBwb3RlbnRpYWxGaWx0ZXJCYXIgRXhwZWN0ZWQgaW5zdGFuY2Ugb2YgRmlsdGVyQmFyIG9yIEFkYXB0YXRpb25GaWx0ZXJCYXIuXG5cdCAqIEByZXR1cm5zIFRoZSBtYWluIGZpbHRlciBiYXIgaW5zdGFuY2UgaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXRGaWx0ZXJCYXJGb3JBZGFwdGF0aW9uQ29udHJvbChwb3RlbnRpYWxGaWx0ZXJCYXI6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogRmlsdGVyQmFyIHwgbnVsbCB7XG5cdFx0d2hpbGUgKHBvdGVudGlhbEZpbHRlckJhciAmJiAhcG90ZW50aWFsRmlsdGVyQmFyLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdHBvdGVudGlhbEZpbHRlckJhciA9IHBvdGVudGlhbEZpbHRlckJhci5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHBvdGVudGlhbEZpbHRlckJhcjtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGZvciBhIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGggZm9yIGEgc3BlY2lmaWMgcHJvcGVydHkgaW4gdGhlIGZpbHRlciBiYXIuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGggZm9yIHRoZSBwcm9wZXJ0eVxuXHQgKi9cblx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGZpbHRlckJhcjogRmlsdGVyQmFyLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4oZmlsdGVyQmFyLCBcImVudGl0eVR5cGVcIik7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gZmlsdGVyQmFyLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdHJldHVybiBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5Pihcblx0XHRcdG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtlbnRpdHlUeXBlUGF0aH0ke3Byb3BlcnR5UGF0aH1gKSEsXG5cdFx0XHRtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7ZW50aXR5VHlwZVBhdGh9YCkhXG5cdFx0KTtcblx0fSxcblxuXHRfc2V0RmlsdGVyVmFsdWVzOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckJhcjogRmlsdGVyQmFyIHwgdW5kZWZpbmVkLFxuXHRcdGFwcGVuZDogYm9vbGVhbixcblx0XHRzQ29uZGl0aW9uUGF0aDogc3RyaW5nLFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgc09wZXJhdG9yID0gYXJncz8uWzBdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRsZXQgdlZhbHVlcyA9IGFyZ3M/LlsxXSBhcyB1bmRlZmluZWQgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCBudW1iZXJbXSB8IGJvb2xlYW5bXTtcblxuXHRcdC8vIERvIG5vdGhpbmcgd2hlbiB0aGUgZmlsdGVyIGJhciBpcyBoaWRkZW5cblx0XHRpZiAoIW9GaWx0ZXJCYXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBXZSB3YWl0IGZvciBmaWx0ZXIgYmFyIHRvIGJlIHJlYWR5LlxuXHRcdGlmIChvRmlsdGVyQmFyLmlzQTxGRUZpbHRlckJhcj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLkZpbHRlckJhclwiKSkge1xuXHRcdFx0Ly8gX3NldEZpbHRlclZhbHVlcyBjb3VsZCBiZSBjYWxsZWQgaW4gY2FzZSBvZiBhZGFwdGF0aW9uIGZpbHRlciBiYXIsIHNvIHdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIEZFIGZpbHRlciBiYXIgY29udHJvbC5cblx0XHRcdGF3YWl0IG9GaWx0ZXJCYXIud2hlbkluaXRpYWxpemVkKCk7XG5cdFx0fVxuXG5cdFx0Ly8gY29tbW9uIGZpbHRlciBPcGVyYXRvcnMgbmVlZCBhIHZhbHVlLiBEbyBub3RoaW5nIGlmIHRoaXMgdmFsdWUgaXMgdW5kZWZpbmVkXG5cdFx0Ly8gQkNQOiAyMjcwMTM1Mjc0XG5cdFx0aWYgKFxuXHRcdFx0YXJncy5sZW5ndGggPT09IDIgJiZcblx0XHRcdCh2VmFsdWVzID09PSB1bmRlZmluZWQgfHwgdlZhbHVlcyA9PT0gbnVsbCB8fCB2VmFsdWVzID09PSBcIlwiKSAmJlxuXHRcdFx0c09wZXJhdG9yICYmXG5cdFx0XHRPYmplY3Qua2V5cyhGaWx0ZXJPcGVyYXRvcikuaW5jbHVkZXMoc09wZXJhdG9yKVxuXHRcdCkge1xuXHRcdFx0TG9nLndhcm5pbmcoYEFuIGVtcHR5IGZpbHRlciB2YWx1ZSBjYW5ub3QgYmUgYXBwbGllZCB3aXRoIHRoZSAke3NPcGVyYXRvcn0gb3BlcmF0b3JgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUaGUgNHRoIHBhcmFtZXRlciBpcyBvcHRpb25hbDsgaWYgc09wZXJhdG9yIGlzIG1pc3NpbmcsIHZWYWx1ZXMgaXMgdXNlZCBhcyAzcmQgcGFyYW1ldGVyXG5cdFx0Ly8gVGhpcyBkb2VzIG5vdCBhcHBseSBmb3Igc2VtYW50aWMgZGF0ZXMsIGFzIHRoZXNlIGRvIG5vdCByZXF1aXJlIHZWYWx1ZXMgKGV4Y2VwdGlvbjogXCJMQVNUREFZU1wiLCAzKVxuXHRcdGlmICh2VmFsdWVzID09PSB1bmRlZmluZWQgJiYgIVNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCkuaW5jbHVkZXMoc09wZXJhdG9yIHx8IFwiXCIpKSB7XG5cdFx0XHR2VmFsdWVzID0gc09wZXJhdG9yID8/IFtdO1xuXHRcdFx0c09wZXJhdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIElmIHNPcGVyYXRvciBpcyBub3Qgc2V0LCB1c2UgRVEgYXMgZGVmYXVsdFxuXHRcdGlmICghc09wZXJhdG9yKSB7XG5cdFx0XHRzT3BlcmF0b3IgPSBGaWx0ZXJPcGVyYXRvci5FUTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0ZWQgYXJyYXkgdHlwZXM6XG5cdFx0Ly8gIC0gU2luZ2xlIFZhbHVlczpcdFwiMlwiIHwgW1wiMlwiXVxuXHRcdC8vICAtIE11bHRpcGxlIFZhbHVlczpcdFtcIjJcIiwgXCIzXCJdXG5cdFx0Ly8gIC0gUmFuZ2VzOlx0XHRcdFtcIjJcIixcIjNcIl1cblx0XHQvLyBVbnN1cHBvcnRlZCBhcnJheSB0eXBlczpcblx0XHQvLyAgLSBNdWx0aXBsZSBSYW5nZXM6XHRbW1wiMlwiLFwiM1wiXV0gfCBbW1wiMlwiLFwiM1wiXSxbXCI0XCIsXCI1XCJdXVxuXHRcdGNvbnN0IHN1cHBvcnRlZFZhbHVlVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCJdO1xuXHRcdGlmIChcblx0XHRcdHZWYWx1ZXMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0KCghQXJyYXkuaXNBcnJheSh2VmFsdWVzKSAmJiAhc3VwcG9ydGVkVmFsdWVUeXBlcy5pbmNsdWRlcyh0eXBlb2YgdlZhbHVlcykpIHx8XG5cdFx0XHRcdChBcnJheS5pc0FycmF5KHZWYWx1ZXMpICYmIHZWYWx1ZXMubGVuZ3RoID4gMCAmJiAhc3VwcG9ydGVkVmFsdWVUeXBlcy5pbmNsdWRlcyh0eXBlb2YgdlZhbHVlc1swXSkpKVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIkZpbHRlclV0aWxzLmpzI19zZXRGaWx0ZXJWYWx1ZXM6IEZpbHRlciB2YWx1ZSBub3Qgc3VwcG9ydGVkOyBvbmx5IHByaW1pdGl2ZSB2YWx1ZXMgb3IgYW4gYXJyYXkgdGhlcmVvZiBjYW4gYmUgdXNlZC5cIlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0bGV0IHZhbHVlczogKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKVtdIHwgdW5kZWZpbmVkO1xuXHRcdGlmICh2VmFsdWVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodlZhbHVlcykgPyB2VmFsdWVzIDogW3ZWYWx1ZXNdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBDb25kaXRpb25PYmplY3RbXSB9ID0ge307XG5cdFx0aWYgKHNDb25kaXRpb25QYXRoKSB7XG5cdFx0XHQvLyBXZSByZWNyZWF0ZSBjb25kaXRpb25QYXRoIHRvIGVuc3VyZSBpdCBpcyBpbiByaWdodCBmb3JtYXRcblx0XHRcdC8vIGUuZy4gSWYgXCJfSXRlbS9NYXRlcmlhbFwiIGlzIHNlbnQgYXMgY29uZGl0aW9uIHBhdGggd2hlcmUgX0l0ZW0gaXMgMTpuIG11bHRpcGxpY2l0eSAtPiBcIl9JdGVtKi9NYXRlcmlhbFwiXG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBvRmlsdGVyVXRpbHMuZ2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgoc0NvbmRpdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgbWFpbkZpbHRlckJhckNvbnRyb2wgPSBvRmlsdGVyVXRpbHMuZ2V0RmlsdGVyQmFyRm9yQWRhcHRhdGlvbkNvbnRyb2wob0ZpbHRlckJhcikgPz8gb0ZpbHRlckJhcjtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCA9IG9GaWx0ZXJVdGlscy5nZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkobWFpbkZpbHRlckJhckNvbnRyb2wsIHByb3BlcnR5UGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8ubmFtZSA/PyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRzQ29uZGl0aW9uUGF0aCA9XG5cdFx0XHRcdChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCwgZmFsc2UsIHRydWUpIDogdW5kZWZpbmVkKSA/P1xuXHRcdFx0XHRzQ29uZGl0aW9uUGF0aDtcblx0XHRcdC8vIEdldCB0aGUgdmFsdWUgbGlzdCBpbmZvIG9mIHRoZSBwcm9wZXJ0eSB0byBsYXRlciBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZXMgZXhpc3Rcblx0XHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBhd2FpdCB0aGlzLl9nZXRWYWx1ZUxpc3RJbmZvKG1haW5GaWx0ZXJCYXJDb250cm9sLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGlmIChzT3BlcmF0b3IgPT09IE9wZXJhdG9yTmFtZS5CVCB8fCBzT3BlcmF0b3IgPT09IE9wZXJhdG9yTmFtZS5OT1RCVCkge1xuXHRcdFx0XHRcdC8vIFRoZSBvcGVyYXRvciBCVCBhbmQgTk9UQlQgcmVxdWlyZSBvbmUgY29uZGl0aW9uIHdpdGggYm90aCB0aHJlc2hvbGRzXG5cdFx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IFtDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciwgdmFsdWVzLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkKV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gUmVndWxhciBzaW5nbGUgYW5kIG11bHRpIHZhbHVlIGNvbmRpdGlvbnMsIGlmIHRoZXJlIGFyZSBubyB2YWx1ZXMsIHdlIGRvIG5vdCB3YW50IGFueSBjb25kaXRpb25zXG5cdFx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0dmFsdWVzLm1hcChhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gRm9yIHRoZSBFUSBjYXNlLCB0ZWxsIE1EQyB0byB2YWxpZGF0ZSB0aGUgdmFsdWUgKGUuZy4gZGlzcGxheSB0aGUgZGVzY3JpcHRpb24pLCBpZiBpdCBleGlzdHMgaW4gdGhlIGFzc29jaWF0ZWQgZW50aXR5LCBvdGhlcndpc2UgbmV2ZXIgdmFsaWRhdGVcblx0XHRcdFx0XHRcdFx0Y29uc3QgY29uZGl0aW9uVmFsaWRhdGVkU3RhdHVzID1cblx0XHRcdFx0XHRcdFx0XHRzT3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkVRXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IGF3YWl0IHRoaXMuX2dldENvbmRpdGlvblZhbGlkYXRlZCh2YWx1ZUxpc3RJbmZvLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciEsIFt2YWx1ZV0sIG51bGwsIG51bGwsIGNvbmRpdGlvblZhbGlkYXRlZFN0YXR1cyk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKS5pbmNsdWRlcyhzT3BlcmF0b3IgfHwgXCJcIikpIHtcblx0XHRcdFx0Ly8gdlZhbHVlcyBpcyB1bmRlZmluZWQsIHNvIHRoZSBvcGVyYXRvciBpcyBhIHNlbWFudGljIGRhdGUgdGhhdCBkb2VzIG5vdCBuZWVkIHZhbHVlcyAoc2VlIGFib3ZlKVxuXHRcdFx0XHRmaWx0ZXJbc0NvbmRpdGlvblBhdGhdID0gW0NvbmRpdGlvbi5jcmVhdGVDb25kaXRpb24oc09wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghYXBwZW5kKSB7XG5cdFx0XHQvLyBDbGVhciB0aGUgY3VycmVudCB2YWx1ZSBhcyB3ZSBkbyBub3Qgd2FudCB0byBhZGQgZmlsdGVyIHZhbHVlcyBidXQgcmVwbGFjZSB0aGVtXG5cdFx0XHRhd2FpdCB0aGlzLl9jbGVhckZpbHRlclZhbHVlKG9GaWx0ZXJCYXIsIHNDb25kaXRpb25QYXRoKTtcblx0XHR9XG5cblx0XHRpZiAoZmlsdGVyW3NDb25kaXRpb25QYXRoXSkge1xuXHRcdFx0Ly8gVGhpcyBpcyBub3QgY2FsbGVkIGluIHRoZSByZXNldCBjYXNlLCBpLmUuIHNldEZpbHRlclZhbHVlKFwiUHJvcGVydHlcIilcblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0ZpbHRlckJhciwgeyBmaWx0ZXIgfSk7XG5cdFx0fVxuXHR9LFxuXHRjb25kaXRpb25Ub01vZGVsUGF0aDogZnVuY3Rpb24gKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdC8vIG1ha2UgdGhlIHBhdGggdXNhYmxlIGFzIG1vZGVsIHByb3BlcnR5LCB0aGVyZWZvcmUgc2xhc2hlcyBiZWNvbWUgYmFja3NsYXNoZXNcblx0XHRyZXR1cm4gc0NvbmRpdGlvblBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcblx0fSxcblx0X2dldEZpbHRlck1ldGFNb2RlbDogZnVuY3Rpb24gKG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCwgbWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIG1ldGFNb2RlbCB8fCAob0ZpbHRlckNvbnRyb2wuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHR9LFxuXHRfZ2V0RW50aXR5U2V0UGF0aDogZnVuY3Rpb24gKHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gc0VudGl0eVR5cGVQYXRoICYmIE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc0VudGl0eVR5cGVQYXRoKTtcblx0fSxcblxuXHRfZ2V0RmllbGRzRm9yVGFibGU6IGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aD86IHN0cmluZyk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0XHRjb25zdCBsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0XHQvKipcblx0XHQgKiBHZXRzIGZpZWxkcyBmcm9tXG5cdFx0ICogXHQtIGRpcmVjdCBlbnRpdHkgcHJvcGVydGllcyxcblx0XHQgKiBcdC0gbmF2aWdhdGVQcm9wZXJ0aWVzIGtleSBpbiB0aGUgbWFuaWZlc3QgaWYgdGhlc2UgcHJvcGVydGllcyBhcmUga25vd24gYnkgdGhlIGVudGl0eVxuXHRcdCAqICAtIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdCAqL1xuXHRcdGlmIChzRW50aXR5VHlwZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvRmlsdGVyQ29udHJvbCk7XG5cdFx0XHRjb25zdCB0YWJsZUNvbnRyb2xzID1cblx0XHRcdFx0b1ZpZXcgJiZcblx0XHRcdFx0b1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmXG5cdFx0XHRcdChvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLl9nZXRDb250cm9scyAmJlxuXHRcdFx0XHQob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKTtcblx0XHRcdGlmICh0YWJsZUNvbnRyb2xzKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0bHJUYWJsZXMucHVzaCgob1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxyVGFibGVzO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH0sXG5cdF9nZXRTZWxlY3Rpb25GaWVsZHM6IGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c0ZpbHRlckVudGl0eVR5cGVQYXRoOiBzdHJpbmcsXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdFx0b0NvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdFx0aW5jbHVkZUhpZGRlbj86IGJvb2xlYW4sXG5cdFx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllcixcblx0XHRsaW5lSXRlbVRlcm0/OiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcblx0KTogRmlsdGVyRmllbGRbXSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGRzID0gRmlsdGVyQmFyQ29udmVydGVyLmdldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bHJUYWJsZXMsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRsaW5lSXRlbVRlcm1cblx0XHQpO1xuXHRcdGxldCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBmaWx0ZXJGaWVsZHMuc2VsZWN0aW9uRmllbGRzO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3MgPSAob0ZpbHRlckNvbnRyb2wgYXMgUGFydGlhbDxJRmlsdGVyQ29udHJvbD4pLmRhdGFcblx0XHRcdD8gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eUluZm8ob0ZpbHRlckNvbnRyb2wpXG5cdFx0XHQ6IEpTT04ucGFyc2UoZmlsdGVyRmllbGRzLnNQcm9wZXJ0eUluZm8ucmVwbGFjZSgvXFxcXFxcey9nLCBcIntcIikucmVwbGFjZSgvXFxcXFxcfS9nLCBcIn1cIikpOyAvLyBwcm9wZXJ0eUluZm8gc3RyaW5nIGlzIHJldHVybmVkIGZyb20gdGhlIGdldFNlbGVjdGlvbkZpZWxkc1xuXHRcdGlmIChcblx0XHRcdChvTW9kaWZpZXJcblx0XHRcdFx0PyBvTW9kaWZpZXIuZ2V0Q29udHJvbFR5cGUob0ZpbHRlckNvbnRyb2wpID09PSBcInNhcC51aS5tZGMuRmlsdGVyQmFyXCJcblx0XHRcdFx0OiBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkgJiZcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCAhPT0gc0ZpbHRlckVudGl0eVR5cGVQYXRoXG5cdFx0KSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGFyZSBpbiBhIG11bHRpLWVudGl0eSBzZXQgc2NlbmFyaW8gc28gd2UgYWRkIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdFx0ICogZnJvbSBGaWx0ZXJCYXIgZW50aXR5IGlmIHRoZXNlIHByb3BlcnRpZXMgYXJlIGtub3duIGJ5IHRoZSBlbnRpdHlcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgb1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoKSEpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihzRmlsdGVyRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0Y29uc3QgYUZpbHRlckJhclNlbGVjdGlvbkZpZWxkc0Fubm90YXRpb246IFNlbGVjdGlvbkZpZWxkcyA9XG5cdFx0XHRcdG9QYWdlQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25GaWVsZHM+KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKS5hbm5vdGF0aW9uIHx8XG5cdFx0XHRcdChbXSBhcyB1bmtub3duIGFzIFNlbGVjdGlvbkZpZWxkcyk7XG5cdFx0XHRjb25zdCBtYXBTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRtYXBTZWxlY3Rpb25GaWVsZHNbb1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGhdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRzQW5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uOiBQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc1BhdGggPSBvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uLnZhbHVlO1xuXHRcdFx0XHRpZiAoIW1hcFNlbGVjdGlvbkZpZWxkc1tzUGF0aF0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHRzUGF0aCxcblx0XHRcdFx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKG9GaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0Y29uc3QgZmllbGROYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdGZpZWxkTmFtZXMucHVzaChvRmllbGQua2V5KTtcblx0XHRcdH0pO1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0gdGhpcy5fZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3MoZmllbGROYW1lcywgc2VsZWN0aW9uRmllbGRzLCBwcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyB0aGUgcHJvcGVydGllcyBmcm9tIHByb3BlcnR5SW5mb3MgZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZE5hbWVzIFRoZSBuYW1lcyBvZiBmaWVsZHMgcHJlc2VudCBpbiB0aGUgc2VsZWN0aW9uRmllbGQgYXJyYXkuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25GaWVsZHMgU2VsZWN0aW9uIGZpZWxkIGFycmF5IG9mIGFsbCB0aGUgcG9zc2libGUgZmllbGRzIHRoYXQgY2FuIGJlIGluIHRoZSBzZWxlY3Rpb24gZmllbGQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gUHJvcGVydHlJbmZvcyBmaWx0ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSBvciBwcmVzZW50IGluIHNlbGVjdGlvbiBmaWVsZCBhbm5vdGF0aW9uLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJGaWVsZCBhcnJheSBvZiBhbGwgdGhlIHBvc3NpYmxlIGZpbHRlciBmaWVsZHMgYWZ0ZXIgYWRkaW5nIHByb3BlcnRpZXMgZnJvbSBwcm9wZXJ0eUluZm9zXG5cdCAqL1xuXHRfZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3M6IGZ1bmN0aW9uIChcblx0XHRmaWVsZE5hbWVzOiBzdHJpbmdbXSxcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm9bXVxuXHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0XHRwcm9wZXJ0eUluZm8uZm9yRWFjaChmdW5jdGlvbiAob1Byb3A6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0aWYgKG9Qcm9wLm5hbWUgPT09IFwiJHNlYXJjaFwiIHx8IG9Qcm9wLm5hbWUgPT09IFwiJGVkaXRTdGF0ZVwiIHx8IG9Qcm9wLmtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbZmllbGROYW1lcy5pbmRleE9mKG9Qcm9wLmtleSldO1xuXHRcdFx0aWYgKGZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRvUHJvcC5ncm91cCA9IHNlbEZpZWxkLmdyb3VwO1xuXHRcdFx0XHRvUHJvcC5ncm91cExhYmVsID0gc2VsRmllbGQuZ3JvdXBMYWJlbDtcblx0XHRcdFx0b1Byb3Auc2V0dGluZ3MgPSBzZWxGaWVsZC5zZXR0aW5ncztcblx0XHRcdFx0b1Byb3AudmlzdWFsRmlsdGVyID0gc2VsRmllbGQudmlzdWFsRmlsdGVyO1xuXHRcdFx0XHRvUHJvcC5sYWJlbCA9IG9Qcm9wLmxhYmVsID8gb1Byb3AubGFiZWwgOiBzZWxGaWVsZC5sYWJlbDsgLy8gaWYgYSBsYWJlbCBpcyBjb21pbmcgZm9yIHRoZSBtYW5pZmVzdCB3ZSBuZWVkIHRvIHRha2UgdGhhdCBhcyBwcmlvcml0eS5cblx0XHRcdFx0b1Byb3AuYW5ub3RhdGlvblBhdGggPSBvUHJvcC5hbm5vdGF0aW9uUGF0aCA/PyBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzW2ZpZWxkTmFtZXMuaW5kZXhPZihvUHJvcC5rZXkpXSA9IG9Qcm9wIGFzIEZpbHRlckZpZWxkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiAhb1Byb3AuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2gob1Byb3AgYXMgRmlsdGVyRmllbGQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdH0sXG5cdF9nZXRTZWFyY2hGaWVsZDogZnVuY3Rpb24gKG9JRmlsdGVyOiBQYXJ0aWFsPElGaWx0ZXJDb250cm9sPiwgYUlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIG9JRmlsdGVyLmdldFNlYXJjaCAmJiAhYUlnbm9yZVByb3BlcnRpZXMuaW5jbHVkZXMoXCJzZWFyY2hcIikgPyBvSUZpbHRlci5nZXRTZWFyY2goKSA6IG51bGw7XG5cdH0sXG5cdF9nZXRGaWx0ZXJDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0bVByb3BlcnRpZXM6IHsgaWdub3JlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTsgcHJvcGVydGllc01ldGFkYXRhPzogUHJvcGVydHlJbmZvW107IHRhcmdldENvbnRyb2w/OiBDb250cm9sIH0gfCB1bmRlZmluZWQsXG5cdFx0bUZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IG1GaWx0ZXJDb25kaXRpb25zIHx8IG9JRmlsdGVyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQ29uZGl0aW9ucztcblx0fSxcblx0X2dldEZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogZnVuY3Rpb24gKFxuXHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgbnVsbCxcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUHJvcGVydHlJbmZvW10gfCBudWxsIHtcblx0XHRpZiAoIShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhICYmIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEubGVuZ3RoKSkge1xuXHRcdFx0aWYgKG9JRmlsdGVyLmdldFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdH0sXG5cdF9nZXRJZ25vcmVkUHJvcGVydGllczogZnVuY3Rpb24gKGZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogUHJvcGVydHlJbmZvW10sIGVudGl0eVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0ZmlsdGVyUHJvcGVydGllc01ldGFkYXRhLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlclByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eU5hbWUgPSBmaWx0ZXJQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZW50aXR5UHJvcGVydGllc0N1cnJlbnQgPSBlbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5Lm5hbWUgPT09IGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eVByb3BlcnRpZXNDdXJyZW50ICYmXG5cdFx0XHRcdCgoIWZpbHRlclByb3BlcnR5LmlzQ3VzdG9tRmlsdGVyICYmIGZpbHRlclByb3BlcnR5LmRhdGFUeXBlICE9PSBlbnRpdHlQcm9wZXJ0aWVzQ3VycmVudC5kYXRhVHlwZSkgfHxcblx0XHRcdFx0XHQvLyBjdXN0b20gZmlsdGVycyB3aWxsIGhhdmUgYW4gYW5ub3RhdGlvbiBwYXRoIGFwcGxpZWQgaW4gdGhlIGNvbnZlcnRlciB3aGVuIHRoZXJlIGlzIGEgbWF0Y2hpbmcgcHJvcGVydHkgZm91bmRcblx0XHRcdFx0XHQoZmlsdGVyUHJvcGVydHkuaXNDdXN0b21GaWx0ZXIgJiYgZW50aXR5UHJvcGVydGllc0N1cnJlbnQuYW5ub3RhdGlvblBhdGggPT09IHVuZGVmaW5lZCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aWdub3JlUHJvcGVydGllcy5wdXNoKGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlnbm9yZVByb3BlcnRpZXM7XG5cdH0sXG5cdGdldEZpbHRlcnM6IGZ1bmN0aW9uIChmaWx0ZXJCYXI/OiBJRmlsdGVyQ29udHJvbCk6IEludGVybmFsQmluZGluZ0luZm8gfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmlsdGVyQmFyIHx8IHR5cGVvZiBmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCAhPT0gXCJmdW5jdGlvblwiIHx8ICFmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSB0aGlzLmdldEZpbHRlckluZm8oZmlsdGVyQmFyKTtcblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fSxcblx0LyoqXG5cdCAqIFByZXBhcmVzIHByb3BlcnR5SW5mbyBmb3Igc2hhcmluZyBpdCBvdXRzaWRlIEZFLCByZW1vdmVzIHVud2FudGVkIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb3IgU3RyaW5nIChmb3IgRmlsdGVyQmFyIHRlbXBsYXRpbmcpIG9mIFByb3BlcnR5SW5mb3MgYWZ0ZXIgcmVtb3ZpbmcgdGhlIHVud2FudGVkIHByb3BlcnRpZXNcblx0ICovXG5cdGZvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdIHwgc3RyaW5nKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB8IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eUluZm9zID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRsZXQgcHJvcEluZm8gPSBwcm9wZXJ0eUluZm9zLnJlcGxhY2UoL1xcXFxcXHsvZywgXCJ7XCIpO1xuXHRcdFx0cHJvcEluZm8gPSBwcm9wSW5mby5yZXBsYWNlKC9cXFxcXFx9L2csIFwifVwiKTtcblx0XHRcdGxldCBwcm9wSW5mb3MgPSBKU09OLnBhcnNlKHByb3BJbmZvKTtcblx0XHRcdHByb3BJbmZvcyA9IHRoaXMuX2Zvcm1hdFByb3BlcnR5SW5mbyhwcm9wSW5mb3MpO1xuXHRcdFx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BJbmZvcyk7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZm9ybWF0UHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFJlbW92ZXMgdW53YW50ZWQgcHJvcGVydHkgZnJvbSBQcm9wZXJ0eUluZm9zLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb2YgUHJvcGVydHlJbmZvcyBhZnRlciByZW1vdmluZyB0aGUgdW53YW50ZWQgcHJvcGVydGllc1xuXHQgKi9cblx0X2Zvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mb3MubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgX3Byb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvRXh0ZXJuYWwgPSB7XG5cdFx0XHRcdGtleTogcHJvcGVydHkua2V5IHx8IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGRhdGFUeXBlOiBcIlwiLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIFByb3BlcnR5SW5mb0tleXMpIHtcblx0XHRcdFx0aWYgKHByb3BlcnR5Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcImhpZGRlbkZpbHRlclwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmhpZGRlbkZpbHRlciA9IHByb3BlcnR5LmhpZGRlbkZpbHRlcjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwicmVxdWlyZWRcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5yZXF1aXJlZCA9IHByb3BlcnR5LnJlcXVpcmVkO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ucGF0aCA9IHByb3BlcnR5LnBhdGg7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcInRvb2x0aXBcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby50b29sdGlwID0gcHJvcGVydHkudG9vbHRpcDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwidmlzaWJsZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLnZpc2libGUgPSBwcm9wZXJ0eS52aXNpYmxlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtYXhDb25kaXRpb25zXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IHByb3BlcnR5Lm1heENvbmRpdGlvbnM7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImZvcm1hdE9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5mb3JtYXRPcHRpb25zID0gcHJvcGVydHkuZm9ybWF0T3B0aW9ucztcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY29uc3RyYWludHNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IHByb3BlcnR5LmNvbnN0cmFpbnRzO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJncm91cFwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmdyb3VwID0gcHJvcGVydHkuZ3JvdXA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImdyb3VwTGFiZWxcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5ncm91cExhYmVsID0gcHJvcGVydHkuZ3JvdXBMYWJlbDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY2FzZVNlbnNpdGl2ZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBwcm9wZXJ0eS5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmRhdGFUeXBlKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8uZGF0YVR5cGUgPSBwcm9wZXJ0eS5kYXRhVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydHkgZGF0YVR5cGUgZm9yIGZpbHRlci1iYXIgZmlsdGVyIGZpZWxkOiAke3Byb3BlcnR5fWApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8ubGFiZWwgPSBwcm9wZXJ0eS5sYWJlbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfcHJvcGVydHlJbmZvO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5l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
1118
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9wZXJ0eUluZm9LZXlzIiwiQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCIsIm9GaWx0ZXJVdGlscyIsImdldEZpbHRlciIsInZJRmlsdGVyIiwiYUZpbHRlcnMiLCJnZXRGaWx0ZXJJbmZvIiwiZmlsdGVycyIsImxlbmd0aCIsIkZpbHRlciIsInVuZGVmaW5lZCIsImdldEZpbHRlckZpZWxkIiwicHJvcGVydHlQYXRoIiwiY29udmVydGVyQ29udGV4dCIsImVudGl0eVR5cGUiLCJGaWx0ZXJCYXJDb252ZXJ0ZXIiLCJidWlsZFByb3BlcnlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJvUHJvcGVydHlJbmZvIiwiYVR5cGVDb25maWciLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJhbm5vdGF0aW9uUGF0aCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldE9iamVjdCIsIm9UeXBlQ29uZmlnIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZmV0Y2hQcm9wZXJ0eUluZm8iLCJrZXkiLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsIm9GaWx0ZXJDb250cm9sIiwic0VudGl0eVR5cGVQYXRoIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50Iiwic0ZpbHRlckVudGl0eVR5cGVQYXRoIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImNvbnRleHRQYXRoIiwib1ZpZXciLCJpc0EiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtYW5pZmVzdFNldHRpbmdzIiwiZ2V0Vmlld0RhdGEiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImNvbnRleHRMb2NhdGlvbiIsIk1hbmlmZXN0V3JhcHBlciIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImluY2x1ZGVIaWRkZW4iLCJvTW9kaWZpZXIiLCJsaW5lSXRlbVRlcm0iLCJwcm9wZXJ0eUluZm9zRnJvbUZpbHRlckJhciIsIl9nZXRGaWx0ZXJNZXRhTW9kZWwiLCJsclRhYmxlcyIsIl9nZXRGaWVsZHNGb3JUYWJsZSIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiX2dldFNlbGVjdGlvbkZpZWxkcyIsImdldEJpbmRpbmdQYXRoRm9yUGFyYW1ldGVycyIsIm9JRmlsdGVyIiwibUNvbmRpdGlvbnMiLCJhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhIiwiYVBhcmFtZXRlcnMiLCJhUGFyYW1zIiwic2V0VHlwZUNvbmZpZ1RvUHJvcGVydGllcyIsInNGaWVsZFBhdGgiLCJvQ29uZGl0aW9uSW50ZXJuYWwiLCJvUHJvcGVydHkiLCJGaWx0ZXJVdGlsIiwiZ2V0UHJvcGVydHlCeUtleSIsInR5cGVDb25maWciLCJUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwibUludGVybmFsUGFyYW1ldGVyQ29uZGl0aW9uIiwiQ29uZGl0aW9uQ29udmVydGVyIiwidG9UeXBlIiwiZ2V0VHlwZU1hcCIsInNFZG1UeXBlIiwiT0RBVEFfVFlQRV9NQVBQSU5HIiwiY2xhc3NOYW1lIiwicHVzaCIsImVuY29kZVVSSUNvbXBvbmVudCIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwidmFsdWVzIiwiZGF0YSIsInNFbnRpdHlTZXRQYXRoIiwic3Vic3RyaW5nIiwic1BhcmFtZXRlckVudGl0eVNldCIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJzVGFyZ2V0TmF2aWdhdGlvbiIsInRvU3RyaW5nIiwiZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQiLCJiSXNIaWRlRHJhZnQiLCIkZWRpdFN0YXRlIiwib0NvbmRpdGlvbiIsImZpbmQiLCJjb25kaXRpb24iLCJvcGVyYXRvciIsImluY2x1ZGVzIiwibVByb3BlcnRpZXMiLCJtRmlsdGVyQ29uZGl0aW9ucyIsImFJZ25vcmVQcm9wZXJ0aWVzIiwiaWdub3JlZFByb3BlcnRpZXMiLCJvVGFyZ2V0Q29udHJvbCIsInRhcmdldENvbnRyb2wiLCJzVGFyZ2V0RW50aXR5UGF0aCIsIm1QYXJhbWV0ZXJzIiwic1NlYXJjaCIsInNCaW5kaW5nUGF0aCIsImFQcm9wZXJ0aWVzTWV0YWRhdGEiLCJwcm9wZXJ0aWVzTWV0YWRhdGEiLCJFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJfZ2V0U2VhcmNoRmllbGQiLCJfZ2V0RmlsdGVyQ29uZGl0aW9ucyIsImdldEZpbHRlclByb3BlcnR5SW5mbyIsImdldFByb3BlcnR5SW5mb1NldCIsIl9nZXRGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInNLZXkiLCJKU09OIiwicGFyc2UiLCJwYXJhbSIsInJlcXVpcmVkUGFyYW0iLCJtUGFyYW1ldGVyc1ZhbHVlIiwiYVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YSIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImZldGNoUHJvcGVydGllc0ZvckVudGl0eSIsIl9hSWdub3JlUHJvcGVydGllcyIsIl9nZXRJZ25vcmVkUHJvcGVydGllcyIsImNvbmNhdCIsImdldEVkaXRTdGF0ZUFuZEZpbHRlciIsInBhcmFtZXRlcnMiLCJzZWFyY2giLCJiaW5kaW5nUGF0aCIsIl9yZWYiLCJvRmlsdGVyIiwiaGFzRWRpdFN0YXRlTWV0YWRhdGEiLCJmaWx0ZXIiLCJwcm9wZXJ0eSIsImVkaXRTdGF0ZUZpbHRlciIsImhhc093blByb3BlcnR5IiwiZWRpdFN0YXRlVmFsdWUiLCJFRElUU1RBVEUiLCJnZXRGaWx0ZXJGb3JFZGl0U3RhdGUiLCJ2aWV3IiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImdldFByb3BlcnR5IiwiX3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVycyIsImhhc0VkaXRTdGF0ZUZpbHRlciIsImhhc0VkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5IiwiZXhjaGFuZ2VFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseSIsImFuZCIsIm9GaWx0ZXJCYXIiLCJBcnJheSIsImlzQXJyYXkiLCJhY3R1YWxGaWx0ZXJzIiwiZmlyc3RGaWx0ZXIiLCJvUHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eUhlbHBlciIsImRhdGVUaW1lT2Zmc2V0UGF0aHMiLCJNYXAiLCJzQ29uZGl0aW9uUGF0aCIsInByb3BlcnR5SW5mbyIsImlzRGF0ZVRpbWVPZmZzZXQiLCJ0eXBlSW5zdGFuY2UiLCJnZXROYW1lIiwicHJlY2lzaW9uIiwic2V0IiwiX3RyYW5zZm9ybURhdGVUaW1lT2ZmU2V0RmlsdGVyVmFsdWVSZWN1cnNpdmVseSIsImkiLCJmaWx0ZXJXaXRoTmVzdGVkRmlsdGVycyIsImZpbHRlclBhdGgiLCJnZXRQYXRoIiwiZmlsdGVyT3BlcmF0b3IiLCJnZXRPcGVyYXRvciIsImZpbHRlclZhbHVlMSIsImdldFZhbHVlMSIsImZpbHRlclZhbHVlMiIsImdldFZhbHVlMiIsIkxvZyIsIndhcm5pbmciLCJzaG91bGRUcmFuc2Zvcm0iLCJoYXMiLCJnZXQiLCJ0cmFuc2Zvcm1lZEZpbHRlciIsIl90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlIiwibmVzdGVkRmlsdGVyIiwiZ2V0Q29uZGl0aW9uIiwibmVzdGVkRmlsdGVyV2l0aE11bHRpcGxlQ29uZGl0aW9ucyIsImhhc1RyYW5zZm9ybWF0aW9uIiwiaiIsInN1YkZpbHRlciIsInN1YkZpbHRlcldpdGhOZXN0aW5nIiwic3ViRmlsdGVyUGF0aCIsInN1YkZpbHRlck9wZXJhdG9yIiwic3ViRmlsdGVyVmFsdWUxIiwic3ViRmlsdGVyVmFsdWUyIiwic2hvdWxkVHJhbnNmb3JtU3ViRmlsdGVyIiwibWF0Y2hpbmdDb25kaXRpb25QYXRoIiwiZnJvbSIsInBhdGhQYXJ0cyIsInNwbGl0IiwibmF2aWdhdGlvblBhcnQiLCJyZXBsYWNlIiwicHJvcGVydHlQYXJ0IiwiQm9vbGVhbiIsImVuZHNXaXRoIiwidHJhbnNmb3JtZWRTdWJGaWx0ZXIiLCJwYXRoIiwidmFyaWFibGUiLCJnZXRWYXJpYWJsZSIsImJBbmQiLCJuZXN0ZWRGaWx0ZXJQYXRoIiwibmVzdGVkRmlsdGVyT3BlcmF0b3IiLCJuZXN0ZWRGaWx0ZXJWYWx1ZTEiLCJuZXN0ZWRGaWx0ZXJWYWx1ZTIiLCJzaG91bGRUcmFuc2Zvcm1OZXN0ZWQiLCJ0cmFuc2Zvcm1lZE5lc3RlZEZpbHRlciIsInZhbHVlMSIsInZhbHVlMiIsIm9yaWdpbmFsVmFsdWUxIiwiZGF0ZVRpbWVNYXRjaDEiLCJtYXRjaCIsImRhdGVUaW1lUGFydDEiLCJ0aW1lem9uZTEiLCJtYXhEZWNpbWFsVmFsdWUiLCJyZXBlYXQiLCJzdGFydFZhbHVlIiwiZW5kVmFsdWUiLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwib3JpZ2luYWxWYWx1ZTIiLCJkYXRlVGltZU1hdGNoMiIsImRhdGVUaW1lUGFydDIiLCJ0aW1lem9uZTIiLCJhZGp1c3RlZFZhbHVlMiIsInNvbWUiLCJnZXRGaWx0ZXJzIiwibWFwIiwiaXNBbmQiLCJhUHJvcGVydGllcyIsIm9JRmlsdGVyUHJvcGVydHkiLCJnZXRDb25zdHJhaW50cyIsIkZ1bmN0aW9uIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJvQ29udHJvbCIsInNUYXJnZXRFbnRpdHlUeXBlUGF0aCIsIm9GaWx0ZXJCYXJFbnRpdHlQYXRoIiwib0ZpbHRlckJhckVudGl0eVNldEFubm90YXRpb25zIiwiZ2V0T2JqZWN0IiwiYU5vdEFwcGxpY2FibGUiLCJnZXRDb25kaXRpb25zIiwiYklzRmlsdGVyQmFyRW50aXR5VHlwZSIsImJJc0NoYXJ0IiwiYklzQW5hbHl0aWNhbFRhYmxlIiwiZ2V0UGFyZW50IiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiZW5hYmxlQW5hbHl0aWNzIiwiYklzVHJlZVRhYmxlIiwiY29udHJvbCIsInR5cGUiLCJiRW5hYmxlU2VhcmNoIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwiZW5hYmxlU2VhcmNoIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJhVGFyZ2V0UHJvcGVydGllcyIsIm1UYXJnZXRQcm9wZXJ0aWVzIiwicmVkdWNlIiwibVByb3AiLCJvUHJvcCIsIm1BZ2dyZWdhdGVkUHJvcGVydGllcyIsImNoYXJ0RW50aXR5VHlwZUFubm90YXRpb25zIiwib0VudGl0eVNldEFubm90YXRpb25zIiwibUNoYXJ0Q3VzdG9tQWdncmVnYXRlcyIsImdldEFsbEN1c3RvbUFnZ3JlZ2F0ZXMiLCJzQWdncmVnYXRlTmFtZSIsIm9BZ2dyZWdhdGUiLCJzUHJvcGVydHkiLCJhQ29uZGl0aW9uUHJvcGVydHkiLCJ0eXBlQ2hlY2siLCJpc0N1c3RvbUZpbHRlciIsImdldFNlYXJjaCIsIl9nZXRWYWx1ZUxpc3RJbmZvIiwiZmlsdGVyQmFyIiwicHJvcGVydHlOYW1lIiwidmFsdWVMaXN0SW5mb3MiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsImNhdGNoIiwiX3Byb3BlcnR5SW5mbyIsIl9nZXRDb25kaXRpb25WYWxpZGF0ZWQiLCJ2YWx1ZUxpc3RJbmZvIiwidmFsdWUiLCJDb25kaXRpb25WYWxpZGF0ZWQiLCJOb3RWYWxpZGF0ZWQiLCJ2YWx1ZUxpc3RQcm9wZXJ0aWVzIiwiUGFyYW1ldGVycyIsInBhcmFtZXRlciIsInZhbHVlT2YiLCIkVHlwZSIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHlQYXRoIiwiRVEiLCJsaXN0QmluZGluZyIsIiRtb2RlbCIsImJpbmRMaXN0IiwiQ29sbGVjdGlvblBhdGgiLCIkc2VsZWN0IiwidmFsdWVFeGlzdHMiLCJyZXF1ZXN0Q29udGV4dHMiLCJWYWxpZGF0ZWQiLCJlcnJvciIsIl9jbGVhckZpbHRlclZhbHVlIiwiY29uZGl0aW9uUGF0aCIsIm9TdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsImZpbHRlcmVkIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwic2V0RmlsdGVyVmFsdWVzIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiX3NldEZpbHRlclZhbHVlcyIsImFkZEZpbHRlclZhbHVlcyIsIl9sZW4yIiwiX2tleTIiLCJnZXRQcm9wZXJ0eVBhdGhGcm9tQ29uZGl0aW9uUGF0aCIsImdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sIiwicG90ZW50aWFsRmlsdGVyQmFyIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiZW50aXR5VHlwZVBhdGgiLCJhcHBlbmQiLCJfbGVuMyIsIl9rZXkzIiwic09wZXJhdG9yIiwidlZhbHVlcyIsIndoZW5Jbml0aWFsaXplZCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJzdXBwb3J0ZWRWYWx1ZVR5cGVzIiwiRXJyb3IiLCJtYWluRmlsdGVyQmFyQ29udHJvbCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0UGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJPcGVyYXRvck5hbWUiLCJOT1RCVCIsIkNvbmRpdGlvbiIsImNyZWF0ZUNvbmRpdGlvbiIsIlByb21pc2UiLCJhbGwiLCJjb25kaXRpb25WYWxpZGF0ZWRTdGF0dXMiLCJjb25kaXRpb25Ub01vZGVsUGF0aCIsIl9nZXRFbnRpdHlTZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwidGFibGVDb250cm9scyIsImdldENvbnRyb2xsZXIiLCJfZ2V0Q29udHJvbHMiLCJvVGFibGUiLCJmaWx0ZXJGaWVsZHMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9zIiwic1Byb3BlcnR5SW5mbyIsImdldENvbnRyb2xUeXBlIiwib1BhZ2VDb250ZXh0IiwiYUZpbHRlckJhclNlbGVjdGlvbkZpZWxkc0Fubm90YXRpb24iLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJtYXBTZWxlY3Rpb25GaWVsZHMiLCJvU2VsZWN0aW9uRmllbGQiLCJvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uIiwic1BhdGgiLCJvRmlsdGVyRmllbGQiLCJmaWVsZE5hbWVzIiwib0ZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0Zyb21Qcm9wZXJ0eUluZm9zIiwic2VsRmllbGQiLCJpbmRleE9mIiwiZ3JvdXAiLCJncm91cExhYmVsIiwic2V0dGluZ3MiLCJ2aXN1YWxGaWx0ZXIiLCJsYWJlbCIsImdldFByb3BlcnR5SW5mbyIsImZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSIsImVudGl0eVByb3BlcnRpZXMiLCJpZ25vcmVQcm9wZXJ0aWVzIiwiZmlsdGVyUHJvcGVydHkiLCJmaWx0ZXJQcm9wZXJ0eU5hbWUiLCJlbnRpdHlQcm9wZXJ0aWVzQ3VycmVudCIsImVudGl0eSIsImlzSW5pdGlhbGl6ZWQiLCJmb3JtYXRQcm9wZXJ0eUluZm8iLCJwcm9wSW5mbyIsInByb3BJbmZvcyIsIl9mb3JtYXRQcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIiLCJzdHJpbmdpZnkiLCJoaWRkZW5GaWx0ZXIiLCJyZXF1aXJlZCIsInRvb2x0aXAiLCJ2aXNpYmxlIiwibWF4Q29uZGl0aW9ucyIsImNhc2VTZW5zaXRpdmUiLCJfY2hlY2tJZlByb3BlcnR5SW5mb0V4aXN0cyIsInBhcmVudENvbnRyb2wiLCJtb2RpZmllciIsInByb3BlcnR5SW5mb05hbWUiLCJjdXN0b21EYXRhVmFsdWUiLCJnZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyIiwib2JqIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvbkZpZWxkcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBIaWRkZW5EcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eVR5cGVDb25maWcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGaWVsZCwgUHJvcGVydHlJbmZvLCBQcm9wZXJ0eUluZm9FeHRlcm5hbCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgKiBhcyBGaWx0ZXJCYXJDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IGdldEFsbEN1c3RvbUFnZ3JlZ2F0ZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgT0RBVEFfVFlQRV9NQVBQSU5HIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHsgdHlwZSBkZWZhdWx0IGFzIEZFRmlsdGVyQmFyIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlckJhci9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblZhbHVlTGlzdFR5cGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbEJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCBDb25kaXRpb24gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvbkNvbnZlcnRlciBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uQ29udmVydGVyXCI7XG5pbXBvcnQgQ29uZGl0aW9uVmFsaWRhdGVkIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0NvbmRpdGlvblZhbGlkYXRlZFwiO1xuaW1wb3J0IE9wZXJhdG9yTmFtZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9PcGVyYXRvck5hbWVcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlciB9IGZyb20gXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBUeXBlTWFwIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBGaWx0ZXJVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3V0aWwvRmlsdGVyVXRpbFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IEVESVRTVEFURSBmcm9tIFwiLi4vZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIElGaWx0ZXJDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0U2VhcmNoPzogKCkgPT4gc3RyaW5nO1xuXHRnZXRQcm9wZXJ0eUluZm9TZXQ/OiAoKSA9PiBQcm9wZXJ0eUluZm9bXTtcblx0Z2V0UHJvcGVydHlJbmZvPzogKCkgPT4gUHJvcGVydHlJbmZvW107XG5cdGdldFR5cGVNYXA6ICgpID0+IFR5cGVNYXA7XG5cdGdldENvbnRyb2xEZWxlZ2F0ZT86ICgpID0+IHtcblx0XHRmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHk6IChzRW50aXR5U2V0UGF0aDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0NvbnRyb2w6IENvbnRyb2wpID0+IFByb3BlcnR5SW5mb1tdO1xuXHR9O1xuXHRpc0luaXRpYWxpemVkPzogKCkgPT4gYm9vbGVhbjtcblx0Z2V0Q3VycmVudFN0YXRlPzogKCkgPT4geyBpdGVtcz86IHsga2V5OiBzdHJpbmcgfVtdIH07XG59ICYgSUZpbHRlcjtcbmVudW0gUHJvcGVydHlJbmZvS2V5cyB7XG5cdGhpZGRlbkZpbHRlciA9IFwiaGlkZGVuRmlsdGVyXCIsXG5cdHJlcXVpcmVkID0gXCJyZXF1aXJlZFwiLFxuXHRwYXRoID0gXCJwYXRoXCIsXG5cdHRvb2x0aXAgPSBcInRvb2x0aXBcIixcblx0dmlzaWJsZSA9IFwidmlzaWJsZVwiLFxuXHRtYXhDb25kaXRpb25zID0gXCJtYXhDb25kaXRpb25zXCIsXG5cdGZvcm1hdE9wdGlvbnMgPSBcImZvcm1hdE9wdGlvbnNcIixcblx0Y29uc3RyYWludHMgPSBcImNvbnN0cmFpbnRzXCIsXG5cdGdyb3VwID0gXCJncm91cFwiLFxuXHRncm91cExhYmVsID0gXCJncm91cExhYmVsXCIsXG5cdGNhc2VTZW5zaXRpdmUgPSBcImNhc2VTZW5zaXRpdmVcIlxufVxuXG5jb25zdCBDT05ESVRJT05fUEFUSF9UT19QUk9QRVJUWV9QQVRIX1JFR0VYID0gL1srKl0vZztcblxuY29uc3Qgb0ZpbHRlclV0aWxzID0ge1xuXHRnZXRGaWx0ZXI6IGZ1bmN0aW9uICh2SUZpbHRlcjogc3RyaW5nIHwgSUZpbHRlckNvbnRyb2wgfCBudWxsKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJVdGlscy5nZXRGaWx0ZXJJbmZvKHZJRmlsdGVyKS5maWx0ZXJzO1xuXHRcdHJldHVybiBhRmlsdGVycz8ubGVuZ3RoID8gbmV3IEZpbHRlcihhRmlsdGVycywgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRGaWx0ZXJGaWVsZDogZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0fSxcblx0YnVpbGRQcm9wZXJ5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFByb3BlcnR5SW5mbyB7XG5cdFx0bGV0IG9Qcm9wZXJ0eUluZm87XG5cdFx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5VHlwZUNvbmZpZz4gPSB7fTtcblx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQcm9wZXJ0eT4ocHJvcGVydHlJbmZvRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IEZpbHRlckJhckNvbnZlcnRlci5mZXRjaFR5cGVDb25maWcocHJvcGVydHlUYXJnZXRPYmplY3QpO1xuXHRcdG9Qcm9wZXJ0eUluZm8gPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIG9UeXBlQ29uZmlnKTtcblx0XHRhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IEZpbHRlckJhckNvbnZlcnRlci5hc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKG9Qcm9wZXJ0eUluZm8sIGNvbnZlcnRlckNvbnRleHQsIFtdLCBhVHlwZUNvbmZpZyk7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH0sXG5cdGNyZWF0ZUNvbnZlcnRlckNvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHRvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0bWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWwsXG5cdFx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50XG5cdCk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhPHN0cmluZz4ob0ZpbHRlckNvbnRyb2wsIFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdGNvbnRleHRQYXRoID0gc0VudGl0eVR5cGVQYXRoIHx8IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aDtcblxuXHRcdGNvbnN0IG9WaWV3ID0gKG9GaWx0ZXJDb250cm9sIGFzIFBhcnRpYWw8SUZpbHRlckNvbnRyb2w+KS5pc0EgPyBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9GaWx0ZXJDb250cm9sKSA6IG51bGw7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IChtZXRhTW9kZWwgfHwgb0ZpbHRlckNvbnRyb2wuZ2V0TW9kZWwoKSEuZ2V0TWV0YU1vZGVsKCkpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBhcHBDb21wb25lbnQgfHwgKG9WaWV3ICYmIENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldykpO1xuXHRcdGNvbnN0IG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChjb250ZXh0UGF0aCEpISk7XG5cdFx0bGV0IG1hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbC5pc0EgJiYgIW9GaWx0ZXJDb250cm9sLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkZpbHRlckJhclwiKSkge1xuXHRcdFx0bWFuaWZlc3RTZXR0aW5ncyA9ICgob1ZpZXcgJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKSkgfHwge30pIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50Py5nZXREaWFnbm9zdGljcygpIGFzIHVua25vd24gYXMgSURpYWdub3N0aWNzLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0bmV3IE1hbmlmZXN0V3JhcHBlcigobWFuaWZlc3RTZXR0aW5ncyA/PyB7fSkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpXG5cdFx0KTtcblx0fSxcblx0Z2V0Q29udmVydGVkRmlsdGVyRmllbGRzOiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sLFxuXHRcdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRcdG1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCxcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyLFxuXHRcdGxpbmVJdGVtVGVybT86IHN0cmluZyxcblx0XHRwcm9wZXJ0eUluZm9zRnJvbUZpbHRlckJhcj86IFByb3BlcnR5SW5mb1tdXG5cdCk6IEZpbHRlckZpZWxkW10ge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLl9nZXRGaWx0ZXJNZXRhTW9kZWwob0ZpbHRlckNvbnRyb2wsIG1ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgc0ZpbHRlckVudGl0eVR5cGVQYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPihvRmlsdGVyQ29udHJvbCwgXCJlbnRpdHlUeXBlXCIpO1xuXHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8c3RyaW5nPihvRmlsdGVyQ29udHJvbCwgXCJhbm5vdGF0aW9uUGF0aFwiKSxcblx0XHRcdGNvbnRleHRQYXRoID0gc0VudGl0eVR5cGVQYXRoIHx8IHNGaWx0ZXJFbnRpdHlUeXBlUGF0aDtcblxuXHRcdGNvbnN0IGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IHRoaXMuX2dldEZpZWxkc0ZvclRhYmxlKG9GaWx0ZXJDb250cm9sLCBzRW50aXR5VHlwZVBhdGgpO1xuXG5cdFx0Y29uc3Qgb0NvbnZlcnRlckNvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnZlcnRlckNvbnRleHQob0ZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aCwgbWV0YU1vZGVsID8/IG9NZXRhTW9kZWwsIGFwcENvbXBvbmVudCk7XG5cblx0XHQvL2FTZWxlY3Rpb25GaWVsZHMgPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0U2VsZWN0aW9uRmllbGRzKG9Db252ZXJ0ZXJDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0XHRzRW50aXR5VHlwZVBhdGgsXG5cdFx0XHRzRmlsdGVyRW50aXR5VHlwZVBhdGghLFxuXHRcdFx0Y29udGV4dFBhdGghLFxuXHRcdFx0bHJUYWJsZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0b01vZGlmaWVyLFxuXHRcdFx0bGluZUl0ZW1UZXJtLFxuXHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRwcm9wZXJ0eUluZm9zRnJvbUZpbHRlckJhclxuXHRcdCk7XG5cdH0sXG5cblx0Z2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzOiBmdW5jdGlvbiAoXG5cdFx0b0lGaWx0ZXI6IElGaWx0ZXJDb250cm9sLFxuXHRcdG1Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBDb25kaXRpb25PYmplY3RbXT4sXG5cdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogUHJvcGVydHlJbmZvW10gfCBudWxsLFxuXHRcdGFQYXJhbWV0ZXJzOiBzdHJpbmdbXVxuXHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGFQYXJhbXM6IHN0cmluZ1tdID0gW107XG5cdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSA9IG9GaWx0ZXJVdGlscy5zZXRUeXBlQ29uZmlnVG9Qcm9wZXJ0aWVzKGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEpITtcblx0XHQvLyBDb2xsZWN0aW5nIGFsbCBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gY29uZGl0aW9uc1xuXHRcdGZvciAoY29uc3Qgc0ZpZWxkUGF0aCBvZiBhUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKG1Db25kaXRpb25zW3NGaWVsZFBhdGhdICYmIG1Db25kaXRpb25zW3NGaWVsZFBhdGhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gV2Ugd291bGQgYmUgdXNpbmcgb25seSB0aGUgZmlyc3QgY29uZGl0aW9uIGZvciBwYXJhbWV0ZXIgdmFsdWUuXG5cdFx0XHRcdGNvbnN0IG9Db25kaXRpb25JbnRlcm5hbCA9IG1lcmdlKHt9LCBtQ29uZGl0aW9uc1tzRmllbGRQYXRoXVswXSkgYXMgQ29uZGl0aW9uT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBvUHJvcGVydHkgPSBGaWx0ZXJVdGlsLmdldFByb3BlcnR5QnlLZXkoYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSwgc0ZpZWxkUGF0aCkgYXMgUHJvcGVydHlJbmZvO1xuXHRcdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9XG5cdFx0XHRcdFx0b1Byb3BlcnR5LnR5cGVDb25maWcgfHwgVHlwZU1hcC5nZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eS5kYXRhVHlwZSwgb1Byb3BlcnR5LmZvcm1hdE9wdGlvbnMsIG9Qcm9wZXJ0eS5jb25zdHJhaW50cyk7XG5cdFx0XHRcdGNvbnN0IG1JbnRlcm5hbFBhcmFtZXRlckNvbmRpdGlvbiA9IENvbmRpdGlvbkNvbnZlcnRlci50b1R5cGUob0NvbmRpdGlvbkludGVybmFsLCBvVHlwZUNvbmZpZywgb0lGaWx0ZXIuZ2V0VHlwZU1hcCgpKTtcblx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBPREFUQV9UWVBFX01BUFBJTkdbb1R5cGVDb25maWcuY2xhc3NOYW1lXTtcblx0XHRcdFx0YVBhcmFtcy5wdXNoKFxuXHRcdFx0XHRcdGAke3NGaWVsZFBhdGh9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChtSW50ZXJuYWxQYXJhbWV0ZXJDb25kaXRpb24udmFsdWVzWzBdLCBzRWRtVHlwZSkpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBCaW5kaW5nIHBhdGggZnJvbSBFbnRpdHlUeXBlXG5cdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gb0lGaWx0ZXIuZGF0YShcImVudGl0eVR5cGVcIik7XG5cdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBzRW50aXR5VHlwZVBhdGguc3Vic3RyaW5nKDAsIHNFbnRpdHlUeXBlUGF0aC5sZW5ndGggLSAxKTtcblx0XHRjb25zdCBzUGFyYW1ldGVyRW50aXR5U2V0ID0gc0VudGl0eVNldFBhdGguc2xpY2UoMCwgc0VudGl0eVNldFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRjb25zdCBzVGFyZ2V0TmF2aWdhdGlvbiA9IHNFbnRpdHlTZXRQYXRoLnN1YnN0cmluZyhzRW50aXR5U2V0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHQvLyBjcmVhdGUgcGFyYW1ldGVyIGNvbnRleHRcblx0XHRyZXR1cm4gYCR7c1BhcmFtZXRlckVudGl0eVNldH0oJHthUGFyYW1zLnRvU3RyaW5nKCl9KS8ke3NUYXJnZXROYXZpZ2F0aW9ufWA7XG5cdH0sXG5cblx0Z2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQ6IGZ1bmN0aW9uIChtQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPik6IGJvb2xlYW4ge1xuXHRcdGxldCBiSXNIaWRlRHJhZnQgPSBmYWxzZTtcblx0XHRpZiAobUNvbmRpdGlvbnMgJiYgbUNvbmRpdGlvbnMuJGVkaXRTdGF0ZSkge1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbiA9IG1Db25kaXRpb25zLiRlZGl0U3RhdGUuZmluZChmdW5jdGlvbiAoY29uZGl0aW9uOiBDb25kaXRpb25PYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJEUkFGVF9FRElUX1NUQVRFXCI7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvQ29uZGl0aW9uICYmIChvQ29uZGl0aW9uLnZhbHVlcy5pbmNsdWRlcyhcIkFMTF9ISURJTkdfRFJBRlRTXCIpIHx8IG9Db25kaXRpb24udmFsdWVzLmluY2x1ZGVzKFwiU0FWRURfT05MWVwiKSkpIHtcblx0XHRcdFx0YklzSGlkZURyYWZ0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc0hpZGVEcmFmdDtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgYWxsIGZpbHRlcnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB0aGUgTURDIEZpbHRlckJhci5cblx0ICogQHBhcmFtIHZJRmlsdGVyIFN0cmluZyBvciBvYmplY3QgaW5zdGFuY2UgcmVsYXRlZCB0byBNRENfRmlsdGVyQmFyL1RhYmxlL0NoYXJ0XG5cdCAqIEBwYXJhbSBtUHJvcGVydGllcyBQcm9wZXJ0aWVzIG9uIGZpbHRlcnMgdGhhdCBhcmUgdG8gYmUgcmV0cmlldmVkLiBBdmFpbGFibGUgcGFyYW1ldGVyczpcblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzLmlnbm9yZWRQcm9wZXJ0aWVzIEFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHdoaWNoIHNob3VsZCBiZSBub3QgY29uc2lkZXJlZCBmb3IgZmlsdGVyaW5nXG5cdCAqIEBwYXJhbSBtUHJvcGVydGllcy5wcm9wZXJ0aWVzTWV0YWRhdGEgQXJyYXkgd2l0aCBhbGwgdGhlIHByb3BlcnR5IG1ldGFkYXRhLiBJZiBub3QgcHJvdmlkZWQsIHByb3BlcnRpZXMgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB2SUZpbHRlci5cblx0ICogQHBhcmFtIG1Qcm9wZXJ0aWVzLnRhcmdldENvbnRyb2wgTURDX3RhYmxlIG9yIGNoYXJ0LiBJZiBwcm92aWRlZCwgcHJvcGVydHkgbmFtZXMgd2hpY2ggYXJlIG5vdCByZWxldmFudCBmb3IgdGhlIHRhcmdldCBjb250cm9sIGVudGl0eVNldCBhcmUgbm90IGNvbnNpZGVyZWQuXG5cdCAqIEBwYXJhbSBtRmlsdGVyQ29uZGl0aW9ucyBNYXAgd2l0aCBleHRlcm5hbGl6ZWQgZmlsdGVyIGNvbmRpdGlvbnMuXG5cdCAqIEByZXR1cm5zIEZpbHRlckJhciBmaWx0ZXJzIGFuZCBiYXNpYyBzZWFyY2hcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldEZpbHRlckluZm86IGZ1bmN0aW9uIChcblx0XHR2SUZpbHRlcjogc3RyaW5nIHwgSUZpbHRlckNvbnRyb2wgfCBudWxsLFxuXHRcdG1Qcm9wZXJ0aWVzPzogeyBpZ25vcmVkUHJvcGVydGllcz86IHN0cmluZ1tdOyBwcm9wZXJ0aWVzTWV0YWRhdGE/OiBQcm9wZXJ0eUluZm9bXTsgdGFyZ2V0Q29udHJvbD86IENvbnRyb2wgfSxcblx0XHRtRmlsdGVyQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPlxuXHQpOiBJbnRlcm5hbEJpbmRpbmdJbmZvIHtcblx0XHRsZXQgYUlnbm9yZVByb3BlcnRpZXMgPSAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMuaWdub3JlZFByb3BlcnRpZXMpIHx8IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRDb250cm9sID0gbVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCxcblx0XHRcdHNUYXJnZXRFbnRpdHlQYXRoID0gb1RhcmdldENvbnRyb2wgPyBvVGFyZ2V0Q29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGxldCBvSUZpbHRlcjogSUZpbHRlckNvbnRyb2wgPSB2SUZpbHRlciBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdHNTZWFyY2gsXG5cdFx0XHRhRmlsdGVyczogRmlsdGVyW10gPSBbXSxcblx0XHRcdHNCaW5kaW5nUGF0aCxcblx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEgPSBtUHJvcGVydGllcyAmJiBtUHJvcGVydGllcy5wcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdFx0aWYgKHR5cGVvZiB2SUZpbHRlciA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b0lGaWx0ZXIgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKHZJRmlsdGVyKSBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sO1xuXHRcdH1cblx0XHRpZiAob0lGaWx0ZXIpIHtcblx0XHRcdHNTZWFyY2ggPSB0aGlzLl9nZXRTZWFyY2hGaWVsZChvSUZpbHRlciwgYUlnbm9yZVByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgbUNvbmRpdGlvbnMgPSB0aGlzLl9nZXRGaWx0ZXJDb25kaXRpb25zKG1Qcm9wZXJ0aWVzLCBtRmlsdGVyQ29uZGl0aW9ucyEsIG9JRmlsdGVyKTtcblx0XHRcdGxldCBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhOiBQcm9wZXJ0eUluZm9bXSB8IG51bGw7XG5cdFx0XHRpZiAob0lGaWx0ZXIuaXNBPEZpbHRlckJhcj4oXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eUluZm8ob0lGaWx0ZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSA9IG9JRmlsdGVyLmdldFByb3BlcnR5SW5mb1NldCA/IG9JRmlsdGVyLmdldFByb3BlcnR5SW5mb1NldCgpIDogbnVsbDtcblx0XHRcdH1cblx0XHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEgPSB0aGlzLl9nZXRGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEoYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSwgb0lGaWx0ZXIpO1xuXHRcdFx0aWYgKG1Qcm9wZXJ0aWVzICYmIG1Qcm9wZXJ0aWVzLnRhcmdldENvbnRyb2wgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0tleSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBtQ29uZGl0aW9uc1tcIiRlZGl0U3RhdGVcIl07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGxldCBhUGFyYW1ldGVycyA9IG9JRmlsdGVyLmRhdGEoXCJwYXJhbWV0ZXJzXCIpIHx8IFtdO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSB0eXBlb2YgYVBhcmFtZXRlcnMgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKGFQYXJhbWV0ZXJzKSA6IGFQYXJhbWV0ZXJzO1xuXHRcdFx0aWYgKGFQYXJhbWV0ZXJzICYmIGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gQmluZGluZyBwYXRoIGNoYW5nZXMgaW4gY2FzZSBvZiBwYXJhbWV0ZXJzLlxuXHRcdFx0XHRzQmluZGluZ1BhdGggPSBvRmlsdGVyVXRpbHMuZ2V0QmluZGluZ1BhdGhGb3JQYXJhbWV0ZXJzKG9JRmlsdGVyLCBtQ29uZGl0aW9ucywgYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSwgYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLmxlbmd0aCkge1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKChwYXJhbSkgPT4ge1xuXHRcdFx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaCgocmVxdWlyZWRQYXJhbTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChwYXJhbSA9PT0gcmVxdWlyZWRQYXJhbSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzVmFsdWUgPSBtQ29uZGl0aW9uc1twYXJhbV1bMF0udmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzW3JlcXVpcmVkUGFyYW1dID0gbVBhcmFtZXRlcnNWYWx1ZVswXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChtQ29uZGl0aW9ucykge1xuXHRcdFx0XHQvL0V4Y2x1ZGUgSW50ZXJmYWNlIEZpbHRlciBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCByZWxldmFudCBmb3IgdGhlIFRhcmdldCBjb250cm9sIGVudGl0eVNldFxuXHRcdFx0XHRpZiAoc1RhcmdldEVudGl0eVBhdGggJiYgb0lGaWx0ZXIuZGF0YShcImVudGl0eVR5cGVcIikgJiYgb0lGaWx0ZXIuZGF0YShcImVudGl0eVR5cGVcIikgIT09IHNUYXJnZXRFbnRpdHlQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9JRmlsdGVyLmdldE1vZGVsKCkhLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0XHRcdGNvbnN0IGFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGEgPSBvSUZpbHRlclxuXHRcdFx0XHRcdFx0LmdldENvbnRyb2xEZWxlZ2F0ZT8uKClcblx0XHRcdFx0XHRcdC5mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoc1RhcmdldEVudGl0eVBhdGgsIG9NZXRhTW9kZWwsIG9JRmlsdGVyKSBhcyBQcm9wZXJ0eUluZm9bXTtcblx0XHRcdFx0XHRhUHJvcGVydGllc01ldGFkYXRhID0gYVRhcmdldFByb3BlcnRpZXNNZXRhZGF0YTtcblxuXHRcdFx0XHRcdGNvbnN0IF9hSWdub3JlUHJvcGVydGllcyA9IHRoaXMuX2dldElnbm9yZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0YUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSBhcyBQcm9wZXJ0eUluZm9bXSxcblx0XHRcdFx0XHRcdGFUYXJnZXRQcm9wZXJ0aWVzTWV0YWRhdGFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChfYUlnbm9yZVByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0YUlnbm9yZVByb3BlcnRpZXMgPSBhSWdub3JlUHJvcGVydGllcy5jb25jYXQoX2FJZ25vcmVQcm9wZXJ0aWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFQcm9wZXJ0aWVzTWV0YWRhdGEgJiYgYUZpbHRlclByb3BlcnRpZXNNZXRhZGF0YSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEgPSBhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhciBhUGFyYW1LZXlzID0gW107XG5cdFx0XHRcdC8vIGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbSkge1xuXHRcdFx0XHQvLyBcdGFQYXJhbUtleXMucHVzaChvUGFyYW0ua2V5KTtcblx0XHRcdFx0Ly8gfSk7XG5cdFx0XHRcdGFGaWx0ZXJzID0gdGhpcy5nZXRFZGl0U3RhdGVBbmRGaWx0ZXIoe1xuXHRcdFx0XHRcdG9JRmlsdGVyLFxuXHRcdFx0XHRcdG1Db25kaXRpb25zLFxuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzTWV0YWRhdGEsXG5cdFx0XHRcdFx0YUlnbm9yZVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0YVBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtZXRlcnM6IG1QYXJhbWV0ZXJzLCBmaWx0ZXJzOiBhRmlsdGVycywgc2VhcmNoOiBzU2VhcmNoIHx8IHVuZGVmaW5lZCwgYmluZGluZ1BhdGg6IHNCaW5kaW5nUGF0aCB9O1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgRmlsdGVyIHBhcmFtcyB0YWtpbmcgaW4gY29uc2lkZXJhdGlvbiB0aGUgRWRpdGluZyBTdGF0dXMgZmllbGQsXG5cdCAqIG1lcmdlcy9vdmVycmlkZXMgdGhlIGRhdGEgdGhhdCdzIGNvbWluZyBmcm9tIEZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbywgYW5kLFxuXHQgKiByZXR1cm5zIGEgbWFwcGVkIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgYmFja2VuZC5cblx0ICogQHBhcmFtIHBhcmFtIE9iamVjdFxuXHQgKiBAcGFyYW0gcGFyYW0ub0lGaWx0ZXIgT2JqZWN0IEZpbHRlckJhciBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gcGFyYW0ubUNvbmRpdGlvbnMgT2JqZWN0IENvbmRpdGlvbnMgdGhhdCBjb21lcyBmcm9tIHRoZSBGaWx0ZXIgRmllbGRzXG5cdCAqIEBwYXJhbSBwYXJhbS5hUHJvcGVydGllc01ldGFkYXRhIEFycmF5IEZpbHRlciBtZXRhZGF0YVxuXHQgKiBAcGFyYW0gcGFyYW0uYUlnbm9yZVByb3BlcnRpZXMgQXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBmaWVsZCBrZXlzIHdoaWNoIG5lZWQgdG8gYmUgaWdub3JlZFxuXHQgKiBAcGFyYW0gcGFyYW0uYVBhcmFtZXRlcnMgQXJyYXkgVVJMIHBhcmFtcyB0aGF0IGFsc28gbmVlZCB0byBiZSBpZ25vcmUgYW5kIGFyZSBtZXJnZWQgaW50byB0aGUgYUlnbm9yZVByb3BlcnRpZXNcblx0ICogQHJldHVybnMgRmlsdGVyQmFyIGZpbHRlcnMgYXJyYXlcblx0ICovXG5cdGdldEVkaXRTdGF0ZUFuZEZpbHRlcjogZnVuY3Rpb24gKHtcblx0XHRvSUZpbHRlcixcblx0XHRtQ29uZGl0aW9ucyxcblx0XHRhUHJvcGVydGllc01ldGFkYXRhLFxuXHRcdGFJZ25vcmVQcm9wZXJ0aWVzLFxuXHRcdGFQYXJhbWV0ZXJzXG5cdH06IHtcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2w7XG5cdFx0bUNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPjtcblx0XHRhUHJvcGVydGllc01ldGFkYXRhOiBQcm9wZXJ0eUluZm9bXSB8IHVuZGVmaW5lZDtcblx0XHRhSWdub3JlUHJvcGVydGllczogc3RyaW5nW107XG5cdFx0YVBhcmFtZXRlcnM6IENvbmNhdEFycmF5PHN0cmluZz47XG5cdH0pOiBGaWx0ZXJbXSB7XG5cdFx0Y29uc3Qgb0ZpbHRlciA9IChcblx0XHRcdEZpbHRlclV0aWwuZ2V0RmlsdGVySW5mbyhcblx0XHRcdFx0b0lGaWx0ZXIsXG5cdFx0XHRcdG1Db25kaXRpb25zLFxuXHRcdFx0XHRvRmlsdGVyVXRpbHMuc2V0VHlwZUNvbmZpZ1RvUHJvcGVydGllcyhhUHJvcGVydGllc01ldGFkYXRhKSEsXG5cdFx0XHRcdGFJZ25vcmVQcm9wZXJ0aWVzLmNvbmNhdChhUGFyYW1ldGVycylcblx0XHRcdCkgYXMgeyBmaWx0ZXJzOiBGaWx0ZXIgfVxuXHRcdCkuZmlsdGVycztcblx0XHRjb25zdCBoYXNFZGl0U3RhdGVNZXRhZGF0YSA9IGFQcm9wZXJ0aWVzTWV0YWRhdGE/LmZpbHRlcigocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IFwiJGVkaXRTdGF0ZVwiKTtcblx0XHRsZXQgZWRpdFN0YXRlRmlsdGVyOiBGaWx0ZXIgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKCFhSWdub3JlUHJvcGVydGllcy5pbmNsdWRlcyhcIiRlZGl0U3RhdGVcIikgJiYgaGFzRWRpdFN0YXRlTWV0YWRhdGEgJiYgaGFzRWRpdFN0YXRlTWV0YWRhdGEubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLmhhc093blByb3BlcnR5KFwiJGVkaXRTdGF0ZVwiKSkge1xuXHRcdFx0XHRjb25zdCBlZGl0U3RhdGVWYWx1ZSA9IG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0ZWRpdFN0YXRlRmlsdGVyID0gRURJVFNUQVRFLmdldEZpbHRlckZvckVkaXRTdGF0ZShlZGl0U3RhdGVWYWx1ZT8uWzBdPy52YWx1ZXM/LlswXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0U3RhdGVGaWx0ZXIgPSBFRElUU1RBVEUuZ2V0RmlsdGVyRm9yRWRpdFN0YXRlKFwiXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvSUZpbHRlcik7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9IChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzSGlkZGVuRHJhZnRFbmFibGVkICYmXG5cdFx0XHRcdG9JRmlsdGVyLmhhc093blByb3BlcnR5KFwiZGlzYWJsZURyYWZ0RWRpdFN0YXRlRmlsdGVyXCIpICYmXG5cdFx0XHRcdG9JRmlsdGVyLmdldFByb3BlcnR5KFwiZGlzYWJsZURyYWZ0RWRpdFN0YXRlRmlsdGVyXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0ZWRpdFN0YXRlRmlsdGVyID0gRURJVFNUQVRFLmdldEZpbHRlckZvckVkaXRTdGF0ZShcIkFMTFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGFGaWx0ZXJzID0gb0ZpbHRlciA/IFtvRmlsdGVyXSA6IFtdO1xuXG5cdFx0Ly8oIFRyYW5zZm9ybSBEYXRlVGltZU9mZnNldCBwcmVjaXNpb24gNyBmaWx0ZXJzXG5cdFx0aWYgKG9JRmlsdGVyLmlzQTxGaWx0ZXJCYXI+KFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdHRoaXMuX3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVycyhhRmlsdGVycywgbUNvbmRpdGlvbnMsIG9JRmlsdGVyIGFzIEZpbHRlckJhcik7XG5cdFx0fVxuXG5cdFx0aWYgKGVkaXRTdGF0ZUZpbHRlcikge1xuXHRcdFx0Y29uc3QgaGFzRWRpdFN0YXRlRmlsdGVyID0gdGhpcy5oYXNFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseShhRmlsdGVycyk7XG5cdFx0XHRpZiAoaGFzRWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0XHRcdGFGaWx0ZXJzID0gdGhpcy5leGNoYW5nZUVkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5KGVkaXRTdGF0ZUZpbHRlciwgYUZpbHRlcnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YUZpbHRlcnMgPSBbXG5cdFx0XHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRmaWx0ZXJzOiBbLi4uYUZpbHRlcnMsIGVkaXRTdGF0ZUZpbHRlcl0sXG5cdFx0XHRcdFx0XHRhbmQ6IHRydWVcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYUZpbHRlcnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgRGF0ZVRpbWVPZmZzZXQgZmlsdGVycyBieSBjb252ZXJ0aW5nIEVRIG9wZXJhdG9ycyB0byBCVCBvcGVyYXRvcnNcblx0ICogd2l0aCBwcmVjaXNpb24tYmFzZWQgcmFuZ2UgZnJvbSAuMDAwLi4uIHRvIC45OTkuLi4gYmFzZWQgb24gcHJvcGVydHkgcHJlY2lzaW9uLlxuXHQgKiBAcGFyYW0gYUZpbHRlcnMgQXJyYXkgb2YgZmlsdGVyIG9iamVjdHMgdG8gdHJhbnNmb3JtXG5cdCAqIEBwYXJhbSBtQ29uZGl0aW9ucyBGaWx0ZXIgY29uZGl0aW9ucyBmcm9tIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIGluc3RhbmNlIHRvIGFjY2VzcyBwcm9wZXJ0eSBpbmZvcm1hdGlvblxuXHQgKi9cblx0X3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVyczogZnVuY3Rpb24gKFxuXHRcdGFGaWx0ZXJzOiBGaWx0ZXJbXSxcblx0XHRtQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+LFxuXHRcdG9GaWx0ZXJCYXI6IEZpbHRlckJhclxuXHQpOiB2b2lkIHtcblx0XHRpZiAoIWFGaWx0ZXJzIHx8ICFBcnJheS5pc0FycmF5KGFGaWx0ZXJzKSB8fCAhbUNvbmRpdGlvbnMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbmVzdGVkIGZpbHRlciBzdHJ1Y3R1cmUgLSB3aGVuIG11bHRpcGxlIGZpbHRlcnMgYXJlIGRlZmluZWQsXG5cdFx0Ly8gdGhleSBtYXkgYmUgY29udGFpbmVkIHdpdGhpbiBhRmlsdGVyc1swXS5hRmlsdGVyc1xuXHRcdGxldCBhY3R1YWxGaWx0ZXJzOiBGaWx0ZXJbXSA9IGFGaWx0ZXJzO1xuXHRcdGNvbnN0IGZpcnN0RmlsdGVyID0gYUZpbHRlcnNbMF0gYXMgRmlsdGVyICYgeyBhRmlsdGVycz86IEZpbHRlcltdIH07XG5cdFx0aWYgKGZpcnN0RmlsdGVyPy5hRmlsdGVycyAmJiBmaXJzdEZpbHRlci5hRmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhY3R1YWxGaWx0ZXJzID0gZmlyc3RGaWx0ZXIuYUZpbHRlcnM7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHByb3BlcnR5IGhlbHBlciB0byBhY2Nlc3MgcHJvcGVydHkgbWV0YWRhdGFcblx0XHRjb25zdCBvUHJvcGVydHlIZWxwZXIgPSBvRmlsdGVyQmFyLmdldFByb3BlcnR5SGVscGVyKCk7XG5cdFx0aWYgKCFvUHJvcGVydHlIZWxwZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDcmVhdGUgYSBtYXAgb2YgY29uZGl0aW9uIHBhdGhzIHRvIHRoZWlyIHByZWNpc2lvbiBsZXZlbHNcblx0XHRjb25zdCBkYXRlVGltZU9mZnNldFBhdGhzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuXHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzQ29uZGl0aW9uUGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGhdICYmIG1Db25kaXRpb25zW3NDb25kaXRpb25QYXRoXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIFVzZSB0aGUgZnVsbCBjb25kaXRpb24gcGF0aCBmb3IgcHJvcGVydHkgaGVscGVyXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5SW5mbyA9IG9Qcm9wZXJ0eUhlbHBlci5nZXRQcm9wZXJ0eShzQ29uZGl0aW9uUGF0aCkgYXNcblx0XHRcdFx0XHR8IHtcblx0XHRcdFx0XHRcdFx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdGNvbnN0cmFpbnRzPzogeyBwcmVjaXNpb24/OiBudW1iZXIgfTtcblx0XHRcdFx0XHRcdFx0dHlwZUNvbmZpZz86IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlSW5zdGFuY2U/OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdHJhaW50cz86IHsgcHJlY2lzaW9uPzogbnVtYmVyIH07XG5cdFx0XHRcdFx0XHRcdFx0XHRnZXROYW1lKCk6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHByb3BlcnR5IGlzIERhdGVUaW1lT2Zmc2V0XG5cdFx0XHRcdGNvbnN0IGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW4gPVxuXHRcdFx0XHRcdChwcm9wZXJ0eUluZm8/LmRhdGFUeXBlPy5pbmNsdWRlcyhcIkRhdGVUaW1lT2Zmc2V0XCIpID8/IGZhbHNlKSB8fFxuXHRcdFx0XHRcdChwcm9wZXJ0eUluZm8/LnR5cGVDb25maWc/LnR5cGVJbnN0YW5jZT8uZ2V0TmFtZSgpLmluY2x1ZGVzKFwiRGF0ZVRpbWVPZmZzZXRcIikgPz8gZmFsc2UpO1xuXHRcdFx0XHRjb25zdCBwcmVjaXNpb246IG51bWJlciB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvPy5jb25zdHJhaW50cz8ucHJlY2lzaW9uID8/IHByb3BlcnR5SW5mbz8udHlwZUNvbmZpZz8udHlwZUluc3RhbmNlPy5jb25zdHJhaW50cz8ucHJlY2lzaW9uO1xuXG5cdFx0XHRcdC8vIE9ubHkgcHJvY2VzcyBEYXRlVGltZU9mZnNldCBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCBwcmVjaXNpb25cblx0XHRcdFx0aWYgKGlzRGF0ZVRpbWVPZmZzZXQgJiYgcHJlY2lzaW9uICE9PSB1bmRlZmluZWQgJiYgcHJlY2lzaW9uID4gMCkge1xuXHRcdFx0XHRcdGRhdGVUaW1lT2Zmc2V0UGF0aHMuc2V0KHNDb25kaXRpb25QYXRoLCBwcmVjaXNpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBUcmFuc2Zvcm0gZmlsdGVycyByZWN1cnNpdmVseSB0byBoYW5kbGUgYWxsIG5lc3RlZCBzdHJ1Y3R1cmVzXG5cdFx0dGhpcy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZVJlY3Vyc2l2ZWx5KGFjdHVhbEZpbHRlcnMsIGRhdGVUaW1lT2Zmc2V0UGF0aHMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGZpbHRlcnMgdG8gaGFuZGxlIGFsbCBwb3NzaWJsZSBuZXN0ZWQgYUZpbHRlcnMgc3RydWN0dXJlcy5cblx0ICogQHBhcmFtIGFGaWx0ZXJzIEFycmF5IG9mIGZpbHRlciBvYmplY3RzIHRvIHRyYW5zZm9ybVxuXHQgKiBAcGFyYW0gZGF0ZVRpbWVPZmZzZXRQYXRocyBNYXAgb2YgY29uZGl0aW9uIHBhdGhzIHRvIHRoZWlyIHByZWNpc2lvbiBsZXZlbHNcblx0ICovXG5cdF90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlUmVjdXJzaXZlbHk6IGZ1bmN0aW9uIChhRmlsdGVyczogRmlsdGVyW10sIGRhdGVUaW1lT2Zmc2V0UGF0aHM6IE1hcDxzdHJpbmcsIG51bWJlcj4pOiB2b2lkIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXI6IEZpbHRlciA9IGFGaWx0ZXJzW2ldO1xuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGZpbHRlciBoYXMgbmVzdGVkIGFGaWx0ZXJzIChtdWx0aXBsZSBjb25kaXRpb25zIGZvciBzYW1lIGZpZWxkKVxuXHRcdFx0Y29uc3QgZmlsdGVyV2l0aE5lc3RlZEZpbHRlcnMgPSBmaWx0ZXIgYXMgRmlsdGVyICYgeyBhRmlsdGVycz86IEZpbHRlcltdOyBiQW5kPzogYm9vbGVhbiB9O1xuXHRcdFx0aWYgKGZpbHRlcldpdGhOZXN0ZWRGaWx0ZXJzLmFGaWx0ZXJzICYmIGZpbHRlcldpdGhOZXN0ZWRGaWx0ZXJzLmFGaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gUmVjdXJzaXZlbHkgdHJhbnNmb3JtIG5lc3RlZCBmaWx0ZXJzIGZvciBkZWVwZXIgbmVzdGluZyBsZXZlbHNcblx0XHRcdFx0dGhpcy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZVJlY3Vyc2l2ZWx5KGZpbHRlcldpdGhOZXN0ZWRGaWx0ZXJzLmFGaWx0ZXJzLCBkYXRlVGltZU9mZnNldFBhdGhzKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGZpbHRlclBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGZpbHRlci5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBmaWx0ZXJPcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IgfCB1bmRlZmluZWQgPSBmaWx0ZXIuZ2V0T3BlcmF0b3IoKSBhcyBGaWx0ZXJPcGVyYXRvciB8IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZpbHRlclZhbHVlMTogdW5rbm93biA9IGZpbHRlci5nZXRWYWx1ZTEoKTtcblx0XHRcdGNvbnN0IGZpbHRlclZhbHVlMjogdW5rbm93biA9IGZpbHRlci5nZXRWYWx1ZTI/LigpO1xuXG5cdFx0XHQvLyBIYW5kbGUgdW5kZWZpbmVkIGZpbHRlck9wZXJhdG9yIGdyYWNlZnVsbHlcblx0XHRcdGlmIChmaWx0ZXJPcGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFwiRmlsdGVyVXRpbHMuX3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVyczogRmlsdGVyIG9wZXJhdG9yIGlzIHVuZGVmaW5lZCwgc2tpcHBpbmcgZmlsdGVyIHRyYW5zZm9ybWF0aW9uXCIsXG5cdFx0XHRcdFx0YGZpbHRlclBhdGg6ICR7ZmlsdGVyUGF0aH0sIGZpbHRlclZhbHVlMTogJHtmaWx0ZXJWYWx1ZTF9YFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb250aW51ZTsgLy8gU2tpcCB0aGlzIGZpbHRlciBhbmQgY29udGludWUgd2l0aCBuZXh0IG9uZVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBmb3IgdHJhbnNmb3JtYXRpb24gY29uZGl0aW9uczpcblx0XHRcdC8vIDEuIEVRIG9wZXJhdG9yIHdpdGggdmFsaWQgZmlyc3QgdmFsdWVcblx0XHRcdC8vIDIuIEFueSBvcGVyYXRvciB3aXRoIHR3byB2YWx1ZXMgKGlycmVzcGVjdGl2ZSBvZiBvcGVyYXRvciB0eXBlKVxuXHRcdFx0Y29uc3Qgc2hvdWxkVHJhbnNmb3JtOiBib29sZWFuID1cblx0XHRcdFx0KGZpbHRlck9wZXJhdG9yID09PSBcIkVRXCIgJiYgZmlsdGVyVmFsdWUxICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUxICE9PSBudWxsKSB8fFxuXHRcdFx0XHQoZmlsdGVyVmFsdWUxICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUxICE9PSBudWxsICYmIGZpbHRlclZhbHVlMiAhPT0gdW5kZWZpbmVkICYmIGZpbHRlclZhbHVlMiAhPT0gbnVsbCk7XG5cblx0XHRcdGlmIChzaG91bGRUcmFuc2Zvcm0pIHtcblx0XHRcdFx0Ly8gRm9yIGRpcmVjdCBwcm9wZXJ0aWVzIC0gY2hlY2sgaWYgdGhlIHBhdGggbWF0Y2hlcyBhbnkgY29uZGl0aW9uIHBhdGhcblx0XHRcdFx0aWYgKGZpbHRlclBhdGggJiYgZGF0ZVRpbWVPZmZzZXRQYXRocy5oYXMoZmlsdGVyUGF0aCkpIHtcblx0XHRcdFx0XHRjb25zdCBwcmVjaXNpb246IG51bWJlciA9IGRhdGVUaW1lT2Zmc2V0UGF0aHMuZ2V0KGZpbHRlclBhdGgpITtcblx0XHRcdFx0XHRjb25zdCB0cmFuc2Zvcm1lZEZpbHRlcjogRmlsdGVyIHwgbnVsbCA9IHRoaXMuX3RyYW5zZm9ybURhdGVUaW1lT2ZmU2V0RmlsdGVyVmFsdWUoZmlsdGVyLCBwcmVjaXNpb24pO1xuXHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1lZEZpbHRlcikge1xuXHRcdFx0XHRcdFx0YUZpbHRlcnNbaV0gPSB0cmFuc2Zvcm1lZEZpbHRlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyT3BlcmF0b3IgPT09IFwiQW55XCIpIHtcblx0XHRcdFx0Ly8gSGFuZGxlIG5hdmlnYXRpb24gcHJvcGVydHkgZmlsdGVyc1xuXHRcdFx0XHRjb25zdCBuZXN0ZWRGaWx0ZXIgPSBmaWx0ZXIuZ2V0Q29uZGl0aW9uKCk7XG5cdFx0XHRcdGlmICghbmVzdGVkRmlsdGVyKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbmVzdGVkIGZpbHRlciBoYXMgbXVsdGlwbGUgY29uZGl0aW9ucyAoYUZpbHRlcnMgYXJyYXkpXG5cdFx0XHRcdGNvbnN0IG5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMgPSBuZXN0ZWRGaWx0ZXIgYXMgRmlsdGVyICYgeyBhRmlsdGVycz86IEZpbHRlcltdOyBiQW5kPzogYm9vbGVhbiB9O1xuXHRcdFx0XHRpZiAobmVzdGVkRmlsdGVyV2l0aE11bHRpcGxlQ29uZGl0aW9ucy5hRmlsdGVycyAmJiBuZXN0ZWRGaWx0ZXJXaXRoTXVsdGlwbGVDb25kaXRpb25zLmFGaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgY29uZGl0aW9ucyB3aXRoaW4gbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdGxldCBoYXNUcmFuc2Zvcm1hdGlvbiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBuZXN0ZWRGaWx0ZXJXaXRoTXVsdGlwbGVDb25kaXRpb25zLmFGaWx0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdWJGaWx0ZXI6IEZpbHRlciA9IG5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMuYUZpbHRlcnNbal07XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIGZvciBmdXJ0aGVyIG5lc3Rpbmcgd2l0aGluIHN1Yi1maWx0ZXJzXG5cdFx0XHRcdFx0XHRjb25zdCBzdWJGaWx0ZXJXaXRoTmVzdGluZyA9IHN1YkZpbHRlciBhcyBGaWx0ZXIgJiB7IGFGaWx0ZXJzPzogRmlsdGVyW10gfTtcblx0XHRcdFx0XHRcdGlmIChzdWJGaWx0ZXJXaXRoTmVzdGluZy5hRmlsdGVycyAmJiBzdWJGaWx0ZXJXaXRoTmVzdGluZy5hRmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlY3Vyc2l2ZWx5IGhhbmRsZSBkZWVwZXIgbmVzdGluZyBsZXZlbHNcblx0XHRcdFx0XHRcdFx0dGhpcy5fdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZVJlY3Vyc2l2ZWx5KHN1YkZpbHRlcldpdGhOZXN0aW5nLmFGaWx0ZXJzLCBkYXRlVGltZU9mZnNldFBhdGhzKTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IHN1YkZpbHRlclBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHN1YkZpbHRlci5nZXRQYXRoKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzdWJGaWx0ZXJPcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IgfCB1bmRlZmluZWQgPSBzdWJGaWx0ZXIuZ2V0T3BlcmF0b3IoKSBhcyBGaWx0ZXJPcGVyYXRvciB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YkZpbHRlclZhbHVlMTogdW5rbm93biA9IHN1YkZpbHRlci5nZXRWYWx1ZTEoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHN1YkZpbHRlclZhbHVlMjogdW5rbm93biA9IHN1YkZpbHRlci5nZXRWYWx1ZTI/LigpO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgdW5kZWZpbmVkIHN1YkZpbHRlck9wZXJhdG9yIGdyYWNlZnVsbHlcblx0XHRcdFx0XHRcdGlmIChzdWJGaWx0ZXJPcGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFx0XHRcdFwiRmlsdGVyVXRpbHMuX3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVyczogRmlsdGVyIG9wZXJhdG9yIGlzIHVuZGVmaW5lZCwgc2tpcHBpbmcgZmlsdGVyIHRyYW5zZm9ybWF0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdFx0YGZpbHRlclBhdGg6ICR7c3ViRmlsdGVyUGF0aH0sIGZpbHRlclZhbHVlMTogJHtzdWJGaWx0ZXJWYWx1ZTF9YFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTsgLy8gU2tpcCB0aGlzIHN1Yi1maWx0ZXJcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIHRyYW5zZm9ybWF0aW9uIGNvbmRpdGlvbnMgZm9yIHN1Yi1maWx0ZXJzXG5cdFx0XHRcdFx0XHRjb25zdCBzaG91bGRUcmFuc2Zvcm1TdWJGaWx0ZXI6IGJvb2xlYW4gPVxuXHRcdFx0XHRcdFx0XHQoc3ViRmlsdGVyT3BlcmF0b3IgPT09IFwiRVFcIiAmJiBzdWJGaWx0ZXJWYWx1ZTEgIT09IHVuZGVmaW5lZCAmJiBzdWJGaWx0ZXJWYWx1ZTEgIT09IG51bGwpIHx8XG5cdFx0XHRcdFx0XHRcdChzdWJGaWx0ZXJWYWx1ZTEgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRcdHN1YkZpbHRlclZhbHVlMSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0XHRcdHN1YkZpbHRlclZhbHVlMiAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdFx0c3ViRmlsdGVyVmFsdWUyICE9PSBudWxsKTtcblxuXHRcdFx0XHRcdFx0aWYgKHNob3VsZFRyYW5zZm9ybVN1YkZpbHRlcikge1xuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBhbnkgY29uZGl0aW9uIHBhdGggbWF0Y2hlcyB0aGUgbmF2aWdhdGlvbiBwYXR0ZXJuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1hdGNoaW5nQ29uZGl0aW9uUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gQXJyYXkuZnJvbShkYXRlVGltZU9mZnNldFBhdGhzLmtleXMoKSkuZmluZChmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRcdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZ1xuXHRcdFx0XHRcdFx0XHQpOiBib29sZWFuIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBFeHRyYWN0IG5hdmlnYXRpb24gYW5kIHByb3BlcnR5IHBhcnRzIGZyb20gY29uZGl0aW9uIHBhdGhcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXRoUGFydHM6IHN0cmluZ1tdID0gc0NvbmRpdGlvblBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwYXRoUGFydHMubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGFydDogc3RyaW5nID0gcGF0aFBhcnRzWzBdLnJlcGxhY2UoXCIqXCIsIFwiXCIpOyAvLyBcIl9JdGVtKlwiIC0+IFwiX0l0ZW1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXJ0OiBzdHJpbmcgPSBwYXRoUGFydHNbMV07IC8vIFwiQmlsbGluZ0RvY3VtZW50RGF0ZVwiXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGZpbHRlciBuYXZpZ2F0aW9uIG1hdGNoZXMgYW5kIHN1YiBmaWx0ZXIgZW5kcyB3aXRoIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmlsdGVyUGF0aCA9PT0gbmF2aWdhdGlvblBhcnQgJiYgQm9vbGVhbihzdWJGaWx0ZXJQYXRoPy5lbmRzV2l0aChwcm9wZXJ0eVBhcnQpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRpZiAobWF0Y2hpbmdDb25kaXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlY2lzaW9uOiBudW1iZXIgPSBkYXRlVGltZU9mZnNldFBhdGhzLmdldChtYXRjaGluZ0NvbmRpdGlvblBhdGgpITtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0cmFuc2Zvcm1lZFN1YkZpbHRlcjogRmlsdGVyIHwgbnVsbCA9IHRoaXMuX3RyYW5zZm9ybURhdGVUaW1lT2ZmU2V0RmlsdGVyVmFsdWUoc3ViRmlsdGVyLCBwcmVjaXNpb24pO1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1lZFN1YkZpbHRlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmVzdGVkRmlsdGVyV2l0aE11bHRpcGxlQ29uZGl0aW9ucy5hRmlsdGVyc1tqXSA9IHRyYW5zZm9ybWVkU3ViRmlsdGVyO1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzVHJhbnNmb3JtYXRpb24gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIElmIGFueSB0cmFuc2Zvcm1hdGlvbiBvY2N1cnJlZCwgcmVjcmVhdGUgdGhlIEFueSBmaWx0ZXIgd2l0aCB1cGRhdGVkIG5lc3RlZCBjb25kaXRpb25zXG5cdFx0XHRcdFx0aWYgKGhhc1RyYW5zZm9ybWF0aW9uKSB7XG5cdFx0XHRcdFx0XHRhRmlsdGVyc1tpXSA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXJQYXRoLFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogXCJBbnlcIixcblx0XHRcdFx0XHRcdFx0dmFyaWFibGU6IGZpbHRlci5nZXRWYXJpYWJsZSgpLFxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb246IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0XHRcdGZpbHRlcnM6IG5lc3RlZEZpbHRlcldpdGhNdWx0aXBsZUNvbmRpdGlvbnMuYUZpbHRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0YW5kOiBuZXN0ZWRGaWx0ZXJXaXRoTXVsdGlwbGVDb25kaXRpb25zLmJBbmQgPz8gdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEhhbmRsZSBzaW5nbGUgY29uZGl0aW9uIHdpdGhpbiBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0Y29uc3QgbmVzdGVkRmlsdGVyUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gbmVzdGVkRmlsdGVyLmdldFBhdGgoKTtcblx0XHRcdFx0XHRjb25zdCBuZXN0ZWRGaWx0ZXJPcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IgfCB1bmRlZmluZWQgPSBuZXN0ZWRGaWx0ZXIuZ2V0T3BlcmF0b3IoKSBhcyBGaWx0ZXJPcGVyYXRvciB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRjb25zdCBuZXN0ZWRGaWx0ZXJWYWx1ZTE6IHVua25vd24gPSBuZXN0ZWRGaWx0ZXIuZ2V0VmFsdWUxKCk7XG5cdFx0XHRcdFx0Y29uc3QgbmVzdGVkRmlsdGVyVmFsdWUyOiB1bmtub3duID0gbmVzdGVkRmlsdGVyLmdldFZhbHVlMj8uKCk7XG5cblx0XHRcdFx0XHQvLyBIYW5kbGUgdW5kZWZpbmVkIG5lc3RlZEZpbHRlck9wZXJhdG9yIGdyYWNlZnVsbHlcblx0XHRcdFx0XHRpZiAobmVzdGVkRmlsdGVyT3BlcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRcdFwiRmlsdGVyVXRpbHMuX3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVyczogRmlsdGVyIG9wZXJhdG9yIGlzIHVuZGVmaW5lZCwgc2tpcHBpbmcgZmlsdGVyIHRyYW5zZm9ybWF0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdGBmaWx0ZXJQYXRoOiAke25lc3RlZEZpbHRlclBhdGh9LCBmaWx0ZXJWYWx1ZTE6ICR7bmVzdGVkRmlsdGVyVmFsdWUxfWBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTsgLy8gU2tpcCB0aGlzIG5lc3RlZCBmaWx0ZXJcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDaGVjayBmb3IgdHJhbnNmb3JtYXRpb24gY29uZGl0aW9ucyBmb3IgbmVzdGVkIGZpbHRlcnNcblx0XHRcdFx0XHRjb25zdCBzaG91bGRUcmFuc2Zvcm1OZXN0ZWQ6IGJvb2xlYW4gPVxuXHRcdFx0XHRcdFx0KG5lc3RlZEZpbHRlck9wZXJhdG9yID09PSBcIkVRXCIgJiYgbmVzdGVkRmlsdGVyVmFsdWUxICE9PSB1bmRlZmluZWQgJiYgbmVzdGVkRmlsdGVyVmFsdWUxICE9PSBudWxsKSB8fFxuXHRcdFx0XHRcdFx0KG5lc3RlZEZpbHRlclZhbHVlMSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdG5lc3RlZEZpbHRlclZhbHVlMSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0XHRuZXN0ZWRGaWx0ZXJWYWx1ZTIgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRuZXN0ZWRGaWx0ZXJWYWx1ZTIgIT09IG51bGwpO1xuXG5cdFx0XHRcdFx0aWYgKHNob3VsZFRyYW5zZm9ybU5lc3RlZCkge1xuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgYW55IGNvbmRpdGlvbiBwYXRoIG1hdGNoZXMgdGhlIG5hdmlnYXRpb24gcGF0dGVyblxuXHRcdFx0XHRcdFx0Y29uc3QgbWF0Y2hpbmdDb25kaXRpb25QYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBBcnJheS5mcm9tKGRhdGVUaW1lT2Zmc2V0UGF0aHMua2V5cygpKS5maW5kKGZ1bmN0aW9uIChcblx0XHRcdFx0XHRcdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZ1xuXHRcdFx0XHRcdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0XHRcdC8vIEV4dHJhY3QgbmF2aWdhdGlvbiBhbmQgcHJvcGVydHkgcGFydHMgZnJvbSBjb25kaXRpb24gcGF0aFxuXHRcdFx0XHRcdFx0XHRjb25zdCBwYXRoUGFydHM6IHN0cmluZ1tdID0gc0NvbmRpdGlvblBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdFx0XHRpZiAocGF0aFBhcnRzLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXJ0OiBzdHJpbmcgPSBwYXRoUGFydHNbMF0ucmVwbGFjZShcIipcIiwgXCJcIik7IC8vIFwiX0l0ZW0qXCIgLT4gXCJfSXRlbVwiXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXJ0OiBzdHJpbmcgPSBwYXRoUGFydHNbMV07IC8vIFwiUmVxdWVzdGVkRGVsaXZlcnlEYXRlXCJcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGZpbHRlciBuYXZpZ2F0aW9uIG1hdGNoZXMgYW5kIG5lc3RlZCBmaWx0ZXIgZW5kcyB3aXRoIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZpbHRlclBhdGggPT09IG5hdmlnYXRpb25QYXJ0ICYmIEJvb2xlYW4obmVzdGVkRmlsdGVyUGF0aD8uZW5kc1dpdGgocHJvcGVydHlQYXJ0KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdGlmIChtYXRjaGluZ0NvbmRpdGlvblBhdGgpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlY2lzaW9uOiBudW1iZXIgPSBkYXRlVGltZU9mZnNldFBhdGhzLmdldChtYXRjaGluZ0NvbmRpdGlvblBhdGgpITtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdHJhbnNmb3JtZWROZXN0ZWRGaWx0ZXI6IEZpbHRlciB8IG51bGwgPSB0aGlzLl90cmFuc2Zvcm1EYXRlVGltZU9mZlNldEZpbHRlclZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdG5lc3RlZEZpbHRlcixcblx0XHRcdFx0XHRcdFx0XHRwcmVjaXNpb25cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aWYgKHRyYW5zZm9ybWVkTmVzdGVkRmlsdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIG5ldyBBbnkgZmlsdGVyIHdpdGggdHJhbnNmb3JtZWQgbmVzdGVkIGZpbHRlclxuXHRcdFx0XHRcdFx0XHRcdGFGaWx0ZXJzW2ldID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXRoOiBmaWx0ZXJQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IFwiQW55XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXJpYWJsZTogZmlsdGVyLmdldFZhcmlhYmxlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb246IHRyYW5zZm9ybWVkTmVzdGVkRmlsdGVyXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybXMgYSBzaW5nbGUgZmlsdGVyIHZhbHVlIGZvciBEYXRlVGltZU9mZnNldCBwcmVjaXNpb24gcHJvcGVydGllcy5cblx0ICogSGFuZGxlcyBFUSBvcGVyYXRvciBieSBjb252ZXJ0aW5nIHRvIEJUIHJhbmdlLCBhbmQgYWRqdXN0cyBzZWNvbmQgdmFsdWUgZm9yIGFueSBmaWx0ZXIgd2l0aCB0d28gdmFsdWVzLlxuXHQgKiBQcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzOiBwcmVjaXNpb24gMyA9IC45OTksIHByZWNpc2lvbiA3ID0gLjk5OTk5OTkuXG5cdCAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byB0cmFuc2Zvcm1cblx0ICogQHBhcmFtIHByZWNpc2lvbiBUaGUgcHJlY2lzaW9uIGxldmVsIGZvciB0aGUgRGF0ZVRpbWVPZmZzZXQgcHJvcGVydHlcblx0ICogQHJldHVybnMgVHJhbnNmb3JtZWQgZmlsdGVyIHdpdGggbWljcm9zZWNvbmQgcHJlY2lzaW9uIG9yIG51bGwgaWYgbm8gdHJhbnNmb3JtYXRpb24gbmVlZGVkXG5cdCAqL1xuXHRfdHJhbnNmb3JtRGF0ZVRpbWVPZmZTZXRGaWx0ZXJWYWx1ZTogZnVuY3Rpb24gKGZpbHRlcjogRmlsdGVyLCBwcmVjaXNpb246IG51bWJlcik6IEZpbHRlciB8IG51bGwge1xuXHRcdGNvbnN0IG9wZXJhdG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBmaWx0ZXIuZ2V0T3BlcmF0b3IoKTtcblx0XHRjb25zdCB2YWx1ZTE6IHVua25vd24gPSBmaWx0ZXIuZ2V0VmFsdWUxKCk7XG5cdFx0Y29uc3QgdmFsdWUyOiB1bmtub3duID0gZmlsdGVyLmdldFZhbHVlMj8uKCk7XG5cblx0XHRpZiAob3BlcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFwiRmlsdGVyVXRpbHMuX3RyYW5zZm9ybURhdGVUaW1lT2Zmc2V0RmlsdGVyczogRmlsdGVyIG9wZXJhdG9yIGlzIHVuZGVmaW5lZCwgc2tpcHBpbmcgZmlsdGVyIHRyYW5zZm9ybWF0aW9uXCIsXG5cdFx0XHRcdGBmaWx0ZXJQYXRoOiAke2ZpbHRlci5nZXRQYXRoKCl9LCBmaWx0ZXJWYWx1ZTE6ICR7dmFsdWUxfWBcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBPbmx5IHByb2Nlc3MgZmlsdGVycyB3aXRoIHZhbGlkIGZpcnN0IHZhbHVlXG5cdFx0aWYgKHZhbHVlMSA9PT0gbnVsbCB8fCB2YWx1ZTEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3JpZ2luYWxWYWx1ZTE6IHN0cmluZyA9IHZhbHVlMSBhcyBzdHJpbmc7XG5cblx0XHQvLyBQYXJzZSBkYXRldGltZTogMjAyNS0wOC0xM1QxNToxOToxNS4wMDAwMDAwKzAyOjAwIG9yIFpcblx0XHRjb25zdCBkYXRlVGltZU1hdGNoMTogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBvcmlnaW5hbFZhbHVlMS5tYXRjaChcblx0XHRcdC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KSg/OlxcLihcXGR7MCw3fSkpPyhbKy1dXFxkezJ9OlxcZHsyfXxaKSQvXG5cdFx0KTtcblxuXHRcdGlmICghZGF0ZVRpbWVNYXRjaDEpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGVUaW1lUGFydDE6IHN0cmluZyA9IGRhdGVUaW1lTWF0Y2gxWzFdO1xuXHRcdGNvbnN0IHRpbWV6b25lMTogc3RyaW5nID0gZGF0ZVRpbWVNYXRjaDFbM107XG5cblx0XHQvLyBHZW5lcmF0ZSBwcmVjaXNpb24tYmFzZWQgZGVjaW1hbCBzdWZmaXggKGUuZy4sIC45OTkgZm9yIHByZWNpc2lvbiAzLCAuOTk5OTk5OSBmb3IgcHJlY2lzaW9uIDcpXG5cdFx0Y29uc3QgbWF4RGVjaW1hbFZhbHVlOiBzdHJpbmcgPSBcIjlcIi5yZXBlYXQocHJlY2lzaW9uKTtcblxuXHRcdC8vIEhhbmRsZSBFUSBvcGVyYXRvciAtIGNvbnZlcnQgdG8gQlQgd2l0aCBmdWxsIHByZWNpc2lvbiByYW5nZVxuXHRcdGlmIChvcGVyYXRvciA9PT0gXCJFUVwiKSB7XG5cdFx0XHRjb25zdCBzdGFydFZhbHVlID0gYCR7ZGF0ZVRpbWVQYXJ0MX0uJHtcIjBcIi5yZXBlYXQocHJlY2lzaW9uKX0ke3RpbWV6b25lMX1gO1xuXHRcdFx0Y29uc3QgZW5kVmFsdWUgPSBgJHtkYXRlVGltZVBhcnQxfS4ke21heERlY2ltYWxWYWx1ZX0ke3RpbWV6b25lMX1gO1xuXG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IGZpbHRlci5nZXRQYXRoKCksXG5cdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCxcblx0XHRcdFx0dmFsdWUxOiBzdGFydFZhbHVlLFxuXHRcdFx0XHR2YWx1ZTI6IGVuZFZhbHVlXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBGb3IgYW55IG9wZXJhdG9yIHdpdGggdHdvIHZhbHVlcywgYWRqdXN0IHRoZSBzZWNvbmQgdmFsdWUgdG8gbWF4IHByZWNpc2lvblxuXHRcdGlmICh2YWx1ZTIgIT09IG51bGwgJiYgdmFsdWUyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG9yaWdpbmFsVmFsdWUyOiBzdHJpbmcgPSB2YWx1ZTIgYXMgc3RyaW5nO1xuXHRcdFx0Y29uc3QgZGF0ZVRpbWVNYXRjaDI6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsID0gb3JpZ2luYWxWYWx1ZTIubWF0Y2goXG5cdFx0XHRcdC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KSg/OlxcLihcXGR7MCw3fSkpPyhbKy1dXFxkezJ9OlxcZHsyfXxaKSQvXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIWRhdGVUaW1lTWF0Y2gyKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkYXRlVGltZVBhcnQyOiBzdHJpbmcgPSBkYXRlVGltZU1hdGNoMlsxXTtcblx0XHRcdGNvbnN0IHRpbWV6b25lMjogc3RyaW5nID0gZGF0ZVRpbWVNYXRjaDJbM107XG5cblx0XHRcdC8vIEtlZXAgZmlyc3QgdmFsdWUgdW5jaGFuZ2VkLCBtb2RpZnkgc2Vjb25kIHZhbHVlIHRvIG1heCBwcmVjaXNpb25cblx0XHRcdGNvbnN0IGFkanVzdGVkVmFsdWUyID0gYCR7ZGF0ZVRpbWVQYXJ0Mn0uJHttYXhEZWNpbWFsVmFsdWV9JHt0aW1lem9uZTJ9YDtcblxuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBmaWx0ZXIuZ2V0UGF0aCgpLFxuXHRcdFx0XHRvcGVyYXRvcjogZmlsdGVyLmdldE9wZXJhdG9yKCksXG5cdFx0XHRcdHZhbHVlMTogb3JpZ2luYWxWYWx1ZTEsIC8vIEtlZXAgb3JpZ2luYWwgZmlyc3QgdmFsdWUgdW5jaGFuZ2VkXG5cdFx0XHRcdHZhbHVlMjogYWRqdXN0ZWRWYWx1ZTIgLy8gVHJhbnNmb3JtIHNlY29uZCB2YWx1ZSB0byBtYXggcHJlY2lzaW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBObyB0cmFuc2Zvcm1hdGlvbiBuZWVkZWQgZm9yIHNpbmdsZS12YWx1ZSBub24tRVEgb3BlcmF0b3JzXG5cdFx0cmV0dXJuIG51bGw7XG5cdH0sXG5cdGhhc0VkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5OiBmdW5jdGlvbiAoZmlsdGVyczogRmlsdGVyW10pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmlsdGVycy5zb21lKChmaWx0ZXIpOiBib29sZWFuID0+IHtcblx0XHRcdGlmIChmaWx0ZXIuZ2V0UGF0aCgpID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyLmdldEZpbHRlcnMoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhc0VkaXRTdGF0ZUZpbHRlclJlY3Vyc2l2ZWx5KGZpbHRlci5nZXRGaWx0ZXJzKCkhKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblx0ZXhjaGFuZ2VFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseTogZnVuY3Rpb24gKGVkaXRTdGF0ZUZpbHRlcjogRmlsdGVyLCBmaWx0ZXJzOiBGaWx0ZXJbXSk6IEZpbHRlcltdIHtcblx0XHRyZXR1cm4gZmlsdGVycy5tYXAoKGZpbHRlcik6IEZpbHRlciA9PiB7XG5cdFx0XHRpZiAoZmlsdGVyLmdldFBhdGgoKSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGVkaXRTdGF0ZUZpbHRlcjtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyLmdldEZpbHRlcnMoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGZpbHRlciA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdGZpbHRlcnM6IHRoaXMuZXhjaGFuZ2VFZGl0U3RhdGVGaWx0ZXJSZWN1cnNpdmVseShlZGl0U3RhdGVGaWx0ZXIsIGZpbHRlci5nZXRGaWx0ZXJzKCkhKSxcblx0XHRcdFx0XHRhbmQ6IGZpbHRlci5pc0FuZCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpbHRlcjtcblx0XHR9KTtcblx0fSxcblx0c2V0VHlwZUNvbmZpZ1RvUHJvcGVydGllczogZnVuY3Rpb24gKGFQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9wZXJ0eUluZm9bXSB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhUHJvcGVydGllcyAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG9JRmlsdGVyUHJvcGVydHk6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnICYmXG5cdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnLnR5cGVJbnN0YW5jZSAmJlxuXHRcdFx0XHRcdChvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcudHlwZUluc3RhbmNlIGFzIHsgZ2V0Q29uc3RyYWludHM/OiBGdW5jdGlvbiB9KS5nZXRDb25zdHJhaW50cyBpbnN0YW5jZW9mIEZ1bmN0aW9uXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0lGaWx0ZXJQcm9wZXJ0eS5wYXRoID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRcdG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiLCB7fSwge30pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9JRmlsdGVyUHJvcGVydHkucGF0aCA9PT0gXCIkc2VhcmNoXCIpIHtcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiwge30sIHt9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChvSUZpbHRlclByb3BlcnR5LmRhdGFUeXBlIHx8IChvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgJiYgb0lGaWx0ZXJQcm9wZXJ0eS50eXBlQ29uZmlnLmNsYXNzTmFtZSkpIHtcblx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0XHRvSUZpbHRlclByb3BlcnR5LmRhdGFUeXBlIHx8IG9JRmlsdGVyUHJvcGVydHkudHlwZUNvbmZpZz8uY2xhc3NOYW1lLFxuXHRcdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0b0lGaWx0ZXJQcm9wZXJ0eS5jb25zdHJhaW50c1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BlcnRpZXM7XG5cdH0sXG5cdGdldE5vdEFwcGxpY2FibGVGaWx0ZXJzOiBmdW5jdGlvbiAob0ZpbHRlckJhcjogRmlsdGVyQmFyLCBvQ29udHJvbDogQ29udHJvbCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBzVGFyZ2V0RW50aXR5VHlwZVBhdGggPSBvQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdG9GaWx0ZXJCYXJFbnRpdHlQYXRoID0gb0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvRmlsdGVyQmFyLmdldE1vZGVsKCkhLmdldE1ldGFNb2RlbCgpISxcblx0XHRcdG9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KG9GaWx0ZXJCYXJFbnRpdHlQYXRoKSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRtQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpLFxuXHRcdFx0YklzRmlsdGVyQmFyRW50aXR5VHlwZSA9IHNUYXJnZXRFbnRpdHlUeXBlUGF0aCA9PT0gb0ZpbHRlckJhckVudGl0eVBhdGgsXG5cdFx0XHRiSXNDaGFydCA9IG9Db250cm9sLmlzQTxDaGFydD4oXCJzYXAudWkubWRjLkNoYXJ0XCIpLFxuXHRcdFx0YklzQW5hbHl0aWNhbFRhYmxlID0gIWJJc0NoYXJ0ICYmIChvQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0YklzVHJlZVRhYmxlID0gIWJJc0NoYXJ0ICYmIChvQ29udHJvbC5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0YkVuYWJsZVNlYXJjaCA9IGJJc0NoYXJ0XG5cdFx0XHRcdD8gKENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob0NvbnRyb2wsIFwiYXBwbHlTdXBwb3J0ZWRcIikpIGFzIHsgZW5hYmxlU2VhcmNoPzogYm9vbGVhbiB9KVxuXHRcdFx0XHRcdFx0LmVuYWJsZVNlYXJjaFxuXHRcdFx0XHQ6ICEoYklzQW5hbHl0aWNhbFRhYmxlIHx8IGJJc1RyZWVUYWJsZSkgfHwgKG9Db250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRUYWJsZURlZmluaXRpb24oKS5lbmFibGVCYXNpY1NlYXJjaDtcblxuXHRcdGlmIChtQ29uZGl0aW9ucyAmJiAoIWJJc0ZpbHRlckJhckVudGl0eVR5cGUgfHwgYklzQW5hbHl0aWNhbFRhYmxlIHx8IGJJc0NoYXJ0IHx8IGJJc1RyZWVUYWJsZSkpIHtcblx0XHRcdC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIG9uIHByb3BlcnR5IExldmVsIGlmIGVudGl0eSBzZXRzIGFyZSBpZGVudGljYWxcblx0XHRcdGNvbnN0IGFUYXJnZXRQcm9wZXJ0aWVzID0gYklzRmlsdGVyQmFyRW50aXR5VHlwZVxuXHRcdFx0XHRcdD8gW11cblx0XHRcdFx0XHQ6IChvRmlsdGVyQmFyXG5cdFx0XHRcdFx0XHRcdC5nZXRDb250cm9sRGVsZWdhdGUoKVxuXHRcdFx0XHRcdFx0XHQuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHNUYXJnZXRFbnRpdHlUeXBlUGF0aCwgb01ldGFNb2RlbCwgb0ZpbHRlckJhcikgYXMgUHJvcGVydHlJbmZvW10pLFxuXHRcdFx0XHRtVGFyZ2V0UHJvcGVydGllcyA9IGFUYXJnZXRQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAobVByb3A6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlJbmZvIH0sIG9Qcm9wOiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0XHRtUHJvcFtvUHJvcC5uYW1lXSA9IG9Qcm9wO1xuXHRcdFx0XHRcdHJldHVybiBtUHJvcDtcblx0XHRcdFx0fSwge30pLFxuXHRcdFx0XHRtQWdncmVnYXRlZFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRjb25zdCBjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9Db250cm9sXG5cdFx0XHRcdC5nZXRNb2RlbCgpIVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKCkhXG5cdFx0XHRcdC5nZXRPYmplY3Qob0NvbnRyb2wuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpICsgXCIvXCIpO1xuXHRcdFx0aWYgKG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb0NvbnRyb2xcblx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpIVxuXHRcdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpIVxuXHRcdFx0XHRcdFx0LmdldE9iamVjdChgJHtvQ29udHJvbC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9QGApLFxuXHRcdFx0XHRcdG1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMgPSBnZXRBbGxDdXN0b21BZ2dyZWdhdGVzKG9FbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1DaGFydEN1c3RvbUFnZ3JlZ2F0ZXMpLmZvckVhY2goZnVuY3Rpb24gKHNBZ2dyZWdhdGVOYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoIW1BZ2dyZWdhdGVkUHJvcGVydGllc1tzQWdncmVnYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9BZ2dyZWdhdGUgPSBtQ2hhcnRDdXN0b21BZ2dyZWdhdGVzW3NBZ2dyZWdhdGVOYW1lXTtcblx0XHRcdFx0XHRcdG1BZ2dyZWdhdGVkUHJvcGVydGllc1tzQWdncmVnYXRlTmFtZV0gPSBvQWdncmVnYXRlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3Qgc1Byb3BlcnR5IGluIG1Db25kaXRpb25zKSB7XG5cdFx0XHRcdC8vIE5lZWQgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiBtQ29uZGl0aW9uc1tzUHJvcGVydHldIHNpbmNlIHByZXZpb3VzIGZpbHRlcmVkIHByb3BlcnRpZXMgYXJlIGtlcHQgaW50byBtQ29uZGl0aW9ucyB3aXRoIGVtcHR5IGFycmF5IGFzIGRlZmluaXRpb25cblx0XHRcdFx0Y29uc3QgYUNvbmRpdGlvblByb3BlcnR5ID0gbUNvbmRpdGlvbnNbc1Byb3BlcnR5XTtcblx0XHRcdFx0bGV0IHR5cGVDaGVjayA9IHRydWU7XG5cdFx0XHRcdGlmIChjaGFydEVudGl0eVR5cGVBbm5vdGF0aW9uc1tzUHJvcGVydHldICYmIG9GaWx0ZXJCYXJFbnRpdHlTZXRBbm5vdGF0aW9uc1tzUHJvcGVydHldKSB7XG5cdFx0XHRcdFx0dHlwZUNoZWNrID0gY2hhcnRFbnRpdHlUeXBlQW5ub3RhdGlvbnNbc1Byb3BlcnR5XVtcIiRUeXBlXCJdID09PSBvRmlsdGVyQmFyRW50aXR5U2V0QW5ub3RhdGlvbnNbc1Byb3BlcnR5XVtcIiRUeXBlXCJdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRBcnJheS5pc0FycmF5KGFDb25kaXRpb25Qcm9wZXJ0eSkgJiZcblx0XHRcdFx0XHRhQ29uZGl0aW9uUHJvcGVydHkubGVuZ3RoID4gMCAmJiAvL2hhcyBhIGZpbHRlciB2YWx1ZVxuXHRcdFx0XHRcdCgoKCFtVGFyZ2V0UHJvcGVydGllc1tzUHJvcGVydHldIHx8IC8vIG5vIHRhcmdldCBwcm9wZXJ0eSBmb3VuZCBieSBwcm9wZXJ0eSBuYW1lXG5cdFx0XHRcdFx0XHQobVRhcmdldFByb3BlcnRpZXNbc1Byb3BlcnR5XS5pc0N1c3RvbUZpbHRlciAmJiBtVGFyZ2V0UHJvcGVydGllc1tzUHJvcGVydHldLmFubm90YXRpb25QYXRoID09IHVuZGVmaW5lZCkgfHwgLy8gY3VzdG9tIGZpbHRlciB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IGVudGl0eVNldFxuXHRcdFx0XHRcdFx0KG1UYXJnZXRQcm9wZXJ0aWVzW3NQcm9wZXJ0eV0gJiYgIXR5cGVDaGVjaykpICYmXG5cdFx0XHRcdFx0XHQoIWJJc0ZpbHRlckJhckVudGl0eVR5cGUgfHwgKHNQcm9wZXJ0eSA9PT0gXCIkZWRpdFN0YXRlXCIgJiYgKGJJc0NoYXJ0IHx8IGJJc1RyZWVUYWJsZSB8fCBiSXNBbmFseXRpY2FsVGFibGUpKSkpIHx8IC8vdHlwZSBkb2VzIG5vdCBtYXRjaCBPUiAkZWRpdFN0YXRlIG9uIHNlY29uZGFyeSBlbnRpdHkgc2V0XG5cdFx0XHRcdFx0XHRtQWdncmVnYXRlZFByb3BlcnRpZXNbc1Byb3BlcnR5XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChzUHJvcGVydHkucmVwbGFjZSgvWyt8Kl0vZywgXCJcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYkVuYWJsZVNlYXJjaCAmJiBvRmlsdGVyQmFyLmdldFNlYXJjaCgpKSB7XG5cdFx0XHRhTm90QXBwbGljYWJsZS5wdXNoKFwiJHNlYXJjaFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFOb3RBcHBsaWNhYmxlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uIG9mIGEgcHJvcGVydHkgYXMgZGVmaW5lZCBmb3IgYSBnaXZlbiBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRvIGdldCB0aGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvbiBmb3Jcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgcHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBsaXN0IGluZm9ybWF0aW9uIGZvclxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgbGlzdCBpbmZvcm1hdGlvblxuXHQgKi9cblx0YXN5bmMgX2dldFZhbHVlTGlzdEluZm8oZmlsdGVyQmFyOiBGaWx0ZXJCYXIsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxBbm5vdGF0aW9uVmFsdWVMaXN0VHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGZpbHRlckJhci5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRcdGlmICghbWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBmaWx0ZXJCYXIuZGF0YShcImVudGl0eVR5cGVcIikgPz8gXCJcIjtcblx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvcyA9IGF3YWl0IG1ldGFNb2RlbC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhlbnRpdHlUeXBlICsgcHJvcGVydHlOYW1lLCB0cnVlKS5jYXRjaCgoKSA9PiBudWxsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0SW5mb3M/LltcIlwiXTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgdmFsdWUgbGlzdCBvZiBhbGwgdGhlIGZpbHRlciBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIEluc3RhbmNlIG9mIEZpbHRlckJhclxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBmaWx0ZXIgcHJvcGVydGllcyBmb3IgRmlsdGVyQmFyXG5cdCAqL1xuXHRnZXRGaWx0ZXJQcm9wZXJ0eUluZm8oZmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCk6IFByb3BlcnR5SW5mb1tdIHtcblx0XHRsZXQgX3Byb3BlcnR5SW5mbyA9IGZpbHRlckJhci5kYXRhKFwiZmVGaWx0ZXJJbmZvXCIpO1xuXHRcdGlmICh0eXBlb2YgX3Byb3BlcnR5SW5mbyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0X3Byb3BlcnR5SW5mbyA9IEpTT04ucGFyc2UoX3Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHRcdHJldHVybiBfcHJvcGVydHlJbmZvIHx8IFtdO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB7QGxpbmsgQ29uZGl0aW9uVmFsaWRhdGVkfSBzdGF0ZSBmb3IgYSBzaW5nbGUgdmFsdWUuIFRoaXMgZGVjaWRlcyB3aGV0aGVyIHRoZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIGEgc2VsZWN0ZWQgdmFsdWVcblx0ICogaW4gYSB2YWx1ZSBoZWxwLCBtZWFuaW5nIHRoYXQgaXRzIGRlc2NyaXB0aW9uIGlzIGxvYWRlZCBhbmQgZGlzcGxheWVkIGlmIGV4aXN0aW5nLCBvciB3aGV0aGVyIGl0IGlzIGRpc3BsYXllZCBhcyBhXG5cdCAqIGNvbmRpdGlvbiAoZS5nLiBcIj0xXCIpLlxuXHQgKlxuXHQgKiBWYWx1ZXMgZm9yIHByb3BlcnRpZXMgd2l0aG91dCB2YWx1ZSBsaXN0IGluZm8gYXJlIGFsd2F5cyB0cmVhdGVkIGFzIHtAbGluayBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkfS5cblx0ICogQHBhcmFtIHZhbHVlTGlzdEluZm8gVGhlIHZhbHVlIGxpc3QgaW5mbyBmcm9tIHRoZSB7QGxpbmsgTWV0YU1vZGVsfVxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHNpbmdsZSB2YWx1ZSB0byBnZXQgdGhlIHN0YXRlIGZvclxuXHQgKiBAcmV0dXJucyBUaGUge0BsaW5rIENvbmRpdGlvblZhbGlkYXRlZH0gc3RhdGUgZm9yIHRoZSB2YWx1ZVxuXHQgKi9cblx0X2dldENvbmRpdGlvblZhbGlkYXRlZDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlIHwgdW5kZWZpbmVkLFxuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuXHQpOiBQcm9taXNlPENvbmRpdGlvblZhbGlkYXRlZD4ge1xuXHRcdGlmICghdmFsdWVMaXN0SW5mbykge1xuXHRcdFx0cmV0dXJuIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWQ7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnRpZXMgPSB2YWx1ZUxpc3RJbmZvLlBhcmFtZXRlcnMuZmlsdGVyKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdFtDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQudmFsdWVPZigpLCBDb21tb25Bbm5vdGF0aW9uVHlwZXMuVmFsdWVMaXN0UGFyYW1ldGVyT3V0LnZhbHVlT2YoKV0uaW5jbHVkZXMoXG5cdFx0XHRcdFx0cGFyYW1ldGVyLiRUeXBlXG5cdFx0XHRcdClcblx0XHRcdClcblx0XHRcdFx0LmZpbHRlcigocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5TmFtZSlcblx0XHRcdFx0Lm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkpO1xuXG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eVBhdGggPSB2YWx1ZUxpc3RQcm9wZXJ0aWVzWzBdID8/IHByb3BlcnR5TmFtZTtcblxuXHRcdFx0Y29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IHZhbHVlTGlzdFByb3BlcnR5UGF0aCxcblx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHR2YWx1ZTE6IHZhbHVlXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZpbHRlciwge1xuXHRcdFx0XHQkc2VsZWN0OiB2YWx1ZUxpc3RQcm9wZXJ0eVBhdGhcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCB2YWx1ZUV4aXN0cyA9IChhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoKSkubGVuZ3RoID4gMDtcblx0XHRcdGlmICh2YWx1ZUV4aXN0cykge1xuXHRcdFx0XHRyZXR1cm4gQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBDb25kaXRpb25WYWxpZGF0ZWQuTm90VmFsaWRhdGVkO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGaWx0ZXJVdGlsczogRXJyb3Igd2hpbGUgcmV0cmlldmluZyBDb25kaXRpb25WYWxpZGF0ZWRcIiwgZXJyb3IgYXMgRXJyb3IgfCBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWQ7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQ2xlYXIgdGhlIGZpbHRlciB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICogVGhpcyBpcyBhIHByZXJlcXVpc2l0ZSBiZWZvcmUgbmV3IHZhbHVlcyBjYW4gYmUgc2V0IGNsZWFubHkuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBjb25kaXRpb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIGNvbmRpdGlvbiBwYXRoXG5cdCAqL1xuXHRhc3luYyBfY2xlYXJGaWx0ZXJWYWx1ZShmaWx0ZXJCYXI6IEZpbHRlckJhciwgY29uZGl0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb1N0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdGlmIChvU3RhdGUuZmlsdGVyW2NvbmRpdGlvblBhdGhdKSB7XG5cdFx0XHRvU3RhdGUuZmlsdGVyW2NvbmRpdGlvblBhdGhdLmZvckVhY2goKG9Db25kaXRpb246IENvbmRpdGlvbk9iamVjdCkgPT4ge1xuXHRcdFx0XHRvQ29uZGl0aW9uLmZpbHRlcmVkID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyLCB7IGZpbHRlcjogeyBbY29uZGl0aW9uUGF0aF06IG9TdGF0ZS5maWx0ZXJbY29uZGl0aW9uUGF0aF0gfSB9KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgVGhlIGZpbHRlciBiYXIgdGhhdCBjb250YWlucyB0aGUgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHkgYXMgYSBjb25kaXRpb24gcGF0aFxuXHQgKiBAcGFyYW0gYXJncyBMaXN0IG9mIG9wdGlvbmFsIHBhcmFtZXRlcnNcblx0ICogIFtzT3BlcmF0b3JdIFRoZSBvcGVyYXRvciB0byBiZSB1c2VkIC0gaWYgbm90IHNldCwgdGhlIGRlZmF1bHQgb3BlcmF0b3IgKEVRKSB3aWxsIGJlIHVzZWRcblx0ICogIFt2VmFsdWVzXSBUaGUgdmFsdWVzIHRvIGJlIGFwcGxpZWQgLSBpZiBzT3BlcmF0b3IgaXMgbWlzc2luZywgdlZhbHVlcyBpcyB1c2VkIGFzIDNyZCBwYXJhbWV0ZXJcblx0ICovXG5cdHNldEZpbHRlclZhbHVlczogYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJCYXI6IEZpbHRlckJhciB8IHVuZGVmaW5lZCwgc0NvbmRpdGlvblBhdGg6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5fc2V0RmlsdGVyVmFsdWVzKG9GaWx0ZXJCYXIsIGZhbHNlLCBzQ29uZGl0aW9uUGF0aCwgLi4uYXJncyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKlxuXHQgKiBUaGUgZmlsdGVyIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy5cblx0ICogRWFjaCBmaWx0ZXIgdmFsdWUgbXVzdCBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1pdGl2ZSB2YWx1ZS5cblx0ICogQHBhcmFtIGZpbHRlckJhciBUaGUgZmlsdGVyIGJhciB0aGF0IGNvbnRhaW5zIHRoZSBmaWx0ZXIgZmllbGRcblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHBhcmFtIGFyZ3MgTGlzdCBvZiBvcHRpb25hbCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRhZGRGaWx0ZXJWYWx1ZXM6IGFzeW5jIGZ1bmN0aW9uIChmaWx0ZXJCYXI6IEZpbHRlckJhciB8IHVuZGVmaW5lZCwgY29uZGl0aW9uUGF0aDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCB0aGlzLl9zZXRGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyLCB0cnVlLCBjb25kaXRpb25QYXRoLCAuLi5hcmdzKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHByb3BlcnR5IHBhdGggZnJvbSBjb25kaXRpb24gcGF0aC5cblx0ICpcblx0ICogSXQgcmVtb3ZlcyB0aGUgY29uZGl0aW9uIHBhdGggc3BlY2lmaWMgY2hhcmFjdGVycyBsaWtlIFwiK1wiIGFuZCBcIipcIi5cblx0ICogQHBhcmFtIGNvbmRpdGlvblBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5IGFzIGEgY29uZGl0aW9uIHBhdGhcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IHBhdGggZGVyaXZlZCBmcm9tIHRoZSBjb25kaXRpb24gcGF0aFxuXHQgKi9cblx0Z2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgoY29uZGl0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uUGF0aC5yZXBsYWNlKENPTkRJVElPTl9QQVRIX1RPX1BST1BFUlRZX1BBVEhfUkVHRVgsIFwiXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgbWFpbiBmaWx0ZXIgYmFyIGZvciB0aGUgZ2l2ZW4gcDEzbiBhZGFwdGF0aW9uIGZpbHRlciBjb250cm9sLlxuXHQgKiBAcGFyYW0gcG90ZW50aWFsRmlsdGVyQmFyIEV4cGVjdGVkIGluc3RhbmNlIG9mIEZpbHRlckJhciBvciBBZGFwdGF0aW9uRmlsdGVyQmFyLlxuXHQgKiBAcmV0dXJucyBUaGUgbWFpbiBmaWx0ZXIgYmFyIGluc3RhbmNlIGlmIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RmlsdGVyQmFyRm9yQWRhcHRhdGlvbkNvbnRyb2wocG90ZW50aWFsRmlsdGVyQmFyOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCk6IEZpbHRlckJhciB8IG51bGwge1xuXHRcdHdoaWxlIChwb3RlbnRpYWxGaWx0ZXJCYXIgJiYgIXBvdGVudGlhbEZpbHRlckJhci5pc0E8RmlsdGVyQmFyPihcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRwb3RlbnRpYWxGaWx0ZXJCYXIgPSBwb3RlbnRpYWxGaWx0ZXJCYXIuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXHRcdHJldHVybiBwb3RlbnRpYWxGaWx0ZXJCYXI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aCBmb3IgYSBwcm9wZXJ0eSBpbiB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogVGhpcyBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGZvciBhIHNwZWNpZmljIHByb3BlcnR5IGluIHRoZSBmaWx0ZXIgYmFyLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyIFRoZSBmaWx0ZXIgYmFyIHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgcHJvcGVydHlcblx0ICovXG5cdGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eShmaWx0ZXJCYXI6IEZpbHRlckJhciwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KGZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGZpbHRlckJhci5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRyZXR1cm4gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4oXG5cdFx0XHRtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7ZW50aXR5VHlwZVBhdGh9JHtwcm9wZXJ0eVBhdGh9YCkhLFxuXHRcdFx0bWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2VudGl0eVR5cGVQYXRofWApIVxuXHRcdCk7XG5cdH0sXG5cblx0X3NldEZpbHRlclZhbHVlczogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9GaWx0ZXJCYXI6IEZpbHRlckJhciB8IHVuZGVmaW5lZCxcblx0XHRhcHBlbmQ6IGJvb2xlYW4sXG5cdFx0c0NvbmRpdGlvblBhdGg6IHN0cmluZyxcblx0XHQuLi5hcmdzOiB1bmtub3duW11cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IHNPcGVyYXRvciA9IGFyZ3M/LlswXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IHZWYWx1ZXMgPSBhcmdzPy5bMV0gYXMgdW5kZWZpbmVkIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgbnVtYmVyW10gfCBib29sZWFuW107XG5cblx0XHQvLyBEbyBub3RoaW5nIHdoZW4gdGhlIGZpbHRlciBiYXIgaXMgaGlkZGVuXG5cdFx0aWYgKCFvRmlsdGVyQmFyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2Ugd2FpdCBmb3IgZmlsdGVyIGJhciB0byBiZSByZWFkeS5cblx0XHRpZiAob0ZpbHRlckJhci5pc0E8RkVGaWx0ZXJCYXI+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5GaWx0ZXJCYXJcIikpIHtcblx0XHRcdC8vIF9zZXRGaWx0ZXJWYWx1ZXMgY291bGQgYmUgY2FsbGVkIGluIGNhc2Ugb2YgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyLCBzbyB3ZSBleHBsaWNpdGx5IGNoZWNrIGZvciBGRSBmaWx0ZXIgYmFyIGNvbnRyb2wuXG5cdFx0XHRhd2FpdCBvRmlsdGVyQmFyLndoZW5Jbml0aWFsaXplZCgpO1xuXHRcdH1cblxuXHRcdC8vIGNvbW1vbiBmaWx0ZXIgT3BlcmF0b3JzIG5lZWQgYSB2YWx1ZS4gRG8gbm90aGluZyBpZiB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZFxuXHRcdC8vIEJDUDogMjI3MDEzNTI3NFxuXHRcdGlmIChcblx0XHRcdGFyZ3MubGVuZ3RoID09PSAyICYmXG5cdFx0XHQodlZhbHVlcyA9PT0gdW5kZWZpbmVkIHx8IHZWYWx1ZXMgPT09IG51bGwgfHwgdlZhbHVlcyA9PT0gXCJcIikgJiZcblx0XHRcdHNPcGVyYXRvciAmJlxuXHRcdFx0T2JqZWN0LmtleXMoRmlsdGVyT3BlcmF0b3IpLmluY2x1ZGVzKHNPcGVyYXRvcilcblx0XHQpIHtcblx0XHRcdExvZy53YXJuaW5nKGBBbiBlbXB0eSBmaWx0ZXIgdmFsdWUgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCB0aGUgJHtzT3BlcmF0b3J9IG9wZXJhdG9yYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIDR0aCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWw7IGlmIHNPcGVyYXRvciBpcyBtaXNzaW5nLCB2VmFsdWVzIGlzIHVzZWQgYXMgM3JkIHBhcmFtZXRlclxuXHRcdC8vIFRoaXMgZG9lcyBub3QgYXBwbHkgZm9yIHNlbWFudGljIGRhdGVzLCBhcyB0aGVzZSBkbyBub3QgcmVxdWlyZSB2VmFsdWVzIChleGNlcHRpb246IFwiTEFTVERBWVNcIiwgMylcblx0XHRpZiAodlZhbHVlcyA9PT0gdW5kZWZpbmVkICYmICFTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpLmluY2x1ZGVzKHNPcGVyYXRvciB8fCBcIlwiKSkge1xuXHRcdFx0dlZhbHVlcyA9IHNPcGVyYXRvciA/PyBbXTtcblx0XHRcdHNPcGVyYXRvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBJZiBzT3BlcmF0b3IgaXMgbm90IHNldCwgdXNlIEVRIGFzIGRlZmF1bHRcblx0XHRpZiAoIXNPcGVyYXRvcikge1xuXHRcdFx0c09wZXJhdG9yID0gRmlsdGVyT3BlcmF0b3IuRVE7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydGVkIGFycmF5IHR5cGVzOlxuXHRcdC8vICAtIFNpbmdsZSBWYWx1ZXM6XHRcIjJcIiB8IFtcIjJcIl1cblx0XHQvLyAgLSBNdWx0aXBsZSBWYWx1ZXM6XHRbXCIyXCIsIFwiM1wiXVxuXHRcdC8vICAtIFJhbmdlczpcdFx0XHRbXCIyXCIsXCIzXCJdXG5cdFx0Ly8gVW5zdXBwb3J0ZWQgYXJyYXkgdHlwZXM6XG5cdFx0Ly8gIC0gTXVsdGlwbGUgUmFuZ2VzOlx0W1tcIjJcIixcIjNcIl1dIHwgW1tcIjJcIixcIjNcIl0sW1wiNFwiLFwiNVwiXV1cblx0XHRjb25zdCBzdXBwb3J0ZWRWYWx1ZVR5cGVzID0gW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiXTtcblx0XHRpZiAoXG5cdFx0XHR2VmFsdWVzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCgoIUFycmF5LmlzQXJyYXkodlZhbHVlcykgJiYgIXN1cHBvcnRlZFZhbHVlVHlwZXMuaW5jbHVkZXModHlwZW9mIHZWYWx1ZXMpKSB8fFxuXHRcdFx0XHQoQXJyYXkuaXNBcnJheSh2VmFsdWVzKSAmJiB2VmFsdWVzLmxlbmd0aCA+IDAgJiYgIXN1cHBvcnRlZFZhbHVlVHlwZXMuaW5jbHVkZXModHlwZW9mIHZWYWx1ZXNbMF0pKSlcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJGaWx0ZXJVdGlscy5qcyNfc2V0RmlsdGVyVmFsdWVzOiBGaWx0ZXIgdmFsdWUgbm90IHN1cHBvcnRlZDsgb25seSBwcmltaXRpdmUgdmFsdWVzIG9yIGFuIGFycmF5IHRoZXJlb2YgY2FuIGJlIHVzZWQuXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGxldCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXSB8IHVuZGVmaW5lZDtcblx0XHRpZiAodlZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZWYWx1ZXMpID8gdlZhbHVlcyA6IFt2VmFsdWVzXTtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXI6IHsgW2tleTogc3RyaW5nXTogQ29uZGl0aW9uT2JqZWN0W10gfSA9IHt9O1xuXHRcdGlmIChzQ29uZGl0aW9uUGF0aCkge1xuXHRcdFx0Ly8gV2UgcmVjcmVhdGUgY29uZGl0aW9uUGF0aCB0byBlbnN1cmUgaXQgaXMgaW4gcmlnaHQgZm9ybWF0XG5cdFx0XHQvLyBlLmcuIElmIFwiX0l0ZW0vTWF0ZXJpYWxcIiBpcyBzZW50IGFzIGNvbmRpdGlvbiBwYXRoIHdoZXJlIF9JdGVtIGlzIDE6biBtdWx0aXBsaWNpdHkgLT4gXCJfSXRlbSovTWF0ZXJpYWxcIlxuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gb0ZpbHRlclV0aWxzLmdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoKHNDb25kaXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IG1haW5GaWx0ZXJCYXJDb250cm9sID0gb0ZpbHRlclV0aWxzLmdldEZpbHRlckJhckZvckFkYXB0YXRpb25Db250cm9sKG9GaWx0ZXJCYXIpID8/IG9GaWx0ZXJCYXI7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGggPSBvRmlsdGVyVXRpbHMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KG1haW5GaWx0ZXJCYXJDb250cm9sLCBwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gcHJvcGVydHlUYXJnZXRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Lm5hbWUgPz8gcHJvcGVydHlQYXRoO1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPVxuXHRcdFx0XHQocHJvcGVydHlUYXJnZXRPYmplY3RQYXRoID8gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eVRhcmdldE9iamVjdFBhdGgsIGZhbHNlLCB0cnVlKSA6IHVuZGVmaW5lZCkgPz9cblx0XHRcdFx0c0NvbmRpdGlvblBhdGg7XG5cdFx0XHQvLyBHZXQgdGhlIHZhbHVlIGxpc3QgaW5mbyBvZiB0aGUgcHJvcGVydHkgdG8gbGF0ZXIgY2hlY2sgd2hldGhlciB0aGUgdmFsdWVzIGV4aXN0XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gYXdhaXQgdGhpcy5fZ2V0VmFsdWVMaXN0SW5mbyhtYWluRmlsdGVyQmFyQ29udHJvbCwgcHJvcGVydHlQYXRoKTtcblx0XHRcdGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoc09wZXJhdG9yID09PSBPcGVyYXRvck5hbWUuQlQgfHwgc09wZXJhdG9yID09PSBPcGVyYXRvck5hbWUuTk9UQlQpIHtcblx0XHRcdFx0XHQvLyBUaGUgb3BlcmF0b3IgQlQgYW5kIE5PVEJUIHJlcXVpcmUgb25lIGNvbmRpdGlvbiB3aXRoIGJvdGggdGhyZXNob2xkc1xuXHRcdFx0XHRcdGZpbHRlcltzQ29uZGl0aW9uUGF0aF0gPSBbQ29uZGl0aW9uLmNyZWF0ZUNvbmRpdGlvbihzT3BlcmF0b3IsIHZhbHVlcywgbnVsbCwgbnVsbCwgQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCldO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFJlZ3VsYXIgc2luZ2xlIGFuZCBtdWx0aSB2YWx1ZSBjb25kaXRpb25zLCBpZiB0aGVyZSBhcmUgbm8gdmFsdWVzLCB3ZSBkbyBub3Qgd2FudCBhbnkgY29uZGl0aW9uc1xuXHRcdFx0XHRcdGZpbHRlcltzQ29uZGl0aW9uUGF0aF0gPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdHZhbHVlcy5tYXAoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIEZvciB0aGUgRVEgY2FzZSwgdGVsbCBNREMgdG8gdmFsaWRhdGUgdGhlIHZhbHVlIChlLmcuIGRpc3BsYXkgdGhlIGRlc2NyaXB0aW9uKSwgaWYgaXQgZXhpc3RzIGluIHRoZSBhc3NvY2lhdGVkIGVudGl0eSwgb3RoZXJ3aXNlIG5ldmVyIHZhbGlkYXRlXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNvbmRpdGlvblZhbGlkYXRlZFN0YXR1cyA9XG5cdFx0XHRcdFx0XHRcdFx0c09wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5FUVxuXHRcdFx0XHRcdFx0XHRcdFx0PyBhd2FpdCB0aGlzLl9nZXRDb25kaXRpb25WYWxpZGF0ZWQodmFsdWVMaXN0SW5mbywgcHJvcGVydHlOYW1lLCB2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdDogQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZDtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gQ29uZGl0aW9uLmNyZWF0ZUNvbmRpdGlvbihzT3BlcmF0b3IhLCBbdmFsdWVdLCBudWxsLCBudWxsLCBjb25kaXRpb25WYWxpZGF0ZWRTdGF0dXMpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCkuaW5jbHVkZXMoc09wZXJhdG9yIHx8IFwiXCIpKSB7XG5cdFx0XHRcdC8vIHZWYWx1ZXMgaXMgdW5kZWZpbmVkLCBzbyB0aGUgb3BlcmF0b3IgaXMgYSBzZW1hbnRpYyBkYXRlIHRoYXQgZG9lcyBub3QgbmVlZCB2YWx1ZXMgKHNlZSBhYm92ZSlcblx0XHRcdFx0ZmlsdGVyW3NDb25kaXRpb25QYXRoXSA9IFtDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKHNPcGVyYXRvciwgW10sIG51bGwsIG51bGwsIENvbmRpdGlvblZhbGlkYXRlZC5Ob3RWYWxpZGF0ZWQpXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIWFwcGVuZCkge1xuXHRcdFx0Ly8gQ2xlYXIgdGhlIGN1cnJlbnQgdmFsdWUgYXMgd2UgZG8gbm90IHdhbnQgdG8gYWRkIGZpbHRlciB2YWx1ZXMgYnV0IHJlcGxhY2UgdGhlbVxuXHRcdFx0YXdhaXQgdGhpcy5fY2xlYXJGaWx0ZXJWYWx1ZShvRmlsdGVyQmFyLCBzQ29uZGl0aW9uUGF0aCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpbHRlcltzQ29uZGl0aW9uUGF0aF0pIHtcblx0XHRcdC8vIFRoaXMgaXMgbm90IGNhbGxlZCBpbiB0aGUgcmVzZXQgY2FzZSwgaS5lLiBzZXRGaWx0ZXJWYWx1ZShcIlByb3BlcnR5XCIpXG5cdFx0XHRhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIsIHsgZmlsdGVyIH0pO1xuXHRcdH1cblx0fSxcblx0Y29uZGl0aW9uVG9Nb2RlbFBhdGg6IGZ1bmN0aW9uIChzQ29uZGl0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHQvLyBtYWtlIHRoZSBwYXRoIHVzYWJsZSBhcyBtb2RlbCBwcm9wZXJ0eSwgdGhlcmVmb3JlIHNsYXNoZXMgYmVjb21lIGJhY2tzbGFzaGVzXG5cdFx0cmV0dXJuIHNDb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcLy9nLCBcIlxcXFxcIik7XG5cdH0sXG5cdF9nZXRGaWx0ZXJNZXRhTW9kZWw6IGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogSUZpbHRlckNvbnRyb2wsIG1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsKTogT0RhdGFNZXRhTW9kZWwge1xuXHRcdHJldHVybiBtZXRhTW9kZWwgfHwgKG9GaWx0ZXJDb250cm9sLmdldE1vZGVsKCkhLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0fSxcblx0X2dldEVudGl0eVNldFBhdGg6IGZ1bmN0aW9uIChzRW50aXR5VHlwZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHNFbnRpdHlUeXBlUGF0aCAmJiBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCk7XG5cdH0sXG5cblx0X2dldEZpZWxkc0ZvclRhYmxlOiBmdW5jdGlvbiAob0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sLCBzRW50aXR5VHlwZVBhdGg/OiBzdHJpbmcpOiBUYWJsZVZpc3VhbGl6YXRpb25bXSB7XG5cdFx0Y29uc3QgbHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW107XG5cdFx0LyoqXG5cdFx0ICogR2V0cyBmaWVsZHMgZnJvbVxuXHRcdCAqIFx0LSBkaXJlY3QgZW50aXR5IHByb3BlcnRpZXMsXG5cdFx0ICogXHQtIG5hdmlnYXRlUHJvcGVydGllcyBrZXkgaW4gdGhlIG1hbmlmZXN0IGlmIHRoZXNlIHByb3BlcnRpZXMgYXJlIGtub3duIGJ5IHRoZSBlbnRpdHlcblx0XHQgKiAgLSBhbm5vdGF0aW9uIFwiU2VsZWN0aW9uRmllbGRzXCJcblx0XHQgKi9cblx0XHRpZiAoc0VudGl0eVR5cGVQYXRoKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob0ZpbHRlckNvbnRyb2wpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250cm9scyA9XG5cdFx0XHRcdG9WaWV3ICYmXG5cdFx0XHRcdG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJlxuXHRcdFx0XHQob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fZ2V0Q29udHJvbHMgJiZcblx0XHRcdFx0KG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX2dldENvbnRyb2xzKFwidGFibGVcIik7XG5cdFx0XHRpZiAodGFibGVDb250cm9scykge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogQ29udHJvbCkge1xuXHRcdFx0XHRcdGxyVGFibGVzLnB1c2goKG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsclRhYmxlcztcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9LFxuXHRfZ2V0U2VsZWN0aW9uRmllbGRzOiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sLFxuXHRcdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNGaWx0ZXJFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRcdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdG9Db252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRcdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXIsXG5cdFx0bGluZUl0ZW1UZXJtPzogc3RyaW5nLFxuXHRcdGFubm90YXRpb25QYXRoPzogc3RyaW5nLFxuXHRcdHByb3BlcnR5SW5mb3NGcm9tRmlsdGVyQmFyPzogUHJvcGVydHlJbmZvW11cblx0KTogRmlsdGVyRmllbGRbXSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGRzID0gRmlsdGVyQmFyQ29udmVydGVyLmdldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bHJUYWJsZXMsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRsaW5lSXRlbVRlcm1cblx0XHQpO1xuXHRcdGxldCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBmaWx0ZXJGaWVsZHMuc2VsZWN0aW9uRmllbGRzO1xuXHRcdGxldCBwcm9wZXJ0eUluZm9zOiBQcm9wZXJ0eUluZm9bXTtcblx0XHQvL0R1cmluZyB0ZW1wbGF0aW5nIHRpbWUgd2hpbGUgYWRkaW5nIGEgZmxleCBjaGFuZ2UgcHJvcGVydHlJbmZvc0Zyb21GaWx0ZXJCYXIgd2lsbCBiZSBwYXNzZWRcblx0XHRpZiAocHJvcGVydHlJbmZvc0Zyb21GaWx0ZXJCYXIgJiYgcHJvcGVydHlJbmZvc0Zyb21GaWx0ZXJCYXIubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydHlJbmZvcyA9IHByb3BlcnR5SW5mb3NGcm9tRmlsdGVyQmFyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wZXJ0eUluZm9zID0gKG9GaWx0ZXJDb250cm9sIGFzIFBhcnRpYWw8SUZpbHRlckNvbnRyb2w+KS5kYXRhXG5cdFx0XHRcdD8gdGhpcy5nZXRGaWx0ZXJQcm9wZXJ0eUluZm8ob0ZpbHRlckNvbnRyb2wpXG5cdFx0XHRcdDogSlNPTi5wYXJzZShmaWx0ZXJGaWVsZHMuc1Byb3BlcnR5SW5mby5yZXBsYWNlKC9cXFxcXFx7L2csIFwie1wiKS5yZXBsYWNlKC9cXFxcXFx9L2csIFwifVwiKSk7IC8vIHByb3BlcnR5SW5mbyBzdHJpbmcgaXMgcmV0dXJuZWQgZnJvbSB0aGUgZ2V0U2VsZWN0aW9uRmllbGRzXG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdChvTW9kaWZpZXJcblx0XHRcdFx0PyBvTW9kaWZpZXIuZ2V0Q29udHJvbFR5cGUob0ZpbHRlckNvbnRyb2wpID09PSBcInNhcC51aS5tZGMuRmlsdGVyQmFyXCJcblx0XHRcdFx0OiBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkgJiZcblx0XHRcdHNFbnRpdHlUeXBlUGF0aCAhPT0gc0ZpbHRlckVudGl0eVR5cGVQYXRoXG5cdFx0KSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFdlIGFyZSBpbiBhIG11bHRpLWVudGl0eSBzZXQgc2NlbmFyaW8gc28gd2UgYWRkIGFubm90YXRpb24gXCJTZWxlY3Rpb25GaWVsZHNcIlxuXHRcdFx0ICogZnJvbSBGaWx0ZXJCYXIgZW50aXR5IGlmIHRoZXNlIHByb3BlcnRpZXMgYXJlIGtub3duIGJ5IHRoZSBlbnRpdHlcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgb1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoKSEpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb0NvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihzRmlsdGVyRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0Y29uc3QgYUZpbHRlckJhclNlbGVjdGlvbkZpZWxkc0Fubm90YXRpb246IFNlbGVjdGlvbkZpZWxkcyA9XG5cdFx0XHRcdG9QYWdlQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxTZWxlY3Rpb25GaWVsZHM+KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKS5hbm5vdGF0aW9uIHx8XG5cdFx0XHRcdChbXSBhcyB1bmtub3duIGFzIFNlbGVjdGlvbkZpZWxkcyk7XG5cdFx0XHRjb25zdCBtYXBTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGlvbkZpZWxkOiBGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRtYXBTZWxlY3Rpb25GaWVsZHNbb1NlbGVjdGlvbkZpZWxkLmNvbmRpdGlvblBhdGhdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRzQW5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uOiBQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc1BhdGggPSBvRmlsdGVyQmFyU2VsZWN0aW9uRmllbGRBbm5vdGF0aW9uLnZhbHVlO1xuXHRcdFx0XHRpZiAoIW1hcFNlbGVjdGlvbkZpZWxkc1tzUGF0aF0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBGaWx0ZXJCYXJDb252ZXJ0ZXIuZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHRzUGF0aCxcblx0XHRcdFx0XHRcdG9Db252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChvRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKG9GaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkcykge1xuXHRcdFx0Y29uc3QgZmllbGROYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRcdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdGZpZWxkTmFtZXMucHVzaChvRmllbGQua2V5KTtcblx0XHRcdH0pO1xuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0gdGhpcy5fZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3MoZmllbGROYW1lcywgc2VsZWN0aW9uRmllbGRzLCBwcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyB0aGUgcHJvcGVydGllcyBmcm9tIHByb3BlcnR5SW5mb3MgZm9yIHRoZSBmaWx0ZXIgZmllbGQuXG5cdCAqIEBwYXJhbSBmaWVsZE5hbWVzIFRoZSBuYW1lcyBvZiBmaWVsZHMgcHJlc2VudCBpbiB0aGUgc2VsZWN0aW9uRmllbGQgYXJyYXkuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25GaWVsZHMgU2VsZWN0aW9uIGZpZWxkIGFycmF5IG9mIGFsbCB0aGUgcG9zc2libGUgZmllbGRzIHRoYXQgY2FuIGJlIGluIHRoZSBzZWxlY3Rpb24gZmllbGQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gUHJvcGVydHlJbmZvcyBmaWx0ZXJzIHRoYXQgYXJlIGF2YWlsYWJsZSBvciBwcmVzZW50IGluIHNlbGVjdGlvbiBmaWVsZCBhbm5vdGF0aW9uLlxuXHQgKiBAcmV0dXJucyBGaWx0ZXJGaWVsZCBhcnJheSBvZiBhbGwgdGhlIHBvc3NpYmxlIGZpbHRlciBmaWVsZHMgYWZ0ZXIgYWRkaW5nIHByb3BlcnRpZXMgZnJvbSBwcm9wZXJ0eUluZm9zXG5cdCAqL1xuXHRfZ2V0U2VsZWN0aW9uRmllbGRzRnJvbVByb3BlcnR5SW5mb3M6IGZ1bmN0aW9uIChcblx0XHRmaWVsZE5hbWVzOiBzdHJpbmdbXSxcblx0XHRzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdFx0cHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm9bXVxuXHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0XHRwcm9wZXJ0eUluZm8uZm9yRWFjaChmdW5jdGlvbiAob1Byb3A6IFByb3BlcnR5SW5mbykge1xuXHRcdFx0aWYgKG9Qcm9wLm5hbWUgPT09IFwiJHNlYXJjaFwiIHx8IG9Qcm9wLm5hbWUgPT09IFwiJGVkaXRTdGF0ZVwiIHx8IG9Qcm9wLmtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbZmllbGROYW1lcy5pbmRleE9mKG9Qcm9wLmtleSldO1xuXHRcdFx0aWYgKGZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRvUHJvcC5ncm91cCA9IHNlbEZpZWxkLmdyb3VwO1xuXHRcdFx0XHRvUHJvcC5ncm91cExhYmVsID0gc2VsRmllbGQuZ3JvdXBMYWJlbDtcblx0XHRcdFx0b1Byb3Auc2V0dGluZ3MgPSBzZWxGaWVsZC5zZXR0aW5ncztcblx0XHRcdFx0b1Byb3AudmlzdWFsRmlsdGVyID0gc2VsRmllbGQudmlzdWFsRmlsdGVyO1xuXHRcdFx0XHRvUHJvcC5sYWJlbCA9IG9Qcm9wLmxhYmVsID8gb1Byb3AubGFiZWwgOiBzZWxGaWVsZC5sYWJlbDsgLy8gaWYgYSBsYWJlbCBpcyBjb21pbmcgZm9yIHRoZSBtYW5pZmVzdCB3ZSBuZWVkIHRvIHRha2UgdGhhdCBhcyBwcmlvcml0eS5cblx0XHRcdFx0b1Byb3AuYW5ub3RhdGlvblBhdGggPSBvUHJvcC5hbm5vdGF0aW9uUGF0aCA/PyBzZWxGaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzW2ZpZWxkTmFtZXMuaW5kZXhPZihvUHJvcC5rZXkpXSA9IG9Qcm9wIGFzIEZpbHRlckZpZWxkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWZpZWxkTmFtZXMuaW5jbHVkZXMob1Byb3Aua2V5KSAmJiAhb1Byb3AuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2gob1Byb3AgYXMgRmlsdGVyRmllbGQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdH0sXG5cdF9nZXRTZWFyY2hGaWVsZDogZnVuY3Rpb24gKG9JRmlsdGVyOiBQYXJ0aWFsPElGaWx0ZXJDb250cm9sPiwgYUlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIG9JRmlsdGVyLmdldFNlYXJjaCAmJiAhYUlnbm9yZVByb3BlcnRpZXMuaW5jbHVkZXMoXCJzZWFyY2hcIikgPyBvSUZpbHRlci5nZXRTZWFyY2goKSA6IG51bGw7XG5cdH0sXG5cdF9nZXRGaWx0ZXJDb25kaXRpb25zOiBmdW5jdGlvbiAoXG5cdFx0bVByb3BlcnRpZXM6IHsgaWdub3JlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTsgcHJvcGVydGllc01ldGFkYXRhPzogUHJvcGVydHlJbmZvW107IHRhcmdldENvbnRyb2w/OiBDb250cm9sIH0gfCB1bmRlZmluZWQsXG5cdFx0bUZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbmRpdGlvbk9iamVjdFtdPixcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUmVjb3JkPHN0cmluZywgQ29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IG1GaWx0ZXJDb25kaXRpb25zIHx8IG9JRmlsdGVyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAobVByb3BlcnRpZXMgJiYgbVByb3BlcnRpZXMudGFyZ2V0Q29udHJvbCAmJiBtUHJvcGVydGllcy50YXJnZXRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdE9iamVjdC5rZXlzKG1Db25kaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG1Db25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQ29uZGl0aW9ucztcblx0fSxcblx0X2dldEZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogZnVuY3Rpb24gKFxuXHRcdGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE6IFByb3BlcnR5SW5mb1tdIHwgbnVsbCxcblx0XHRvSUZpbHRlcjogSUZpbHRlckNvbnRyb2xcblx0KTogUHJvcGVydHlJbmZvW10gfCBudWxsIHtcblx0XHRpZiAoIShhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhICYmIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGEubGVuZ3RoKSkge1xuXHRcdFx0aWYgKG9JRmlsdGVyLmdldFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gb0lGaWx0ZXIuZ2V0UHJvcGVydHlJbmZvKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhRmlsdGVyUHJvcGVydGllc01ldGFkYXRhID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFGaWx0ZXJQcm9wZXJ0aWVzTWV0YWRhdGE7XG5cdH0sXG5cdF9nZXRJZ25vcmVkUHJvcGVydGllczogZnVuY3Rpb24gKGZpbHRlclByb3BlcnRpZXNNZXRhZGF0YTogUHJvcGVydHlJbmZvW10sIGVudGl0eVByb3BlcnRpZXM6IFByb3BlcnR5SW5mb1tdKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IGlnbm9yZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0ZmlsdGVyUHJvcGVydGllc01ldGFkYXRhLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlclByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eU5hbWUgPSBmaWx0ZXJQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZW50aXR5UHJvcGVydGllc0N1cnJlbnQgPSBlbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5Lm5hbWUgPT09IGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eVByb3BlcnRpZXNDdXJyZW50ICYmXG5cdFx0XHRcdCgoIWZpbHRlclByb3BlcnR5LmlzQ3VzdG9tRmlsdGVyICYmIGZpbHRlclByb3BlcnR5LmRhdGFUeXBlICE9PSBlbnRpdHlQcm9wZXJ0aWVzQ3VycmVudC5kYXRhVHlwZSkgfHxcblx0XHRcdFx0XHQvLyBjdXN0b20gZmlsdGVycyB3aWxsIGhhdmUgYW4gYW5ub3RhdGlvbiBwYXRoIGFwcGxpZWQgaW4gdGhlIGNvbnZlcnRlciB3aGVuIHRoZXJlIGlzIGEgbWF0Y2hpbmcgcHJvcGVydHkgZm91bmRcblx0XHRcdFx0XHQoZmlsdGVyUHJvcGVydHkuaXNDdXN0b21GaWx0ZXIgJiYgZW50aXR5UHJvcGVydGllc0N1cnJlbnQuYW5ub3RhdGlvblBhdGggPT09IHVuZGVmaW5lZCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0aWdub3JlUHJvcGVydGllcy5wdXNoKGZpbHRlclByb3BlcnR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlnbm9yZVByb3BlcnRpZXM7XG5cdH0sXG5cdGdldEZpbHRlcnM6IGZ1bmN0aW9uIChmaWx0ZXJCYXI/OiBJRmlsdGVyQ29udHJvbCk6IEludGVybmFsQmluZGluZ0luZm8gfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmlsdGVyQmFyIHx8IHR5cGVvZiBmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCAhPT0gXCJmdW5jdGlvblwiIHx8ICFmaWx0ZXJCYXIuaXNJbml0aWFsaXplZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgcGFyYW1ldGVycywgZmlsdGVycywgc2VhcmNoIH0gPSB0aGlzLmdldEZpbHRlckluZm8oZmlsdGVyQmFyKTtcblx0XHRyZXR1cm4geyBwYXJhbWV0ZXJzLCBmaWx0ZXJzLCBzZWFyY2ggfTtcblx0fSxcblx0LyoqXG5cdCAqIFByZXBhcmVzIHByb3BlcnR5SW5mbyBmb3Igc2hhcmluZyBpdCBvdXRzaWRlIEZFLCByZW1vdmVzIHVud2FudGVkIHByb3BlcnR5LlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb3IgU3RyaW5nIChmb3IgRmlsdGVyQmFyIHRlbXBsYXRpbmcpIG9mIFByb3BlcnR5SW5mb3MgYWZ0ZXIgcmVtb3ZpbmcgdGhlIHVud2FudGVkIHByb3BlcnRpZXNcblx0ICovXG5cdGZvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdIHwgc3RyaW5nKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB8IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eUluZm9zID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRsZXQgcHJvcEluZm8gPSBwcm9wZXJ0eUluZm9zLnJlcGxhY2UoL1xcXFxcXHsvZywgXCJ7XCIpO1xuXHRcdFx0cHJvcEluZm8gPSBwcm9wSW5mby5yZXBsYWNlKC9cXFxcXFx9L2csIFwifVwiKTtcblx0XHRcdGxldCBwcm9wSW5mb3MgPSBKU09OLnBhcnNlKHByb3BJbmZvKTtcblx0XHRcdHByb3BJbmZvcyA9IHRoaXMuX2Zvcm1hdFByb3BlcnR5SW5mbyhwcm9wSW5mb3MpO1xuXHRcdFx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BJbmZvcyk7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdFx0XHRwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgPSBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZm9ybWF0UHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFJlbW92ZXMgdW53YW50ZWQgcHJvcGVydHkgZnJvbSBQcm9wZXJ0eUluZm9zLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBBcnJheSBvZiBwcm9wZXJ0eUluZm9cblx0ICogQHJldHVybnMgQXJyYXkgb2YgUHJvcGVydHlJbmZvcyBhZnRlciByZW1vdmluZyB0aGUgdW53YW50ZWQgcHJvcGVydGllc1xuXHQgKi9cblx0X2Zvcm1hdFByb3BlcnR5SW5mbzogZnVuY3Rpb24gKHByb3BlcnR5SW5mb3M6IFByb3BlcnR5SW5mb1tdKTogUHJvcGVydHlJbmZvRXh0ZXJuYWxbXSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5SW5mb3MubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgX3Byb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvRXh0ZXJuYWwgPSB7XG5cdFx0XHRcdGtleTogcHJvcGVydHkua2V5IHx8IHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdGRhdGFUeXBlOiBcIlwiLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIFByb3BlcnR5SW5mb0tleXMpIHtcblx0XHRcdFx0aWYgKHByb3BlcnR5Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGtleSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcImhpZGRlbkZpbHRlclwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmhpZGRlbkZpbHRlciA9IHByb3BlcnR5LmhpZGRlbkZpbHRlcjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwicmVxdWlyZWRcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5yZXF1aXJlZCA9IHByb3BlcnR5LnJlcXVpcmVkO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJwYXRoXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ucGF0aCA9IHByb3BlcnR5LnBhdGg7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcInRvb2x0aXBcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby50b29sdGlwID0gcHJvcGVydHkudG9vbHRpcDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwidmlzaWJsZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLnZpc2libGUgPSBwcm9wZXJ0eS52aXNpYmxlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJtYXhDb25kaXRpb25zXCI6XG5cdFx0XHRcdFx0XHRcdF9wcm9wZXJ0eUluZm8ubWF4Q29uZGl0aW9ucyA9IHByb3BlcnR5Lm1heENvbmRpdGlvbnM7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImZvcm1hdE9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5mb3JtYXRPcHRpb25zID0gcHJvcGVydHkuZm9ybWF0T3B0aW9ucztcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY29uc3RyYWludHNcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5jb25zdHJhaW50cyA9IHByb3BlcnR5LmNvbnN0cmFpbnRzO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJncm91cFwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmdyb3VwID0gcHJvcGVydHkuZ3JvdXA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcImdyb3VwTGFiZWxcIjpcblx0XHRcdFx0XHRcdFx0X3Byb3BlcnR5SW5mby5ncm91cExhYmVsID0gcHJvcGVydHkuZ3JvdXBMYWJlbDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiY2FzZVNlbnNpdGl2ZVwiOlxuXHRcdFx0XHRcdFx0XHRfcHJvcGVydHlJbmZvLmNhc2VTZW5zaXRpdmUgPSBwcm9wZXJ0eS5jYXNlU2Vuc2l0aXZlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmRhdGFUeXBlKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8uZGF0YVR5cGUgPSBwcm9wZXJ0eS5kYXRhVHlwZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtYW5kYXRvcnkgcHJvcGVydHkgZGF0YVR5cGUgZm9yIGZpbHRlci1iYXIgZmlsdGVyIGZpZWxkOiAke3Byb3BlcnR5fWApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5LmxhYmVsKSB7XG5cdFx0XHRcdF9wcm9wZXJ0eUluZm8ubGFiZWwgPSBwcm9wZXJ0eS5sYWJlbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfcHJvcGVydHlJbmZvO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIFByb3BlcnR5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm9wZXJ0eUluZm8gYXJyYXksIHVzZWQgZHVyaW5nIHRlbXBsYXRpbmcgdG8gYXZvaWQgZHVwbGljYXRlcy5cblx0ICogQHBhcmFtIHBhcmVudENvbnRyb2wgRmlsdGVyQmFyIGNvbnRyb2wgd2hlcmUgdGhlIGN1c3RvbSBkYXRhIGlzIHN0b3JlZFxuXHQgKiBAcGFyYW0gbW9kaWZpZXIgTW9kaWZpZXJcblx0ICogQHBhcmFtIHByb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBQcm9wZXJ0eUluZm9zIGFmdGVyIHJlbW92aW5nIHRoZSB1bndhbnRlZCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRfY2hlY2tJZlByb3BlcnR5SW5mb0V4aXN0czogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdHBhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcixcblx0XHRwcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmdcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bGV0IHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvW10gPSBbXTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3VzdG9tRGF0YVZhbHVlID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihwYXJlbnRDb250cm9sLCBcImZlRmlsdGVySW5mb1wiLCBtb2RpZmllcik7XG5cdFx0XHRpZiAoY3VzdG9tRGF0YVZhbHVlKSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mbyA9IEpTT04ucGFyc2UoY3VzdG9tRGF0YVZhbHVlKTtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnR5SW5mby5zb21lKChvYmo6IFByb3BlcnR5SW5mbykgPT4gb2JqLm5hbWUgPT09IHByb3BlcnR5SW5mb05hbWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvRmlsdGVyVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7TUE4REtBLGdCQUFnQiwwQkFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhC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