@sapui5/sap.fe.macros 1.139.0 → 1.139.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +1 -1
  4. package/src/sap/fe/macros/Chart.tsx +1 -1
  5. package/src/sap/fe/macros/RichTextEditor.js +1 -2
  6. package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
  7. package/src/sap/fe/macros/ValueHelp.js +4 -28
  8. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  9. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  10. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  11. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  12. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  13. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  14. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  15. package/src/sap/fe/macros/controls/Section.js +3 -2
  16. package/src/sap/fe/macros/controls/Section.ts +2 -1
  17. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
  18. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
  19. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  20. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  21. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  22. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  23. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  24. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  25. package/src/sap/fe/macros/form/Form.block.js +6 -2
  26. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  27. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  28. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  29. package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
  30. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
  31. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  32. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  33. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
  34. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
  35. package/src/sap/fe/macros/library.js +1 -1
  36. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +5 -5
  37. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +5 -4
  38. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  39. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
  40. package/src/sap/fe/macros/table/Table.js +7 -1
  41. package/src/sap/fe/macros/table/Table.tsx +7 -1
  42. package/src/sap/fe/macros/table/TableAPI.js +8 -1
  43. package/src/sap/fe/macros/table/TableAPI.ts +15 -2
  44. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  45. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  46. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  47. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  48. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
  49. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
  50. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  51. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  52. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  53. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  54. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
  55. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
@@ -26,6 +26,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
26
26
  var generate = StableIdHelper.generate;
27
27
  var singletonPathVisitor = BindingHelper.singletonPathVisitor;
28
28
  var UI = BindingHelper.UI;
29
+ var Entity = BindingHelper.Entity;
29
30
  var StandardActionKeys = StandardActions.StandardActionKeys;
30
31
  var isDataFieldForAnnotation = DataField.isDataFieldForAnnotation;
31
32
  var isDataField = DataField.isDataField;
@@ -619,6 +620,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
619
620
  children: _jsx(DraftIndicator, {
620
621
  draftIndicatorType: ObjectMarkerVisibility.IconOnly,
621
622
  contextPath: collection.getPath(),
623
+ visible: or(not(Entity.IsActive), Entity.HasDraft),
622
624
  usedInTable: true,
623
625
  usedInAnalyticalTable: enableAnalytics
624
626
  })
@@ -1279,4 +1281,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
1279
1281
  _exports.getMDCTableTemplate = getMDCTableTemplate;
1280
1282
  return _exports;
1281
1283
  }, false);
1282
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlRmlsdGVyaW5nIiwiZGF0YVN0YXRlQ2hhbmdlIiwiZ2V0RHJhZ0FuZERyb3BFbmFibGVkIiwiY29udGV4dE9iamVjdFBhdGgiLCJpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24iLCJpc1BhdGhVcGRhdGFibGUiLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsImFuZCIsIl90eXBlIiwiaWZFbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIiwiVUkiLCJJc0VkaXRhYmxlIiwiZ2V0RGVwZW5kZW50cyIsInRhYmxlUHJvcGVydGllcyIsInBhcmFtZXRlcnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImlkIiwiY29udGVudElkIiwidHlwZSIsImRlcGVuZGVudHMiLCJjdXRBY3Rpb24iLCJhY3Rpb25zIiwiZmluZCIsImEiLCJrZXkiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJpc1RlbXBsYXRlZCIsInB1c2giLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImdldEN1dEhhbmRsZXIiLCJjb21tYW5kIiwiZW5hYmxlZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsInJvd0FjdGlvbnMiLCJUYWJsZVJvd0FjdGlvblR5cGUiLCJOYXZpZ2F0aW9uIiwiZ2V0Q29udGV4dE1lbnUiLCJuYXZpZ2F0aW9uSW5FZGl0TW9kZSIsIm1lbnVJdGVtcyIsImdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZSIsImdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlIiwiZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUiLCJNZW51IiwiaXRlbVNlbGVjdGVkIiwiY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiLCJnZXREZXBlbmRlbnRzRm9yQ29udGV4dE1lbnUiLCJ0YWJsZUlkIiwiTWVudUl0ZW0iLCJzdGFydHNTZWN0aW9uIiwidGV4dCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwibm90IiwicGF0aEluTW9kZWwiLCJjb250ZXh0TWVudU9wZW5Jbk5ld1RhYiIsImVuYWJsZWRGb3JDb250ZXh0TWVudSIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiaGVhZGVyTGV2ZWwiLCJWYXJpYW50TWFuYWdlbWVudCIsInNob3dTZXRBc0RlZmF1bHQiLCJ2YXJpYW50U2VsZWN0ZWQiLCJzYXZlIiwidmFyaWFudFNhdmVkIiwiZ2V0UXVpY2tGaWx0ZXIiLCJxdWlja0ZpbHRlcnMiLCJmaWx0ZXJzIiwiUXVpY2tGaWx0ZXJTZWxlY3RvciIsInBhdGhzIiwibWFwIiwiYW5ub3RhdGlvblBhdGgiLCJzaG93Q291bnRzIiwiZ2V0Q29weVByb3ZpZGVyIiwidmlzaWJsZUV4cHJlc3Npb24iLCJkaXNhYmxlQ29weVRvQ2xpcGJvYXJkIiwiQ29weVByb3ZpZGVyIiwiZ2V0Q2VsbFNlbGVjdG9yIiwiaW5jbHVkZXMiLCJDZWxsU2VsZWN0b3IiLCJvciIsInJhbmdlTGltaXQiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uTW9kZSIsIm5hbWUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93QWN0aW9uIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGFzIiwidmFsdWUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiYXBwbHkiLCJhcHBseUVuYWJsZWQiLCJnZXREcmFnQW5kRHJvcENvbmZpZyIsIkRyYWdEcm9wQ29uZmlnIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkcm9wUG9zaXRpb24iLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJkcmFnZ2FibGUiLCJkcm9wcGFibGUiLCJkcmFnU3RhcnQiLCJkcmFnU3RhcnREb2N1bWVudCIsImRyYWdFbnRlciIsImRyYWdFbnRlckRvY3VtZW50IiwiZHJvcCIsImRyb3BEb2N1bWVudCIsImZvckNvbnRleHRNZW51IiwiZGF0YUZpZWxkIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsImFjdGlvbkNvbnRleHRQYXRoIiwiZ2V0QWN0aW9uQ29udGV4dCIsIm1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYWN0aW9uQ29udGV4dCIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc0JvdW5kIiwiQWN0aW9uVGFyZ2V0IiwiaXNPcGVyYXRpb25BdmFpbGFibGUiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidmFsdWVPZiIsImRpc3BsYXlDb21tYW5kQWN0aW9uIiwiVGFibGVIZWxwZXIiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFjdGlvblBhcmFtZXRlcnMiLCJvbkV4ZWN1dGVBY3Rpb24iLCJnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIiLCJvbkV4ZWN1dGVJQk4iLCJnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIiLCJvbkV4ZWN1dGVNYW5pZmVzdCIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiaXNJQk5FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkIiwiUmVxdWlyZXNDb250ZXh0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzQWN0aW9uRW5hYmxlZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZCIsIkFjdGlvbiIsImVuYWJsZU9uU2VsZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsImlzRW5hYmxlZCIsImdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24iLCJnZXRDb3JlUmVxdWlyZSIsImN1c3RvbU1vZHVsZXMiLCJhZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzIiwibW9kdWxlIiwiaW5kZXgiLCJqb2luIiwiZ2V0Q29tcHV0ZWRDb2x1bW4iLCJjb2x1bW4iLCJlbmFibGVBbmFseXRpY3MiLCJpc0RyYWZ0SW5kaWNhdG9yIiwiQ29sdW1uIiwiaGVhZGVyVmlzaWJsZSIsInByb3BlcnR5S2V5IiwiaGVhZGVyIiwibGFiZWwiLCJ3aWR0aCIsIkRyYWZ0SW5kaWNhdG9yIiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiY29udGV4dFBhdGgiLCJnZXRQYXRoIiwidXNlZEluVGFibGUiLCJ1c2VkSW5BbmFseXRpY2FsVGFibGUiLCJpc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJTaXR1YXRpb25zSW5kaWNhdG9yIiwiZ2V0U2xvdENvbHVtbiIsImlzUmVhZE9ubHkiLCJ0ZW1wbGF0ZSIsInN0YXJ0c1dpdGgiLCJTbG90Q29sdW1uIiwidGVtcGxhdGVJZCIsImhBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInJlcXVpcmVkIiwiZXh0ZW5kZWRTZXR0aW5ncyIsIlJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyIsImltcG9ydGFuY2UiLCJnZXREcmFmdEluZGljYXRvciIsImZvcm1hdE9wdGlvbnMiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJJY29uQW5kVGV4dCIsImdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmciLCJmaWVsZEdyb3VwTmFtZSIsImFyaWFMYWJlbGxlZEJ5IiwiZ2V0U2l0dWF0aW9uSW5kaWNhdG9yIiwiT2JqZWN0U3RhdHVzIiwic2hvd0Vycm9yT2JqZWN0U3RhdHVzIiwiY2xhc3MiLCJzdGF0ZSIsImdldERlZmF1bHREYXRlVGltZVN0eWxlIiwiZGF0YUZpZWxkQ29udGV4dCIsInRhcmdldE9iamVjdCIsImlzRGF0YUZpZWxkIiwiVmFsdWUiLCIkdGFyZ2V0IiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiaGFzRGF0YVBvaW50VGFyZ2V0IiwiVGFyZ2V0IiwiZ2V0Q3JlYXRpb25UZW1wbGF0ZSIsImlzVGFibGVSZWFkT25seSIsImZpZWxkTW9kZSIsImNvbHVtbkVkaXRNb2RlIiwiZGF0YUZpZWxkT2JqZWN0IiwicmVhY3RpdmVBcmVhTW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4TGVuZ3RoIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsInRleHRBbGlnbk1vZGUiLCJzZW1hbnRpY0tleVN0eWxlIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzaG93SWNvblVybCIsIklubGluZSIsIkljb25VcmwiLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJkYXRlVGltZVN0eWxlIiwiRmllbGQiLCJ2aElkUHJlZml4IiwiZWRpdE1vZGUiLCJtZXRhUGF0aCIsIndyYXAiLCJjaGFuZ2UiLCJmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJGaWVsZEZvcm1hdE9wdGlvbnMiLCJnZXRNYWNyb0ZpZWxkVGVtcGxhdGUiLCJpc0NvbXBhY3RUeXBlIiwidGV4dEFsaWduIiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiY2xhc3NOYW1lIiwidHlwZUNvbmZpZyIsImlzQW5hbHl0aWNzIiwiZm9ySW5saW5lQ3JlYXRpb25Sb3dzIiwiY29tcGFjdFNlbWFudGljS2V5IiwiaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImxpdmVDaGFuZ2UiLCJmaWVsZExpdmVDaGFuZ2UiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiaXNOYXZpZ2FibGUiLCJnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUiLCJkYXRhRmllbGRPUCIsImNyZWF0aW9uVGVtcGxhdGUiLCJyZWFkT25seSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzQW5ub3RhdGlvbk9mVGVybSIsInNob3dPbmx5Q2hhcnQiLCJzZXR0aW5ncyIsInNob3dNaWNyb0NoYXJ0TGFiZWwiLCJtaWNyb0NoYXJ0U2l6ZSIsIm1pY3JvQ2hhcnRDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk1pY3JvQ2hhcnQiLCJzaXplIiwiaGlkZU9uTm9EYXRhIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzVHJ1dGh5IiwiSXNJbmFjdGl2ZSIsImVxdWFsIiwiTXVsdGlWYWx1ZUZpZWxkQmxvY2siLCJ1c2VQYXJlbnRCaW5kaW5nQ2FjaGUiLCJkaXNhYmxlT3duUmVxdWVzdE9uTVZGIiwiZmllbGRHcm91cCIsImRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0IiwiZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aCIsIkRhdGEiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiZmllbGRHcm91cERhdGFGaWVsZElkeCIsImZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0IiwiZmllbGRHcm91cERhdGFGaWVsZE9QIiwiZmllbGRHcm91cExhYmVsIiwiRmllbGRIZWxwZXIiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9qc3hzIiwiSEJveCIsImdldFZpc2libGVFeHByZXNzaW9uIiwiYWxpZ25JdGVtcyIsImJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMiLCJMYWJlbCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwiZ2V0VGV4dCIsIlZCb3giLCJsYXlvdXREYXRhIiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbHVtblN0YWJsZUlkIiwiZ2V0TWFyZ2luQ2xhc3MiLCJkcmFmdEluZGljYXRvciIsInNpdHVhdGlvbkluZGljYXRvciIsImdldFZCb3hWaXNpYmlsaXR5IiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZ2V0Q29sdW1uVGVtcGxhdGUiLCJnZXREYXRhRmllbGREZWZhdWx0IiwiZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoIiwidGVtcGxhdGVzIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJDb21tb25VdGlscyIsImlzU21hbGxEZXZpY2UiLCJnZXRDb2x1bW5XaWR0aCIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1pbldpZHRoIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwic2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5IiwiY3JlYXRlQ3VzdG9tRGF0YSIsImdldENvbHVtbnMiLCJjb2x1bW5zIiwiYXZhaWxhYmlsaXR5IiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsImdldERlc2lnbnRpbWUiLCJnZXRNRENQMTNuTW9kZSIsInN0cmluZ01vZGUiLCJUYWJsZVAxM25Nb2RlIiwiQWdncmVnYXRlIiwiU29ydCIsIkZpbHRlciIsIkdyb3VwIiwiZ2V0TURDVGFibGVUZW1wbGF0ZSIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVQYXRoIiwidGFyZ2V0SW5mb3JtYXRpb24iLCJhcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIm9wdGlvbnMiLCJvcGVuSW5FZGl0TW9kZSIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJNb2RlbEhlbHBlciIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZGVsZWdhdGUiLCJnZXREZWxlZ2F0ZSIsImlzQWxwIiwiZW50aXR5TmFtZSIsImN1cnJlbnRIZWFkZXIiLCJoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUiLCJ0YWJUaXRsZSIsIm1vZGVsQ29udGV4dENoYW5nZSIsInRhYmxlQ29udGV4dENoYW5nZSIsImxpbmVJdGVtIiwiZ2V0VWlMaW5lSXRlbU9iamVjdCIsIm5hdmlnYXRpb25QYXRoIiwiaXNTaW5nbGV0b24iLCJkcmFmdCIsImRlc2lnbnRpbWUiLCJvdmVycmlkZVJvd1ByZXNzIiwiYWN0aW9uVHlwZSIsInNob3dDcmVhdGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJjdXJyZW50UGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwicDEzbk1vZGUiLCJtb2RlIiwic3BsaXQiLCJ0cmltIiwiZXhjbHVkZUdyb3VwRnJvbVAxM24iLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsIkFjdGlvbkhlbHBlciIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0ZUF0RW5kIiwiaGlkZGVuRmlsdGVycyIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJleHBvcnRSZXF1ZXN0U2l6ZSIsIk1EQ1RhYmxlIiwic29ydENvbmRpdGlvbnMiLCJncm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiYnVzeUluZGljYXRvckRlbGF5IiwiZW5hYmxlRXhwb3J0IiwiSlNPTiIsInBhcnNlIiwiYmVmb3JlT3BlbkNvbnRleHRNZW51IiwiYXV0b0JpbmRPbkluaXQiLCJ1c2VCYXNpY1NlYXJjaCIsImZpbHRlckJhciIsInNlbGVjdGlvbk1vZGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJzaG93Um93Q291bnQiLCJoZWFkZXJTdHlsZSIsInRocmVzaG9sZCIsInBhc3RlIiwiYmVmb3JlRXhwb3J0IiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJtdWx0aVNlbGVjdE1vZGUiLCJzaG93UGFzdGVCdXR0b24iLCJlbmFibGVQYXN0ZSIsImRhdGFTdGF0ZUluZGljYXRvciIsInJvd1NldHRpbmdzIiwiY29udGV4dE1lbnUiLCJkcmFnRHJvcENvbmZpZyIsImNyZWF0aW9uUm93IiwidmFyaWFudCIsInF1aWNrRmlsdGVyIiwiY29weVByb3ZpZGVyIiwiY2VsbFNlbGVjdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZGNUYWJsZVRlbXBsYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgaWZFbHNlLCBpc0NvbnN0YW50LCBpc1RydXRoeSwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mLCBTdHJpY3RQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBGb3JtRWxlbWVudFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0Zvcm1FbGVtZW50V3JhcHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNEYXRhUG9pbnRUYXJnZXQsIGlzRGF0YUZpZWxkLCBpc0RhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVR5cGUsIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IFN0YW5kYXJkQWN0aW9uS2V5cywgdHlwZSBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtLCBpc0Fubm90YXRpb25PZlR5cGUsIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGlzUGF0aFVwZGF0YWJsZSwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlVGltZVN0eWxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0FjdGlvbkNvbW1hbmRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEsIGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvVFNYVXRpbHNcIjtcbmltcG9ydCBEcmFmdEluZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kcmFmdEluZGljYXRvci9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nLCBnZXRWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvVGFibGVUZW1wbGF0aW5nXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaXR1YXRpb25zL1NpdHVhdGlvbnNJbmRpY2F0b3JcIjtcbmltcG9ydCB7IGdldFRhYmxlQWN0aW9uc1RlbXBsYXRlLCBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9BY3Rpb25zVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFF1aWNrRmlsdGVyU2VsZWN0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IFNsb3RDb2x1bW4gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvU2xvdENvbHVtblwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQ3JlYXRpb25PcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQ3JlYXRpb25PcHRpb25zXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCB7IGdldFVwbG9hZFBsdWdpbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL3VwbG9hZFRhYmxlL1VwbG9hZFRhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgeyBPYmplY3RNYXJrZXJWaXNpYmlsaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBDZWxsU2VsZWN0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ2VsbFNlbGVjdG9yXCI7XG5pbXBvcnQgQ29udGV4dE1lbnVTZXR0aW5nIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NvbnRleHRNZW51U2V0dGluZ1wiO1xuaW1wb3J0IENvcHlQcm92aWRlciBmcm9tIFwic2FwL20vcGx1Z2lucy9Db3B5UHJvdmlkZXJcIjtcbmltcG9ydCBEYXRhU3RhdGVJbmRpY2F0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvRGF0YVN0YXRlSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlTGV2ZWwgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgVGFibGVQMTNuTW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9UYWJsZVAxM25Nb2RlXCI7XG5pbXBvcnQgVGFibGVSb3dBY3Rpb25UeXBlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL1RhYmxlUm93QWN0aW9uVHlwZVwiO1xuaW1wb3J0IFBlcnNpc3RlbmNlUHJvdmlkZXIgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9QZXJzaXN0ZW5jZVByb3ZpZGVyXCI7XG5pbXBvcnQgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgRHJhZ0Ryb3BDb25maWcgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvRHJhZ0Ryb3BDb25maWdcIjtcbmltcG9ydCBHcmlkVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0dyaWRUYWJsZVR5cGVcIjtcbmltcG9ydCBSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZVRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9SZXNwb25zaXZlVGFibGVUeXBlXCI7XG5pbXBvcnQgUm93QWN0aW9uSXRlbSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Sb3dBY3Rpb25JdGVtXCI7XG5pbXBvcnQgUm93U2V0dGluZ3MgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUm93U2V0dGluZ3NcIjtcbmltcG9ydCBUcmVlVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RyZWVUYWJsZVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgTWljcm9DaGFydCBmcm9tIFwiLi4vTWljcm9DaGFydFwiO1xuaW1wb3J0IEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi4vZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuZXhwb3J0IHR5cGUgVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyA9IHtcblx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdGNvbnZlcnRlZE1ldGFkYXRhOiBDb252ZXJ0ZWRNZXRhZGF0YTtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyO1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0YWJsZSB0eXBlIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGVcbiAqIEBwYXJhbSBzZWxlY3Rpb25MaW1pdFxuICogQHJldHVybnMgVGhlIHRhYmxlIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVUeXBlKFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0X2NvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyXG4pOiBSZXNwb25zaXZlVGFibGVUeXBlIHwgR3JpZFRhYmxlVHlwZSB8IFRyZWVUYWJsZVR5cGUge1xuXHRjb25zdCBjb2xsZWN0aW9uID0gX2NvbGxlY3Rpb24uZ2V0T2JqZWN0KCk7XG5cdHN3aXRjaCAodGFibGVUeXBlKSB7XG5cdFx0Y2FzZSBcIkdyaWRUYWJsZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEdyaWRUYWJsZVR5cGVcblx0XHRcdFx0XHRyb3dDb3VudE1vZGU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZX1cblx0XHRcdFx0XHRyb3dDb3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnR9XG5cdFx0XHRcdFx0c2VsZWN0aW9uTGltaXQ9e3NlbGVjdGlvbkxpbWl0fVxuXHRcdFx0XHRcdGZpeGVkQ29sdW1uQ291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50fVxuXHRcdFx0XHRcdHNjcm9sbFRocmVzaG9sZD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2Nyb2xsVGhyZXNob2xkfVxuXHRcdFx0XHRcdGVuYWJsZUNvbHVtbkZyZWV6ZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQ29sdW1uRnJlZXplfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJUcmVlVGFibGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxUcmVlVGFibGVUeXBlXG5cdFx0XHRcdFx0cm93Q291bnRNb2RlPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudE1vZGV9XG5cdFx0XHRcdFx0cm93Q291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50fVxuXHRcdFx0XHRcdGZpeGVkQ29sdW1uQ291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50fVxuXHRcdFx0XHRcdHNjcm9sbFRocmVzaG9sZD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2Nyb2xsVGhyZXNob2xkfVxuXHRcdFx0XHRcdGVuYWJsZUNvbHVtbkZyZWV6ZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQ29sdW1uRnJlZXplfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8UmVzcG9uc2l2ZVRhYmxlVHlwZVxuXHRcdFx0XHRcdHNob3dEZXRhaWxzQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdGRldGFpbHNCdXR0b25TZXR0aW5nPXtbUHJpb3JpdHkuTG93LCBQcmlvcml0eS5NZWRpdW0sIFByaW9yaXR5Lk5vbmVdfVxuXHRcdFx0XHRcdGdyb3dpbmdNb2RlPXtjb2xsZWN0aW9uLiRraW5kID09PSBcIkVudGl0eVNldFwiID8gXCJTY3JvbGxcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRwb3BpbkxheW91dD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucG9waW5MYXlvdXR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBEYXRhU2F0ZUluZGljYXRvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIGRhdGFzdGF0ZSBpbmRpY2F0b3JcbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IERhdGFTdGF0ZUluZGljYXRvciB7XG5cdHJldHVybiAoXG5cdFx0PERhdGFTdGF0ZUluZGljYXRvclxuXHRcdFx0ZmlsdGVyPXtoYW5kbGVyUHJvdmlkZXIuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyfVxuXHRcdFx0ZW5hYmxlRmlsdGVyaW5nPXt0cnVlfVxuXHRcdFx0ZGF0YVN0YXRlQ2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZGF0YVN0YXRlQ2hhbmdlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBkcmFnIGFuZCBkcm9wIGVuYWJsZW1lbnQuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGhcbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0RHJhZ0FuZERyb3BFbmFibGVkKFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbiA9IGlzUGF0aFVwZGF0YWJsZShjb250ZXh0T2JqZWN0UGF0aCwge1xuXHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udGV4dE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0ID0gaXNQYXRoVXBkYXRhYmxlKGNvbnRleHRPYmplY3RQYXRoLCB7XG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udGV4dE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cblx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0ID09PSBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHQvLyBMaXN0UmVwb3J0IGNhc2U6IHdlIGFsbG93IGRyYWcgYW5kIGRyb3Agb24gZHJhZnQtZW5hYmxlZCBlbnRpdGllc1xuXHRcdGlmICgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0XHRpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdFx0XHQ/IGlmRWxzZShpc0NvbnN0YW50KGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0KSwgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQsIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0XHRcdDogaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUhXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPYmplY3RQYWdlIGNhc2U6IHdlIGFsbG93IGRyYWcgYW5kIGRyb3AgaW4gZWRpdCBtb2RlXG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0XHQ/IGlmRWxzZShpc0NvbnN0YW50KGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0KSwgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQsIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0XHQ6IGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbixcblx0XHRcdFVJLklzRWRpdGFibGUsXG5cdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUhXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0dmFyaWFudE1hbmFnZW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dFxuKTogVUk1RWxlbWVudFtdIHtcblx0Y29uc3QgaWQgPSB0YWJsZVByb3BlcnRpZXMuY29udGVudElkO1xuXHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZTtcblx0Y29uc3QgaGFuZGxlclByb3ZpZGVyID0gcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXI7XG5cblx0Y29uc3QgZGVwZW5kZW50czogVUk1RWxlbWVudFtdID0gW107XG5cdGNvbnN0IGN1dEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGN1dEFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDdXRIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkN1dFwiXG5cdFx0XHRcdGVuYWJsZWQ9e2N1dEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBjb3B5QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNvcHlBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q29weUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ29weVwiXG5cdFx0XHRcdGVuYWJsZWQ9e2NvcHlBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcGFzdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKHBhc3RlQWN0aW9uPy52aXNpYmxlICE9PSBcImZhbHNlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJQYXN0ZVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGNyZWF0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChcblx0XHR0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQgJiZcblx0XHRjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJlxuXHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlID09PSB1bmRlZmluZWQgJiZcblx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4gPT09IGZhbHNlXG5cdCkge1xuXHRcdC8vIFRoZSBzaG9ydGN1dCBpcyBub3QgZW5hYmxlZCBpbiBjYXNlIG9mIGEgY3JlYXRlIG1lbnUgKGkuZS4gd2hlbiBub2RlVHlwZSBpcyBkZWZpbmVkKVxuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIGZhbHNlKX1cblx0XHRcdFx0dmlzaWJsZT17Y3JlYXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtjcmVhdGVBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGNvbW1hbmQ9XCJDcmVhdGVcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHR2aXNpYmxlPXtkZWxldGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2RlbGV0ZUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8vIE1vdmUgdXAgYW5kIGRvd24gYWN0aW9uc1xuXHRjb25zdCBtb3ZlVXBBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1vdmVEb3duQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bikgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHRtb3ZlVXBBY3Rpb24gJiZcblx0XHRtb3ZlRG93bkFjdGlvbiAmJlxuXHRcdG1vdmVVcEFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHRtb3ZlRG93bkFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0KSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnRVcFwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIoZmFsc2UsIGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duXCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZURvd25BY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKFxuXHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdGFjdGlvbixcblx0XHRcdGZhbHNlLFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXHRcdGlmIChhY3Rpb25Db21tYW5kKSB7XG5cdFx0XHRkZXBlbmRlbnRzLnB1c2goYWN0aW9uQ29tbWFuZCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIk5vbmVcIikge1xuXHRcdC8vIFBlcnNpc3RlbmNlIHByb3ZpZGVyIG9mZmVycyBwZXJzaXN0aW5nIHBlcnNvbmFsaXphdGlvbiBjaGFuZ2VzIHdpdGhvdXQgdmFyaWFudCBtYW5hZ2VtZW50XG5cdFx0ZGVwZW5kZW50cy5wdXNoKDxQZXJzaXN0ZW5jZVByb3ZpZGVyIGlkPXtnZW5lcmF0ZShbaWQsIFwiUGVyc2lzdGVuY2VQcm92aWRlclwiXSl9IGZvcj17aWR9IC8+KTtcblx0fVxuXG5cdGRlcGVuZGVudHMucHVzaCg8Q29udGV4dE1lbnVTZXR0aW5nIHNjb3BlPVwiU2VsZWN0aW9uXCIgLz4pO1xuXG5cdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goZ2V0VXBsb2FkUGx1Z2luKHRhYmxlRGVmaW5pdGlvbiwgaWQsIGhhbmRsZXJQcm92aWRlcikpO1xuXHR9XG5cblx0cmV0dXJuIGRlcGVuZGVudHM7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGFibGUgYWN0aW9ucy5cbiAqIEBwYXJhbSB0YWJsZVxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dFxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9ucyhcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhY3Rpb25zOiBDb250cm9sW10gPSBbXTtcblx0aWYgKHRhYmxlLmRpc3BsYXlTZWdtZW50ZWRCdXR0b24pIHtcblx0XHRjb25zdCBhbHBCdXR0b25JdGVtczogU2VnbWVudGVkQnV0dG9uSXRlbVtdID0gW107XG5cdFx0aWYgKENvbW1vbkhlbHBlci5pc0Rlc2t0b3AoKSkge1xuXHRcdFx0YWxwQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0hZQlJJRF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRcdGtleT1cIkh5YnJpZFwiXG5cdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vY2hhcnQtdGFibGUtdmlld1wiXG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9DSEFSVF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRrZXk9XCJDaGFydFwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL2Jhci1jaGFydFwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0YWxwQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdDxTZWdtZW50ZWRCdXR0b25JdGVtXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCJcblx0XHRcdFx0a2V5PVwiVGFibGVcIlxuXHRcdFx0XHRpY29uPVwic2FwLWljb246Ly90YWJsZS12aWV3XCJcblx0XHRcdC8+XG5cdFx0KTtcblxuXHRcdGFjdGlvbnMucHVzaChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGxheW91dEluZm9ybWF0aW9uPXsneyBhZ2dyZWdhdGlvbk5hbWU6IFwiZW5kXCIsIGFsaWdubWVudDogXCJFbmRcIiB9J31cblx0XHRcdFx0dmlzaWJsZT17XCJ7PSAke3BhZ2VJbnRlcm5hbD5hbHBDb250ZW50Vmlld30gPT09ICdUYWJsZScgfVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogKFxuXHRcdFx0XHRcdFx0PFNlZ21lbnRlZEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKX1cblx0XHRcdFx0XHRcdFx0c2VsZWN0PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5zZWdtZW50ZWRCdXR0b25QcmVzc31cblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk9XCJ7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM6IGFscEJ1dHRvbkl0ZW1zXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L1NlZ21lbnRlZEJ1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fVxuXG5cdGFjdGlvbnMucHVzaCguLi5nZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSh0YWJsZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpKTtcblxuXHRyZXR1cm4gYWN0aW9ucy5sZW5ndGggPiAwID8gYWN0aW9ucyA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Um93U2V0dGluZ3MoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRyb3dBY3Rpb25UeXBlOiBUYWJsZVJvd0FjdGlvblR5cGUgfCB1bmRlZmluZWQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFJvd1NldHRpbmdzIHtcblx0Y29uc3Qgcm93QWN0aW9uSXRlbSA9IChcblx0XHQ8Um93QWN0aW9uSXRlbVxuXHRcdFx0dHlwZT17cm93QWN0aW9uVHlwZX1cblx0XHRcdHByZXNzPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIucm93UHJlc3N9XG5cdFx0XHR2aXNpYmxlPXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnZpc2libGV9XG5cdFx0Lz5cblx0KTtcblxuXHRyZXR1cm4gKFxuXHRcdDxSb3dTZXR0aW5ncyBuYXZpZ2F0ZWQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93TmF2aWdhdGVkfSBoaWdobGlnaHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfT5cblx0XHRcdHt7XG5cdFx0XHRcdHJvd0FjdGlvbnM6IHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uID8gcm93QWN0aW9uSXRlbSA6IHVuZGVmaW5lZFxuXHRcdFx0fX1cblx0XHQ8L1Jvd1NldHRpbmdzPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEBwYXJhbSByb3dBY3Rpb25UeXBlXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25JbkVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBtZW51XG4gKi9cbmZ1bmN0aW9uIGdldENvbnRleHRNZW51KFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0bmF2aWdhdGlvbkluRWRpdE1vZGU6IGJvb2xlYW5cbik6IE1lbnUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZW51SXRlbXMgPSBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0aWYgKHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uSW5FZGl0TW9kZSkge1xuXHRcdG1lbnVJdGVtcy5wdXNoKGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCB0YWJsZVByb3BlcnRpZXMuY29udGVudElkKSk7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXHRpZiAobWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUgaXRlbVNlbGVjdGVkPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZH0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHRcdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnU+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gdGFibGVJZFxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsIHRhYmxlSWQ6IHN0cmluZyk6IE1lbnVJdGVtIHtcblx0Ly8gVGhlIHZpc2libGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgYXQgcnVudGltZSB3aGVuIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgaXMgYXZhaWxhYmxlIGFuZCBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ29udGV4dE1lbnVcIiwgXCJDb2xsYWJvcmF0aW9uTWFuYWdlclwiXSl9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9XG5cdFx0XHRlbmFibGVkPVwiez0gJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID4gMH1cIlxuXHRcdFx0dmlzaWJsZT17ZmFsc2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBNZW51SXRlbSB7XG5cdC8vIFRoZSAnT3BlbiBpbiBOZXcgVGFiJyBhY3Rpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGZvciBzdGlja3kgc2Vzc2lvbnMgaW4gZWRpdCBtb2RlXG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGUgc2Vjb25kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZSA9IGFuZChcblx0XHRub3QoYW5kKHBhdGhJbk1vZGVsKFwiL3Nlc3Npb25PblwiLCBcImludGVybmFsXCIpLCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0bm90KHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIikpXG5cdCk7XG5cblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntBUEk6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJJ31cIlxuXHRcdFx0c3RhcnRzU2VjdGlvbj17dHJ1ZX1cblx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfQ09OVEVYVF9NRU5VX09QRU5fSU5fTkVXX1RBQn1cIlxuXHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYn1cblx0XHRcdGVuYWJsZWQ9XCJ7PSAke2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPiAwfVwiXG5cdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51IGRlcGVuZGVudHMuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gIHRoZSBNZW51IGRlcGVuZGVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXQ6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHk6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKGFjdGlvbk5hbWUsIGFjdGlvbiwgdHJ1ZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlcGVuZGVudHMubGVuZ3RoID4gMCA/IGRlcGVuZGVudHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBWYXJpYW50TWFuYWdlbWVudCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBoZWFkZXJMZXZlbFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcsXG5cdGlkOiBzdHJpbmcsXG5cdGhlYWRlckxldmVsOiBUaXRsZUxldmVsLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJWTVwiXSl9XG5cdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdHNlbGVjdD17aGFuZGxlclByb3ZpZGVyLnZhcmlhbnRTZWxlY3RlZH1cblx0XHRcdFx0aGVhZGVyTGV2ZWw9e2hlYWRlckxldmVsfVxuXHRcdFx0XHRzYXZlPXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNhdmVkfVxuXHRcdFx0XHRmb3I9e1tpZF19XG5cdFx0XHQ+PC9WYXJpYW50TWFuYWdlbWVudD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBRdWlja1ZhcmlhbnRTZWxlY3Rpb24gY29udHJvbCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcXVpY2tGaWx0ZXJzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycztcblx0aWYgKHF1aWNrRmlsdGVycykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UXVpY2tGaWx0ZXJTZWxlY3RvclxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiUXVpY2tGaWx0ZXJDb250YWluZXJcIl0pfVxuXHRcdFx0XHRwYXRocz17cXVpY2tGaWx0ZXJzLnBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5hbm5vdGF0aW9uUGF0aCl9XG5cdFx0XHRcdHNob3dDb3VudHM9e3F1aWNrRmlsdGVycy5zaG93Q291bnRzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIENvcHlQcm92aWRlciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENvcHlQcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENvcHlQcm92aWRlciB7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXG5cdGxldCB2aXNpYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQpIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEZvciBhIFRyZWVUYWJsZSwgdGhlIGNvcHkgYnV0dG9uIHNoYWxsIGJlIHZpc2libGUgb25seSB3aGVuIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWRcblx0XHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gTGlzdFJlcG9ydDogZW5hYmxlIGNvcHkgaWYgdGhlIGVudGl0eSBpcyBub3QgZHJhZnQtZW5hYmxlZFxuXHRcdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCA9PT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT2JqZWN0UGFnZTogZW5hYmxlIGNvcHkgaW4gcmVhZC1vbmx5XG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdHJldHVybiA8Q29weVByb3ZpZGVyIHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufSAvPjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENlbGxTZWxlY3RvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENlbGxTZWxlY3RvclxuICovXG5mdW5jdGlvbiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENlbGxTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAoXG5cdFx0IXRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkICYmXG5cdFx0dGFibGVUeXBlICYmXG5cdFx0W1wiUmVzcG9uc2l2ZVRhYmxlXCIsIFwiR3JpZFRhYmxlXCIsIFwiVHJlZVRhYmxlXCJdLmluY2x1ZGVzKHRhYmxlVHlwZSlcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDZWxsU2VsZWN0b3Jcblx0XHRcdFx0ZW5hYmxlZD17b3IoXG5cdFx0XHRcdFx0dGFibGVUeXBlICE9PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0XHRcdG5vdChnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSlcblx0XHRcdFx0KX1cblx0XHRcdFx0cmFuZ2VMaW1pdD17MjAwfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBDcmVhdGlvblJvdyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIENyZWF0aW9uUm93XG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IENyZWF0aW9uUm93IHwgdW5kZWZpbmVkIHtcblx0aWYgKCh0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIGFzIHN0cmluZykgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdGNvbnN0IGNyZWF0aW9uUm93QWN0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3cpIGFzXG5cdFx0XHR8IFN0YW5kYXJkQWN0aW9uXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoY3JlYXRpb25Sb3dBY3Rpb24/LmlzVGVtcGxhdGVkKSB7XG5cdFx0XHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlQ3VzdG9tRGF0YXMoW1xuXHRcdFx0XHR7IGtleTogXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSB9LFxuXHRcdFx0XHR7IGtleTogXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gfVxuXHRcdFx0XSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDcmVhdGlvblJvd1xuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93XSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Y3JlYXRpb25Sb3dBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXBwbHk9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRcdGFwcGx5RW5hYmxlZD17Y3JlYXRpb25Sb3dBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY3VzdG9tRGF0YVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ3JlYXRpb25Sb3c+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZHJhZyBhbmQgZHJvcCBjb25maWcgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcENvbmZpZyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBEcmFnRHJvcENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJhZ0Ryb3BDb25maWdcblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RHJhZ0FuZERyb3BFbmFibGVkKHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbikpfVxuXHRcdFx0XHRkcm9wUG9zaXRpb249e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hbGxvd0Ryb3BCZXR3ZWVuTm9kZXMgPT09IHRydWUgPyBcIk9uT3JCZXR3ZWVuXCIgOiBcIk9uXCJ9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0ZHJvcHBhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcmFnU3RhcnQ9e2hhbmRsZXJQcm92aWRlci5kcmFnU3RhcnREb2N1bWVudH1cblx0XHRcdFx0ZHJhZ0VudGVyPXtoYW5kbGVyUHJvdmlkZXIuZHJhZ0VudGVyRG9jdW1lbnR9XG5cdFx0XHRcdGRyb3A9e2hhbmRsZXJQcm92aWRlci5kcm9wRG9jdW1lbnR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWN0aW9uQ29tbWFuZCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGFjdGlvbkNvbW1hbmRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChcblx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50PlxuKTogQ29tbWFuZEV4ZWN1dGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQocGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dCA/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9XG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGRpc3BsYXlDb21tYW5kQWN0aW9uID0gYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIgPyBpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlIDogdHJ1ZTtcblx0Y29uc3QgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5lbmFibGVkIDogYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKGRpc3BsYXlDb21tYW5kQWN0aW9uICYmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCkpKSB7XG5cdFx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblxuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRvbkV4ZWN1dGVBY3Rpb246IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uLCBmYWxzZSksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSksXG5cdFx0XHRpc0lCTkVuYWJsZWQ6XG5cdFx0XHRcdGVuYWJsZWQgPz9cblx0XHRcdFx0VGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbjogY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uOiB0YWJsZURlZmluaXRpb24gfSxcblx0XHRcdFx0XHRkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHQhIShkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0KSxcblx0XHRcdGlzQWN0aW9uRW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdChkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckFjdGlvbikuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0UGF0aCxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNFbmFibGVkOiBlbmFibGVkXG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbihjb21tYW5kLCB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMhW2FjdGlvbk5hbWVdLCBhY3Rpb25QYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgcmVxdWlyZWQgbW9kdWxlcy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Q29yZVJlcXVpcmUodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXN0b21Nb2R1bGVzID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA/PyBbXTtcblxuXHRyZXR1cm4gYHtUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZScsIEFQSTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUEknJHtjdXN0b21Nb2R1bGVzXG5cdFx0Lm1hcCgobW9kdWxlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IGAsIGN1c3RvbU1vZHVsZSR7aW5kZXggKyAxfTogJyR7bW9kdWxlfSdgKVxuXHRcdC5qb2luKFwiXCIpfX1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29tcHV0ZWQgY29sdW1uLlxuICogQ3VycmVudGx5LCB0aGlzIHJlcHJlc2VudHMgb25seSB0aGUgRHJhZnRJbmRpY2F0b3IgYW5kIHRoZSBTaXR1YXRpb25zSW5kaWNhdG9yLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb21wdXRlZCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEByZXR1cm5zIFRoZSBjb21wdXRlZCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlZENvbHVtbihcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNvbHVtbi5pc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJkcmFmdFN0YXR1c1wiXSl9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0d2lkdGg9XCIzZW1cIlxuXHRcdFx0PlxuXHRcdFx0XHQ8RHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdHVzZWRJblRhYmxlPXt0cnVlfVxuXHRcdFx0XHRcdHVzZWRJbkFuYWx5dGljYWxUYWJsZT17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChjb2x1bW4uaXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJzaXR1YXRpb25zSW5kaWNhdG9yXCJdKX1cblx0XHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbH1cblx0XHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHR3aWR0aD1cIjRlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxTaXR1YXRpb25zSW5kaWNhdG9yIGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX0gLz5cblx0XHRcdDwvQ29sdW1uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4uXG4gKiBUaGlzIGNvbHVtbiB3aWxsIGVpdGhlciByZXVzZSBhIHRlbXBsYXRlIGNvbnRyb2wgdGhhdCBpcyBkZWZpbmVkIGF0IHJ1bnRpbWUgKHRlbXBsYXRlSWQgY2FzZSksIG9yIGRlZmluZSBhIHNsb3Qgd2hlcmUgdGhlIFhNTCBjb250ZW50IGlzIGNvcGllZC5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgc2xvdCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGlzUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcmV0dXJucyBUaGUgc2xvdCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG90Q29sdW1uKHRhYmxlSWQ6IHN0cmluZywgY29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBpc1JlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkKTogQ29sdW1uIHtcblx0Y29uc3QgdGVtcGxhdGUgPVxuXHRcdHR5cGVvZiBjb2x1bW4udGVtcGxhdGUgPT09IFwic3RyaW5nXCIgJiYgIWNvbHVtbi50ZW1wbGF0ZT8uc3RhcnRzV2l0aChcIjxcIikgPyAoXG5cdFx0XHQ8U2xvdENvbHVtbiB0ZW1wbGF0ZUlkPXtjb2x1bW4udGVtcGxhdGV9IC8+XG5cdFx0KSA6IChcblx0XHRcdGNvbHVtbi50ZW1wbGF0ZVxuXHRcdCk7XG5cdHJldHVybiAoXG5cdFx0PENvbHVtblxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgY29sdW1uLmlkXSl9XG5cdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHR3aWR0aD17Y29sdW1uLndpZHRofVxuXHRcdFx0aEFsaWduPXtjb2x1bW4uaG9yaXpvbnRhbEFsaWdufVxuXHRcdFx0aGVhZGVyPXtjb2x1bW4uaGVhZGVyfVxuXHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRyZXF1aXJlZD17aXNSZWFkT25seSA/IHVuZGVmaW5lZCA6IGNvbHVtbi5yZXF1aXJlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlXG5cdFx0XHR9fVxuXHRcdDwvQ29sdW1uPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBEcmFmdEluZGljYXRvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBEcmFmdEluZGljYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogRm9ybUVsZW1lbnRXcmFwcGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgJiZcblx0XHRjb2xsZWN0aW9uLmdldE9iamVjdChcIi4vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiKSAmJlxuXHRcdGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGhcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Z2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUpfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbXCJ0aGlzPmFyaWFMYWJlbGxlZEJ5XCJdfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Gb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgU2l0dWF0aW9uSW5kaWNhdG9yIE9iamVjdFN0YXR1cy5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIE9iamVjdFN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogT2JqZWN0U3RhdHVzIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHR2aXNpYmxlPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzfVxuXHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNvbnRhaW5zX0Vycm9yc31cIlxuXHRcdFx0XHRzdGF0ZT1cIkVycm9yXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBzdHlsZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YSBmaWVsZCBjb250ZXh0LlxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgZmllbGRcbiAqIEByZXR1cm5zIFJldHVybnMgJ3Nob3J0JyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGZpZWxkIGlzIG9mIHRoZSB0eXBlICdFZG0uVGltZU9mRGF5Jywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCk6IERhdGVUaW1lU3R5bGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZGF0YUZpZWxkQ29udGV4dCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNEYXRhRmllbGQodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3QuVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0cmV0dXJuIFwic2hvcnRcIjtcblx0fVxuXHRpZiAoXG5cdFx0aXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKHRhcmdldE9iamVjdCkgJiZcblx0XHRoYXNEYXRhUG9pbnRUYXJnZXQodGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCh0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUuJHRhcmdldC50eXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHQpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNyZWF0aW9uIHJvdy5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBjb250ZXh0XG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gZW5hYmxlQW5hbHl0aWNzIFdoZXRoZXIgYW5hbHl0aWNzIGFyZSBlbmFibGVkXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHJvdy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNyZWF0aW9uTW9kZTogUHJvcGVydGllc09mPFRhYmxlQ3JlYXRpb25PcHRpb25zPiB8IHVuZGVmaW5lZCxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRkYXRhRmllbGQ6IENvbnRleHQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRlbmFibGVBbmFseXRpY3M6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKChjcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gXCJDcmVhdGlvblJvd1wiKSB7XG5cdFx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZC5nZXRPYmplY3QoKTtcblxuXHRcdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkKSxcblx0XHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0XHR9O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7VGFibGVSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWUnfVwiXG5cdFx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGQuZ2V0UGF0aCgpfVxuXHRcdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRcdGNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvd31cblx0XHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9GaWVsZD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG1hY3JvczpGaWVsZCBpbnNpZGUgdGhlIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZVxuICogQHBhcmFtIGZpZWxkTW9kZSBUaGUgZmllbGQgbW9kZVxuICogQHBhcmFtIGlzQ29tcGFjdFR5cGUgV2hldGhlciB0aGUgdGFibGUgaXMgY29tcGFjdFxuICogQHBhcmFtIHRleHRBbGlnbiBUaGUgdGV4dCBhbGlnbm1lbnRcbiAqIEBwYXJhbSBhcmlhTGFiZWxsZWRCeSBUaGUgYXJpYSBsYWJlbGxlZCBieVxuICogQHBhcmFtIHNob3dFbXB0eUluZGljYXRvciBXaGV0aGVyIHRvIHNob3cgdGhlIGVtcHR5IGluZGljYXRvclxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGlzVGFibGVSZWFkT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNDb21wYWN0VHlwZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNob3dFbXB0eUluZGljYXRvcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoaXNUYWJsZVJlYWRPbmx5KSB7XG5cdFx0Y2FzZSB0cnVlOlxuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luICYmIGNvbHVtbi50eXBlQ29uZmlnPy5jbGFzc05hbWUgPT09IFwiRWRtLlN0cmVhbVwiKSB7XG5cdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0fVxuXG5cdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk92ZXJsYXlcIiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdHRleHRMaW5lc0VkaXQ6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TGluZXNFZGl0LFxuXHRcdHRleHRNYXhMaW5lczogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyxcblx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXksXG5cdFx0dGV4dE1heExlbmd0aDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMZW5ndGgsXG5cdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdHNob3dFbXB0eUluZGljYXRvcjogc2hvd0VtcHR5SW5kaWNhdG9yLFxuXHRcdHNlbWFudGljS2V5U3R5bGU6IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFwiLFxuXHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IsXG5cdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdGZpZWxkR3JvdXBOYW1lOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUsXG5cdFx0c2hvd0ljb25Vcmw6IGRhdGFGaWVsZE9iamVjdD8uSW5saW5lICYmICEhZGF0YUZpZWxkT2JqZWN0Py5JY29uVXJsLFxuXHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRpc0FuYWx5dGljczogZW5hYmxlQW5hbHl0aWNzLFxuXHRcdGZvcklubGluZUNyZWF0aW9uUm93czogY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiLFxuXHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdGNvbXBhY3RTZW1hbnRpY0tleTogaXNDb21wYWN0VHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYCR7aXNDb21wYWN0VHlwZX1gLFxuXHRcdGRhdGVUaW1lU3R5bGU6IGdldERlZmF1bHREYXRlVGltZVN0eWxlKGRhdGFGaWVsZENvbnRleHQpLFxuXHRcdGlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3c6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsLFxuXHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0fTtcblx0cmV0dXJuIChcblx0XHQ8RmllbGRcblx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdGVkaXRNb2RlPXtjb2x1bW5FZGl0TW9kZX1cblx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0d3JhcD17dGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwifVxuXHRcdFx0Y2xhc3M9e2NsYXNzTmFtZX1cblx0XHRcdGxpdmVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5maWVsZExpdmVDaGFuZ2V9XG5cdFx0XHRhcmlhTGFiZWxsZWRCeT17YXJpYUxhYmVsbGVkQnkgPyBbYXJpYUxhYmVsbGVkQnldIDogdW5kZWZpbmVkfVxuXHRcdFx0bmF2aWdhdGVBZnRlckFjdGlvbj17Y29sdW1uLmlzTmF2aWdhYmxlfVxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0fX1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gZGF0YUZpZWxkT1AgVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZE9QOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IHsgdGVtcGxhdGU6IHN0cmluZzsgY3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZyB9IHtcblx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxldCBjcmVhdGlvblRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3M7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBpc1RhYmxlUmVhZE9ubHkgPSB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHk7XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU7XG5cdGNvbnN0IGZpZWxkTW9kZSA9IHRhYmxlUHJvcGVydGllcy5maWVsZE1vZGU7XG5cdGNvbnN0IGlzQ29tcGFjdFR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb21wYWN0VHlwZTtcblxuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRPUC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0KGlzQW5ub3RhdGlvbk9mVGVybTxDaGFydD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpKVxuXHQpIHtcblx0XHRjb25zdCBzaG93T25seUNoYXJ0ID0gKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/ICFjb2x1bW4uc2V0dGluZ3M/LnNob3dNaWNyb0NoYXJ0TGFiZWwgOiB1bmRlZmluZWQpID8/IHRydWU7XG5cdFx0Y29uc3QgbWljcm9DaGFydFNpemUgPSB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBjb2x1bW4uc2V0dGluZ3M/Lm1pY3JvQ2hhcnRTaXplID8/IFwiWFNcIiA6IFwiWFNcIjtcblx0XHRsZXQgbWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uXG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbGxlY3Rpb24uZ2V0UGF0aChkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikpKTtcblx0XHRtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvbkNvbnRleHQobWljcm9DaGFydENvbGxlY3Rpb24pKTtcblx0XHQvL1dlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHZpc3VhbGl6YXRpb24gb2YgdGhlIFBWIGluIFBWIGNhc2UgYW5kIGV4cGVjdCBpdCB0byBiZSBhIGNoYXJ0IChzaW1pbGFyIHRvIFZpc3VhbEZpbHRlcnMpXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8TWljcm9DaGFydFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17bWljcm9DaGFydENvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKVxuXHRcdFx0XHRcdC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dPbmx5Q2hhcnQ9e3Nob3dPbmx5Q2hhcnR9XG5cdFx0XHRcdHNpemU9e21pY3JvQ2hhcnRTaXplID8/IFwiWFNcIn1cblx0XHRcdFx0aGlkZU9uTm9EYXRhPXt0cnVlfVxuXHRcdFx0XHRpc0FuYWx5dGljcz17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQ+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpZWxkKGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE9QLCBkYXRhRmllbGQuVmFsdWUucGF0aCkpXG5cdCkge1xuXHRcdC8vIHdoZW4gZXZhbHVhdGluZyBcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGlzVHJ1dGh5IHRvIGZvcmNlIHRoZSBiaW5kaW5nIGV2YWx1YXRpb25cblx0XHRjb25zdCBpc1JlYWRPbmx5ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKGlzVGFibGVSZWFkT25seSA9PT0gdHJ1ZSwgYW5kKGlzVHJ1dGh5KFVJLklzSW5hY3RpdmUpLCBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShlcXVhbChmaWVsZE1vZGUsIFwibm93cmFwcGVyXCIpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQodW5kZWZpbmVkKSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGlmIChpc1JlYWRPbmx5ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEJsb2NrXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdFx0XHR1c2VQYXJlbnRCaW5kaW5nQ2FjaGU9e3RhYmxlRGVmaW5pdGlvbi5kaXNhYmxlT3duUmVxdWVzdE9uTVZGfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0cmVhZE9ubHk9e2lzUmVhZE9ubHl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPEZpZWxkR3JvdXA+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cClcblx0KSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cDogRmllbGRHcm91cCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aCA9IGZpZWxkR3JvdXAuRGF0YS5sZW5ndGggLSAxO1xuXG5cdFx0Y29uc3QgaXRlbXMgPSBmaWVsZEdyb3VwLkRhdGEubWFwKChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmaWVsZEdyb3VwRGF0YUZpZWxkSWR4OiBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0ID0gZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiICsgZmllbGRHcm91cERhdGFGaWVsZElkeCk7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YUZpZWxkT1AgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cExhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dChmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0XHRjb250ZXh0OiBmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwgJiYgISFmaWVsZEdyb3VwTGFiZWwpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGaWVsZEhlbHBlci5idWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIilcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdGlkPXtUYWJsZUhlbHBlci5nZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZCh0YWJsZUlkLCBmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiSEVBREVSX0ZPUk1fTEFCRUxcIiwgW2ZpZWxkR3JvdXBMYWJlbF0pfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkVuZFwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFZCb3g+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIC8+LFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFwiTGVmdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YCR7VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApfSAke1RhYmxlSGVscGVyLmdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkT1Bcblx0XHRcdFx0XHRcdFx0XHRcdCl9YCxcblx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRNYXJnaW5DbGFzcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCksXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yID0gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoZHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdGl0ZW1zLnB1c2goZHJhZnRJbmRpY2F0b3IpO1xuXHRcdH1cblx0XHRjb25zdCBzaXR1YXRpb25JbmRpY2F0b3IgPSBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoc2l0dWF0aW9uSW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKHNpdHVhdGlvbkluZGljYXRvcik7XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8VkJveFxuXHRcdFx0XHR2aXNpYmxlPXtUYWJsZUhlbHBlci5nZXRWQm94VmlzaWJpbGl0eShcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRjb2x1bW4uRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogaXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvVkJveD5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRlbXBsYXRlID0gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0dGFibGVJZCxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdGNvbHVtbixcblx0XHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0XHRjcmVhdGlvblRlbXBsYXRlID0gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4geyB0ZW1wbGF0ZSwgY3JlYXRpb25UZW1wbGF0ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2x1bW4uYW5ub3RhdGlvblBhdGgpO1xuXHRpZiAoIWRhdGFGaWVsZENvbnRleHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkRGVmYXVsdChkYXRhRmllbGRDb250ZXh0KSk7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0LCBjb2xsZWN0aW9uKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0Py4oKSA/PyB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdFx0dGFibGVJZCxcblx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0Y29sdW1uLFxuXHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdGNvbGxlY3Rpb24sXG5cdFx0aGFuZGxlclByb3ZpZGVyXG5cdCk7XG5cblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gdGFibGVQcm9wZXJ0aWVzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoO1xuXHRjb25zdCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoKX1cblx0XHRcdHdpZHRoPXtcblx0XHRcdFx0IUNvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCBjb2x1bW4ud2lkdGhcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRtaW5XaWR0aD17XG5cdFx0XHRcdENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKVxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0Rlc2NyaXB0aW9uXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbCB8fCBjb2x1bW4ubmFtZX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbiB8fCBGaWVsZEhlbHBlci5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb24gfSl9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtUYWJsZUhlbHBlci5zZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkoZGF0YUZpZWxkT2JqZWN0LCBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YVwiKSl9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXt0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIiwgY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwpLFxuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlcy50ZW1wbGF0ZSxcblx0XHRcdFx0Y3JlYXRpb25UZW1wbGF0ZTogdGVtcGxhdGVzLmNyZWF0aW9uVGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgY29sbGVjdGlvbjogQ29udGV4dCwgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0cmV0dXJuIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29sdW1uc1xuXHRcdC5tYXAoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbHVtblRlbXBsYXRlKHRhYmxlSWQsIHRhYmxlUHJvcGVydGllcywgY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sbGVjdGlvbiwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbHVtbiBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KVxuXHRcdC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpIGFzIENvbHVtbltdO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyA9IE9taXQ8U3RyaWN0UHJvcGVydGllc09mPFRhYmxlQVBJPiwgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiPiAmIHtcblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZztcblx0W1wiZmw6ZmxleGliaWxpdHlcIl0/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBkZXNpZ250aW1lIGZvciB0aGUgTURDIHRhYmxlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGR0OmRlc2lnbnRpbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RGVzaWdudGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZVwiO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGludGVybmFsIFAxM24gdGFibGUgbW9kZSAoc3RyaW5nKSB0byB0aGUgY29ycmVzcG9uZGluZyBNREMgZW51bS5cbiAqIEBwYXJhbSBzdHJpbmdNb2RlXG4gKiBAcmV0dXJucyBUaGUgTURDIGVudW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0TURDUDEzbk1vZGUoc3RyaW5nTW9kZTogc3RyaW5nKTogVGFibGVQMTNuTW9kZSB7XG5cdHN3aXRjaCAoc3RyaW5nTW9kZSkge1xuXHRcdGNhc2UgXCJBZ2dyZWdhdGVcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkFnZ3JlZ2F0ZTtcblx0XHRjYXNlIFwiU29ydFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuU29ydDtcblx0XHRjYXNlIFwiQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdFx0Y2FzZSBcIkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuRmlsdGVyO1xuXHRcdGNhc2UgXCJHcm91cFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy5lcnJvcihcIlVua25vd24gUDEzbiBtb2RlOiBcIiArIHN0cmluZ01vZGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNRENUYWJsZVRlbXBsYXRlKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMpOiBNRENUYWJsZSB7XG5cdC8vIEZvciBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgZGlzcGxheWluZyBhIGRyYWZ0LWVuYWJsZWQgZW50aXR5LCB3ZSBvbmx5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlc1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbj8ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7XG5cdFx0cm91dGVQYXRoPzogc3RyaW5nO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgdGFyZ2V0ID0gbmF2aWdhdGlvbkluZm8/LnJvdXRlUGF0aDtcblx0bGV0IG5hdmlnYXRpb25JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YXJnZXQpIHtcblx0XHRjb25zdCB0YXJnZXRJbmZvcm1hdGlvbiA9IHBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuX2dldFRhcmdldEluZm9ybWF0aW9uKHRhcmdldCk7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGUgPSAodGFyZ2V0SW5mb3JtYXRpb24/Lm9wdGlvbnM/LnNldHRpbmdzPy5vcGVuSW5FZGl0TW9kZSBhcyBib29sZWFuIHwgdW5kZWZpbmVkKSA/PyBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9XG5cdFx0KHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkgJiZcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0TW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBkZWxlZ2F0ZSA9IFRhYmxlSGVscGVyLmdldERlbGVnYXRlKFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0dGFibGVQcm9wZXJ0aWVzLmlzQWxwID09PSB0cnVlLFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5lbnRpdHlOYW1lLFxuXHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXNcblx0KTtcblx0Y29uc3QgaGVhZGVyVmlzaWJsZSA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXJWaXNpYmxlID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5oZWFkZXJWaXNpYmxlO1xuXHRjb25zdCBjdXJyZW50SGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlciA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IGhlYWRlckJpbmRpbmdFeHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZShjdXJyZW50SGVhZGVyID8/IFwiXCIsIHRhYmxlUHJvcGVydGllcy50YWJUaXRsZSA/PyBcIlwiLCAhIWhlYWRlclZpc2libGUpO1xuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKTtcblx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pLnRhcmdldCBhc1xuXHRcdHwgRW50aXR5U2V0XG5cdFx0fCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdGNvbnN0IG1vZGVsQ29udGV4dENoYW5nZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnRhYmxlQ29udGV4dENoYW5nZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgbGluZUl0ZW0gPSBUYWJsZUhlbHBlci5nZXRVaUxpbmVJdGVtT2JqZWN0KHBhcmFtZXRlcnMubWV0YVBhdGgsIHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEpIGFzXG5cdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25bXVxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpICYmIGlzU2luZ2xldG9uKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uID0gbmF2aWdhdGlvblBhdGg7XG5cdH1cblxuXHRjb25zdCBjb2xsZWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSE7XG5cdGNvbnN0IGRyYWZ0ID0gKGNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0Ly8gQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkZXNpZ250aW1lIGZpbGUgaWYgZGVzaWdudGltZSBpcyBlbmFibGVkIGZyb20gY29yZSBvciBsb2NhbGx5IHZpYSB1cmwgcGFyYW1ldGVyc1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRhYmxlUHJvcGVydGllcy52YXJpYW50TWFuYWdlbWVudCA/PyBcIk5vbmVcIjtcblx0Y29uc3QgZGVzaWdudGltZSA9IGdldERlc2lnbnRpbWUoKTtcblx0bGV0IHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0cm93QWN0aW9uVHlwZSA9IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uO1xuXHR9XG5cdHJvd0FjdGlvblR5cGUgPz89XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8uYWN0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgPyBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBzaG93Q3JlYXRlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKT8udmlzaWJsZSB8fCB0cnVlO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnV0dG9uIGlzIGhpZGRlbiB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gZW50ZXJlZCB5ZXQgaW4gdGhlIHJvdyAodHJ1ZS9mYWxzZSkuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYGZhbHNlYC5cblx0ICovXG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi51cGRhdGFibGVQcm9wZXJ0eVBhdGg7XG5cblx0bGV0IGN1cnJlbnRQZXJzb25hbGl6YXRpb246IFRhYmxlUDEzbk1vZGVbXSB8IHVuZGVmaW5lZDtcblx0c3dpdGNoICh0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRydWVcIjpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBbVGFibGVQMTNuTW9kZS5Tb3J0LCBUYWJsZVAxM25Nb2RlLkNvbHVtbiwgVGFibGVQMTNuTW9kZS5GaWx0ZXJdO1xuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gWy4uLmN1cnJlbnRQZXJzb25hbGl6YXRpb24sIFRhYmxlUDEzbk1vZGUuR3JvdXBdO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBJbiBjYXNlIGdyb3VwaW5nIG1vZGUgaXMgZGVmaW5lZCBleHBsaWNpdGVseSBvbiB0aGUgcGVyc29uYWxpemF0aW9uLCB3ZSBvbmx5IGVuYWJsZSBpdCBmb3IgdGhlIGFuYWx5dGljYWwgYW5kIHJlc3BvbnNpdmUgdGFibGUuXG5cdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSB7XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKS5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleGNsdWRlR3JvdXBGcm9tUDEzbiA9IHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb25cblx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0LmZpbHRlcigobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZS50cmltKCkpICE9PSBUYWJsZVAxM25Nb2RlLkdyb3VwKSBhcyBUYWJsZVAxM25Nb2RlW107XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBleGNsdWRlR3JvdXBGcm9tUDEzbi5sZW5ndGggPyBleGNsdWRlR3JvdXBGcm9tUDEzbiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0fVxuXG5cdGNvbnN0IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zID0gQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGxpbmVJdGVtKTtcblxuXHRjb25zdCBjdXN0b21EYXRhID0gW1xuXHRcdHsga2V5OiBcImtpbmRcIiwgdmFsdWU6IGNvbGxlY3Rpb25FbnRpdHkuX3R5cGUgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uUGF0aFwiLCB2YWx1ZTogbmF2aWdhdGlvblBhdGggfSxcblx0XHR7IGtleTogXCJlbmFibGVBbmFseXRpY3NcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRpb25Nb2RlXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIH0sXG5cdFx0eyBrZXk6IFwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlubGluZUNyZWF0aW9uUm93Q291bnQgfSxcblx0XHR7IGtleTogXCJzaG93Q3JlYXRlXCIsIHZhbHVlOiBzaG93Q3JlYXRlIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRlQXRFbmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kIH0sXG5cdFx0eyBrZXk6IFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5yZWFkT25seSB9LFxuXHRcdHsga2V5OiBcInRhYmxlVHlwZVwiLCB2YWx1ZTogdGFibGVUeXBlIH0sXG5cdFx0eyBrZXk6IFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImVudGl0eVR5cGVcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiIH0sXG5cdFx0eyBrZXk6IFwibWV0YVBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImhpZGRlbkZpbHRlcnNcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5maWx0ZXJzPy5oaWRkZW5GaWx0ZXJzIH0sXG5cdFx0eyBrZXk6IFwicmVxdWVzdEdyb3VwSWRcIiwgdmFsdWU6IFwiJGF1dG8uV29ya2Vyc1wiIH0sXG5cdFx0eyBrZXk6IFwic2VnbWVudGVkQnV0dG9uSWRcIiwgdmFsdWU6IGdlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pIH0sXG5cdFx0eyBrZXk6IFwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgfSxcblx0XHR7IGtleTogXCJkcmFmdFwiLCB2YWx1ZTogZHJhZnQgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIsIHZhbHVlOiBUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtKSB9LFxuXHRcdHtcblx0XHRcdGtleTogXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiLFxuXHRcdFx0dmFsdWU6IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLmxlbmd0aCA+IDAgPyBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0eyBrZXk6IFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIsIHZhbHVlOiB1cGRhdGFibGVQcm9wZXJ0eVBhdGggfHwgXCJcIiB9LFxuXHRcdHsga2V5OiBcImV4cG9ydFJlcXVlc3RTaXplXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUgfVxuXHRdO1xuXG5cdHJldHVybiAoXG5cdFx0PE1EQ1RhYmxlXG5cdFx0XHRjb3JlOnJlcXVpcmU9e2dldENvcmVSZXF1aXJlKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pfVxuXHRcdFx0Zmw6ZmxleGliaWxpdHk9e3RhYmxlUHJvcGVydGllc1tcImZsOmZsZXhpYmlsaXR5XCJdfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zb3J0Q29uZGl0aW9uc31cblx0XHRcdGdyb3VwQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9uc31cblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zfVxuXHRcdFx0ZHQ6ZGVzaWdudGltZT17ZGVzaWdudGltZX1cblx0XHRcdGlkPXt0YWJsZVByb3BlcnRpZXMuY29udGVudElkfVxuXHRcdFx0YnVzeUluZGljYXRvckRlbGF5PXswfVxuXHRcdFx0ZW5hYmxlRXhwb3J0PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0fVxuXHRcdFx0ZGVsZWdhdGU9e0pTT04ucGFyc2UoZGVsZWdhdGUpfVxuXHRcdFx0cm93UHJlc3M9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnJvd1ByZXNzIDogdW5kZWZpbmVkfVxuXHRcdFx0YmVmb3JlT3BlbkNvbnRleHRNZW51PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVPcGVuQ29udGV4dE1lbnV9XG5cdFx0XHRhdXRvQmluZE9uSW5pdD17dGFibGVQcm9wZXJ0aWVzLnVzZUJhc2ljU2VhcmNoIHx8ICF0YWJsZVByb3BlcnRpZXMuZmlsdGVyQmFyfVxuXHRcdFx0c2VsZWN0aW9uTW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlbGVjdGlvbk1vZGUgfHwgXCJOb25lXCJ9XG5cdFx0XHRzZWxlY3Rpb25DaGFuZ2U9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlbGVjdGlvbkNoYW5nZX1cblx0XHRcdHNob3dSb3dDb3VudD17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNob3dSb3dDb3VudH1cblx0XHRcdGhlYWRlcj17Y3VycmVudEhlYWRlcn1cblx0XHRcdGhlYWRlclZpc2libGU9e2hlYWRlckJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0aGVhZGVyTGV2ZWw9e3RhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbH1cblx0XHRcdGhlYWRlclN0eWxlPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyU3R5bGV9XG5cdFx0XHR0aHJlc2hvbGQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50aHJlc2hvbGQgPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnRocmVzaG9sZH1cblx0XHRcdHAxM25Nb2RlPXtjdXJyZW50UGVyc29uYWxpemF0aW9ufVxuXHRcdFx0cGFzdGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRiZWZvcmVFeHBvcnQ9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmJlZm9yZUV4cG9ydH1cblx0XHRcdGNsYXNzPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPT09IHRydWUgPyBcInNhcFVpU2l6ZUNvbmRlbnNlZFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubXVsdGlTZWxlY3RNb2RlfVxuXHRcdFx0c2hvd1Bhc3RlQnV0dG9uPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlUGFzdGU9e3RhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IGZhbHNlIDogcGFzdGVBY3Rpb24/LmVuYWJsZWR9XG5cdFx0XHRtb2RlbENvbnRleHRDaGFuZ2U9e21vZGVsQ29udGV4dENoYW5nZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBjcmVhdGVDdXN0b21EYXRhcyhjdXN0b21EYXRhKSxcblx0XHRcdFx0ZGF0YVN0YXRlSW5kaWNhdG9yOiBnZXREYXRhU3RhdGVJbmRpY2F0b3IocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR0eXBlOiBnZXRUYWJsZVR5cGUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRlcGVuZGVudHM6IGdldERlcGVuZGVudHModGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCB2YXJpYW50TWFuYWdlbWVudCwgY29sbGVjdGlvbkNvbnRleHQpLFxuXHRcdFx0XHRhY3Rpb25zOiBnZXRBY3Rpb25zKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpLFxuXHRcdFx0XHRyb3dTZXR0aW5nczogZ2V0Um93U2V0dGluZ3ModGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiwgcm93QWN0aW9uVHlwZSwgdGFibGVUeXBlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNvbnRleHRNZW51OiBnZXRDb250ZXh0TWVudShcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50aXR5LFxuXHRcdFx0XHRcdHJvd0FjdGlvblR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvbkluRWRpdE1vZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0Y29sdW1uczogZ2V0Q29sdW1ucyh0YWJsZVByb3BlcnRpZXMsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGRyYWdEcm9wQ29uZmlnOiBnZXREcmFnQW5kRHJvcENvbmZpZyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR2YXJpYW50OiBnZXRWYXJpYW50TWFuYWdlbWVudChcblx0XHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbCxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRxdWlja0ZpbHRlcjogZ2V0UXVpY2tGaWx0ZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y29weVByb3ZpZGVyOiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y2VsbFNlbGVjdG9yOiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzKVxuXHRcdFx0fX1cblx0XHQ8L01EQ1RhYmxlPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsWUFBWUEsQ0FDcEJDLGVBQW1DLEVBQ25DQyxXQUFvQixFQUNwQkMsU0FBb0IsRUFDcEJDLGNBQXNCLEVBQ2dDO0lBQ3RELE1BQU1DLFVBQVUsR0FBR0gsV0FBVyxDQUFDSSxTQUFTLENBQUMsQ0FBQztJQUMxQyxRQUFRSCxTQUFTO01BQ2hCLEtBQUssV0FBVztRQUNmLE9BQ0NJLElBQUEsQ0FBQ0MsYUFBYTtVQUNiQyxZQUFZLEVBQUVSLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDRCxZQUFhO1VBQ25ERSxRQUFRLEVBQUVWLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDQyxRQUFTO1VBQzNDUCxjQUFjLEVBQUVBLGNBQWU7VUFDL0JRLGdCQUFnQixFQUFFWCxlQUFlLENBQUNTLE9BQU8sQ0FBQ0csaUJBQWtCO1VBQzVEQyxlQUFlLEVBQUViLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDSSxlQUFnQjtVQUN6REMsa0JBQWtCLEVBQUVkLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDSztRQUFtQixDQUMvRCxDQUFDO01BR0osS0FBSyxXQUFXO1FBQ2YsT0FDQ1IsSUFBQSxDQUFDUyxhQUFhO1VBQ2JQLFlBQVksRUFBRVIsZUFBZSxDQUFDUyxP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
1284
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlRmlsdGVyaW5nIiwiZGF0YVN0YXRlQ2hhbmdlIiwiZ2V0RHJhZ0FuZERyb3BFbmFibGVkIiwiY29udGV4dE9iamVjdFBhdGgiLCJpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24iLCJpc1BhdGhVcGRhdGFibGUiLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsImFuZCIsIl90eXBlIiwiaWZFbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIiwiVUkiLCJJc0VkaXRhYmxlIiwiZ2V0RGVwZW5kZW50cyIsInRhYmxlUHJvcGVydGllcyIsInBhcmFtZXRlcnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImlkIiwiY29udGVudElkIiwidHlwZSIsImRlcGVuZGVudHMiLCJjdXRBY3Rpb24iLCJhY3Rpb25zIiwiZmluZCIsImEiLCJrZXkiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJpc1RlbXBsYXRlZCIsInB1c2giLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImdldEN1dEhhbmRsZXIiLCJjb21tYW5kIiwiZW5hYmxlZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsInJvd0FjdGlvbnMiLCJUYWJsZVJvd0FjdGlvblR5cGUiLCJOYXZpZ2F0aW9uIiwiZ2V0Q29udGV4dE1lbnUiLCJuYXZpZ2F0aW9uSW5FZGl0TW9kZSIsIm1lbnVJdGVtcyIsImdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZSIsImdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlIiwiZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUiLCJNZW51IiwiaXRlbVNlbGVjdGVkIiwiY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiLCJnZXREZXBlbmRlbnRzRm9yQ29udGV4dE1lbnUiLCJ0YWJsZUlkIiwiTWVudUl0ZW0iLCJzdGFydHNTZWN0aW9uIiwidGV4dCIsImNvbnRleHRNZW51U2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwibm90IiwicGF0aEluTW9kZWwiLCJjb250ZXh0TWVudU9wZW5Jbk5ld1RhYiIsImVuYWJsZWRGb3JDb250ZXh0TWVudSIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiaGVhZGVyTGV2ZWwiLCJWYXJpYW50TWFuYWdlbWVudCIsInNob3dTZXRBc0RlZmF1bHQiLCJ2YXJpYW50U2VsZWN0ZWQiLCJzYXZlIiwidmFyaWFudFNhdmVkIiwiZ2V0UXVpY2tGaWx0ZXIiLCJxdWlja0ZpbHRlcnMiLCJmaWx0ZXJzIiwiUXVpY2tGaWx0ZXJTZWxlY3RvciIsInBhdGhzIiwibWFwIiwiYW5ub3RhdGlvblBhdGgiLCJzaG93Q291bnRzIiwiZ2V0Q29weVByb3ZpZGVyIiwidmlzaWJsZUV4cHJlc3Npb24iLCJkaXNhYmxlQ29weVRvQ2xpcGJvYXJkIiwiQ29weVByb3ZpZGVyIiwiZ2V0Q2VsbFNlbGVjdG9yIiwiaW5jbHVkZXMiLCJDZWxsU2VsZWN0b3IiLCJvciIsInJhbmdlTGltaXQiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uTW9kZSIsIm5hbWUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93QWN0aW9uIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGFzIiwidmFsdWUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiYXBwbHkiLCJhcHBseUVuYWJsZWQiLCJnZXREcmFnQW5kRHJvcENvbmZpZyIsIkRyYWdEcm9wQ29uZmlnIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkcm9wUG9zaXRpb24iLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJkcmFnZ2FibGUiLCJkcm9wcGFibGUiLCJkcmFnU3RhcnQiLCJkcmFnU3RhcnREb2N1bWVudCIsImRyYWdFbnRlciIsImRyYWdFbnRlckRvY3VtZW50IiwiZHJvcCIsImRyb3BEb2N1bWVudCIsImZvckNvbnRleHRNZW51IiwiZGF0YUZpZWxkIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsImFjdGlvbkNvbnRleHRQYXRoIiwiZ2V0QWN0aW9uQ29udGV4dCIsIm1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYWN0aW9uQ29udGV4dCIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc0JvdW5kIiwiQWN0aW9uVGFyZ2V0IiwiaXNPcGVyYXRpb25BdmFpbGFibGUiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidmFsdWVPZiIsImRpc3BsYXlDb21tYW5kQWN0aW9uIiwiVGFibGVIZWxwZXIiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFjdGlvblBhcmFtZXRlcnMiLCJvbkV4ZWN1dGVBY3Rpb24iLCJnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIiLCJvbkV4ZWN1dGVJQk4iLCJnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIiLCJvbkV4ZWN1dGVNYW5pZmVzdCIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiaXNJQk5FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkIiwiUmVxdWlyZXNDb250ZXh0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzQWN0aW9uRW5hYmxlZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZCIsIkFjdGlvbiIsImVuYWJsZU9uU2VsZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsImlzRW5hYmxlZCIsImdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24iLCJnZXRDb3JlUmVxdWlyZSIsImN1c3RvbU1vZHVsZXMiLCJhZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzIiwibW9kdWxlIiwiaW5kZXgiLCJqb2luIiwiZ2V0Q29tcHV0ZWRDb2x1bW4iLCJjb2x1bW4iLCJlbmFibGVBbmFseXRpY3MiLCJpc0RyYWZ0SW5kaWNhdG9yIiwiQ29sdW1uIiwiaGVhZGVyVmlzaWJsZSIsInByb3BlcnR5S2V5IiwiaGVhZGVyIiwibGFiZWwiLCJ3aWR0aCIsIkRyYWZ0SW5kaWNhdG9yIiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiY29udGV4dFBhdGgiLCJnZXRQYXRoIiwiRW50aXR5IiwiSXNBY3RpdmUiLCJIYXNEcmFmdCIsInVzZWRJblRhYmxlIiwidXNlZEluQW5hbHl0aWNhbFRhYmxlIiwiaXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiU2l0dWF0aW9uc0luZGljYXRvciIsImdldFNsb3RDb2x1bW4iLCJpc1JlYWRPbmx5IiwidGVtcGxhdGUiLCJzdGFydHNXaXRoIiwiU2xvdENvbHVtbiIsInRlbXBsYXRlSWQiLCJoQWxpZ24iLCJob3Jpem9udGFsQWxpZ24iLCJyZXF1aXJlZCIsImV4dGVuZGVkU2V0dGluZ3MiLCJSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MiLCJpbXBvcnRhbmNlIiwiZ2V0RHJhZnRJbmRpY2F0b3IiLCJmb3JtYXRPcHRpb25zIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiRm9ybUVsZW1lbnRXcmFwcGVyIiwiSWNvbkFuZFRleHQiLCJnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nIiwiZmllbGRHcm91cE5hbWUiLCJhcmlhTGFiZWxsZWRCeSIsImdldFNpdHVhdGlvbkluZGljYXRvciIsIk9iamVjdFN0YXR1cyIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImNsYXNzIiwic3RhdGUiLCJnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZSIsImRhdGFGaWVsZENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJpc0RhdGFGaWVsZCIsIlZhbHVlIiwiJHRhcmdldCIsImlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImhhc0RhdGFQb2ludFRhcmdldCIsIlRhcmdldCIsImdldENyZWF0aW9uVGVtcGxhdGUiLCJpc1RhYmxlUmVhZE9ubHkiLCJmaWVsZE1vZGUiLCJjb2x1bW5FZGl0TW9kZSIsImRhdGFGaWVsZE9iamVjdCIsInJlYWN0aXZlQXJlYU1vZGUiLCJ0ZXh0TGluZXNFZGl0IiwidGV4dE1heExpbmVzIiwidGV4dE1heExlbmd0aCIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXkiLCJ0ZXh0QWxpZ25Nb2RlIiwic2VtYW50aWNLZXlTdHlsZSIsImhhc0RyYWZ0SW5kaWNhdG9yIiwic2hvd0ljb25VcmwiLCJJbmxpbmUiLCJJY29uVXJsIiwiaWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzQ3VycmVuY3lPclVuaXRBbGlnbmVkIiwiZGF0ZVRpbWVTdHlsZSIsIkZpZWxkIiwidmhJZFByZWZpeCIsImVkaXRNb2RlIiwibWV0YVBhdGgiLCJ3cmFwIiwiY2hhbmdlIiwiZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93IiwiRmllbGRGb3JtYXRPcHRpb25zIiwiZ2V0TWFjcm9GaWVsZFRlbXBsYXRlIiwiaXNDb21wYWN0VHlwZSIsInRleHRBbGlnbiIsInNob3dFbXB0eUluZGljYXRvciIsImNsYXNzTmFtZSIsInR5cGVDb25maWciLCJpc0FuYWx5dGljcyIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImNvbXBhY3RTZW1hbnRpY0tleSIsImlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3ciLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJsaXZlQ2hhbmdlIiwiZmllbGRMaXZlQ2hhbmdlIiwibmF2aWdhdGVBZnRlckFjdGlvbiIsImlzTmF2aWdhYmxlIiwiZ2V0Q29sdW1uQ29udGVudFRlbXBsYXRlIiwiZGF0YUZpZWxkT1AiLCJjcmVhdGlvblRlbXBsYXRlIiwicmVhZE9ubHkiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJzaG93T25seUNoYXJ0Iiwic2V0dGluZ3MiLCJzaG93TWljcm9DaGFydExhYmVsIiwibWljcm9DaGFydFNpemUiLCJtaWNyb0NoYXJ0Q29sbGVjdGlvbiIsImdldE1vZGVsIiwiZ2V0TmF2aWdhdGlvbkNvbnRleHQiLCJNaWNyb0NoYXJ0Iiwic2l6ZSIsImhpZGVPbk5vRGF0YSIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJpc1RydXRoeSIsIklzSW5hY3RpdmUiLCJlcXVhbCIsIk11bHRpVmFsdWVGaWVsZEJsb2NrIiwidXNlUGFyZW50QmluZGluZ0NhY2hlIiwiZGlzYWJsZU93blJlcXVlc3RPbk1WRiIsImZpZWxkR3JvdXAiLCJkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCIsImZpZWxkR3JvdXBDb2xlY3Rpb25MZW5ndGgiLCJEYXRhIiwiZmllbGRHcm91cERhdGFGaWVsZCIsImZpZWxkR3JvdXBEYXRhRmllbGRJZHgiLCJmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCIsImZpZWxkR3JvdXBEYXRhRmllbGRPUCIsImZpZWxkR3JvdXBMYWJlbCIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJfanN4cyIsIkhCb3giLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImFsaWduSXRlbXMiLCJidWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zIiwiTGFiZWwiLCJnZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZCIsImdldFRleHQiLCJWQm94IiwibGF5b3V0RGF0YSIsIkZsZXhJdGVtRGF0YSIsImdyb3dGYWN0b3IiLCJnZXRDb2x1bW5TdGFibGVJZCIsImdldE1hcmdpbkNsYXNzIiwiZHJhZnRJbmRpY2F0b3IiLCJzaXR1YXRpb25JbmRpY2F0b3IiLCJnZXRWQm94VmlzaWJpbGl0eSIsIkZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImdldENvbHVtblRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkRGVmYXVsdCIsImRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCIsInRlbXBsYXRlcyIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiQ29tbW9uVXRpbHMiLCJpc1NtYWxsRGV2aWNlIiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRUZXh0T25BY3Rpb25GaWVsZCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtaW5XaWR0aCIsImdldENvbHVtbkFsaWdubWVudCIsInNldEhlYWRlckxhYmVsVmlzaWJpbGl0eSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRDb2x1bW5zIiwiY29sdW1ucyIsImF2YWlsYWJpbGl0eSIsIkxvZyIsImVycm9yIiwiRXJyb3IiLCJnZXREZXNpZ250aW1lIiwiZ2V0TURDUDEzbk1vZGUiLCJzdHJpbmdNb2RlIiwiVGFibGVQMTNuTW9kZSIsIkFnZ3JlZ2F0ZSIsIlNvcnQiLCJGaWx0ZXIiLCJHcm91cCIsImdldE1EQ1RhYmxlVGVtcGxhdGUiLCJuYXZpZ2F0aW9uSW5mbyIsInJvdXRlUGF0aCIsInRhcmdldEluZm9ybWF0aW9uIiwiYXBwQ29tcG9uZW50IiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJfZ2V0VGFyZ2V0SW5mb3JtYXRpb24iLCJvcHRpb25zIiwib3BlbkluRWRpdE1vZGUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiTW9kZWxIZWxwZXIiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsImRlbGVnYXRlIiwiZ2V0RGVsZWdhdGUiLCJpc0FscCIsImVudGl0eU5hbWUiLCJjdXJyZW50SGVhZGVyIiwiaGVhZGVyQmluZGluZ0V4cHJlc3Npb24iLCJidWlsZEV4cHJlc3Npb25Gb3JIZWFkZXJWaXNpYmxlIiwidGFiVGl0bGUiLCJtb2RlbENvbnRleHRDaGFuZ2UiLCJ0YWJsZUNvbnRleHRDaGFuZ2UiLCJsaW5lSXRlbSIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJuYXZpZ2F0aW9uUGF0aCIsImlzU2luZ2xldG9uIiwiZHJhZnQiLCJkZXNpZ250aW1lIiwib3ZlcnJpZGVSb3dQcmVzcyIsImFjdGlvblR5cGUiLCJzaG93Q3JlYXRlIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiY3VycmVudFBlcnNvbmFsaXphdGlvbiIsInBlcnNvbmFsaXphdGlvbiIsInAxM25Nb2RlIiwibW9kZSIsInNwbGl0IiwidHJpbSIsImV4Y2x1ZGVHcm91cEZyb21QMTNuIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGVBdEVuZCIsImhpZGRlbkZpbHRlcnMiLCJnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiZXhwb3J0UmVxdWVzdFNpemUiLCJNRENUYWJsZSIsInNvcnRDb25kaXRpb25zIiwiZ3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImJ1c3lJbmRpY2F0b3JEZWxheSIsImVuYWJsZUV4cG9ydCIsIkpTT04iLCJwYXJzZSIsImJlZm9yZU9wZW5Db250ZXh0TWVudSIsImF1dG9CaW5kT25Jbml0IiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJzZWxlY3Rpb25Nb2RlIiwic2VsZWN0aW9uQ2hhbmdlIiwic2hvd1Jvd0NvdW50IiwiaGVhZGVyU3R5bGUiLCJ0aHJlc2hvbGQiLCJwYXN0ZSIsImJlZm9yZUV4cG9ydCIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwibXVsdGlTZWxlY3RNb2RlIiwic2hvd1Bhc3RlQnV0dG9uIiwiZW5hYmxlUGFzdGUiLCJkYXRhU3RhdGVJbmRpY2F0b3IiLCJyb3dTZXR0aW5ncyIsImNvbnRleHRNZW51IiwiZHJhZ0Ryb3BDb25maWciLCJjcmVhdGlvblJvdyIsInZhcmlhbnQiLCJxdWlja0ZpbHRlciIsImNvcHlQcm92aWRlciIsImNlbGxTZWxlY3RvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWRjVGFibGVUZW1wbGF0ZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnQsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7XG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlcyxcblx0dHlwZSBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGlmRWxzZSwgaXNDb25zdGFudCwgaXNUcnV0aHksIG5vdCwgb3IsIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiwgU3RyaWN0UHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgRm9ybUVsZW1lbnRXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Gb3JtRWxlbWVudFdyYXBwZXJcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaGFzRGF0YVBvaW50VGFyZ2V0LCBpc0RhdGFGaWVsZCwgaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVUeXBlLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21CYXNlZFRhYmxlQ29sdW1uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMsIHR5cGUgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBFbnRpdHksIFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtLCBpc0Fubm90YXRpb25PZlR5cGUsIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGlzUGF0aFVwZGF0YWJsZSwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlVGltZVN0eWxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0FjdGlvbkNvbW1hbmRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEsIGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvVFNYVXRpbHNcIjtcbmltcG9ydCBEcmFmdEluZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kcmFmdEluZGljYXRvci9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nLCBnZXRWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvVGFibGVUZW1wbGF0aW5nXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaXR1YXRpb25zL1NpdHVhdGlvbnNJbmRpY2F0b3JcIjtcbmltcG9ydCB7IGdldFRhYmxlQWN0aW9uc1RlbXBsYXRlLCBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9BY3Rpb25zVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFF1aWNrRmlsdGVyU2VsZWN0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IFNsb3RDb2x1bW4gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvU2xvdENvbHVtblwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQ3JlYXRpb25PcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQ3JlYXRpb25PcHRpb25zXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCB7IGdldFVwbG9hZFBsdWdpbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL3VwbG9hZFRhYmxlL1VwbG9hZFRhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgeyBPYmplY3RNYXJrZXJWaXNpYmlsaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBDZWxsU2VsZWN0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ2VsbFNlbGVjdG9yXCI7XG5pbXBvcnQgQ29udGV4dE1lbnVTZXR0aW5nIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NvbnRleHRNZW51U2V0dGluZ1wiO1xuaW1wb3J0IENvcHlQcm92aWRlciBmcm9tIFwic2FwL20vcGx1Z2lucy9Db3B5UHJvdmlkZXJcIjtcbmltcG9ydCBEYXRhU3RhdGVJbmRpY2F0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvRGF0YVN0YXRlSW5kaWNhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlTGV2ZWwgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgUHJpb3JpdHkgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgVGFibGVQMTNuTW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9UYWJsZVAxM25Nb2RlXCI7XG5pbXBvcnQgVGFibGVSb3dBY3Rpb25UeXBlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL1RhYmxlUm93QWN0aW9uVHlwZVwiO1xuaW1wb3J0IFBlcnNpc3RlbmNlUHJvdmlkZXIgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9QZXJzaXN0ZW5jZVByb3ZpZGVyXCI7XG5pbXBvcnQgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IENyZWF0aW9uUm93IGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NyZWF0aW9uUm93XCI7XG5pbXBvcnQgRHJhZ0Ryb3BDb25maWcgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvRHJhZ0Ryb3BDb25maWdcIjtcbmltcG9ydCBHcmlkVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0dyaWRUYWJsZVR5cGVcIjtcbmltcG9ydCBSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZVRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9SZXNwb25zaXZlVGFibGVUeXBlXCI7XG5pbXBvcnQgUm93QWN0aW9uSXRlbSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Sb3dBY3Rpb25JdGVtXCI7XG5pbXBvcnQgUm93U2V0dGluZ3MgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUm93U2V0dGluZ3NcIjtcbmltcG9ydCBUcmVlVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RyZWVUYWJsZVR5cGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgTWljcm9DaGFydCBmcm9tIFwiLi4vTWljcm9DaGFydFwiO1xuaW1wb3J0IEZpZWxkRm9ybWF0T3B0aW9ucyBmcm9tIFwiLi4vZmllbGQvRmllbGRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuZXhwb3J0IHR5cGUgVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyA9IHtcblx0bWV0YVBhdGg6IENvbnRleHQ7XG5cdGNvbnZlcnRlZE1ldGFkYXRhOiBDb252ZXJ0ZWRNZXRhZGF0YTtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyO1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0YWJsZSB0eXBlIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGVcbiAqIEBwYXJhbSBzZWxlY3Rpb25MaW1pdFxuICogQHJldHVybnMgVGhlIHRhYmxlIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVUeXBlKFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0X2NvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyXG4pOiBSZXNwb25zaXZlVGFibGVUeXBlIHwgR3JpZFRhYmxlVHlwZSB8IFRyZWVUYWJsZVR5cGUge1xuXHRjb25zdCBjb2xsZWN0aW9uID0gX2NvbGxlY3Rpb24uZ2V0T2JqZWN0KCk7XG5cdHN3aXRjaCAodGFibGVUeXBlKSB7XG5cdFx0Y2FzZSBcIkdyaWRUYWJsZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEdyaWRUYWJsZVR5cGVcblx0XHRcdFx0XHRyb3dDb3VudE1vZGU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZX1cblx0XHRcdFx0XHRyb3dDb3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnR9XG5cdFx0XHRcdFx0c2VsZWN0aW9uTGltaXQ9e3NlbGVjdGlvbkxpbWl0fVxuXHRcdFx0XHRcdGZpeGVkQ29sdW1uQ291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50fVxuXHRcdFx0XHRcdHNjcm9sbFRocmVzaG9sZD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2Nyb2xsVGhyZXNob2xkfVxuXHRcdFx0XHRcdGVuYWJsZUNvbHVtbkZyZWV6ZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQ29sdW1uRnJlZXplfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJUcmVlVGFibGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxUcmVlVGFibGVUeXBlXG5cdFx0XHRcdFx0cm93Q291bnRNb2RlPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudE1vZGV9XG5cdFx0XHRcdFx0cm93Q291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50fVxuXHRcdFx0XHRcdGZpeGVkQ29sdW1uQ291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZyb3plbkNvbHVtbkNvdW50fVxuXHRcdFx0XHRcdHNjcm9sbFRocmVzaG9sZD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2Nyb2xsVGhyZXNob2xkfVxuXHRcdFx0XHRcdGVuYWJsZUNvbHVtbkZyZWV6ZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQ29sdW1uRnJlZXplfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8UmVzcG9uc2l2ZVRhYmxlVHlwZVxuXHRcdFx0XHRcdHNob3dEZXRhaWxzQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdGRldGFpbHNCdXR0b25TZXR0aW5nPXtbUHJpb3JpdHkuTG93LCBQcmlvcml0eS5NZWRpdW0sIFByaW9yaXR5Lk5vbmVdfVxuXHRcdFx0XHRcdGdyb3dpbmdNb2RlPXtjb2xsZWN0aW9uLiRraW5kID09PSBcIkVudGl0eVNldFwiID8gXCJTY3JvbGxcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRwb3BpbkxheW91dD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucG9waW5MYXlvdXR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBEYXRhU2F0ZUluZGljYXRvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIGRhdGFzdGF0ZSBpbmRpY2F0b3JcbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IERhdGFTdGF0ZUluZGljYXRvciB7XG5cdHJldHVybiAoXG5cdFx0PERhdGFTdGF0ZUluZGljYXRvclxuXHRcdFx0ZmlsdGVyPXtoYW5kbGVyUHJvdmlkZXIuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyfVxuXHRcdFx0ZW5hYmxlRmlsdGVyaW5nPXt0cnVlfVxuXHRcdFx0ZGF0YVN0YXRlQ2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZGF0YVN0YXRlQ2hhbmdlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBkcmFnIGFuZCBkcm9wIGVuYWJsZW1lbnQuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGhcbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0RHJhZ0FuZERyb3BFbmFibGVkKFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbiA9IGlzUGF0aFVwZGF0YWJsZShjb250ZXh0T2JqZWN0UGF0aCwge1xuXHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udGV4dE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0ID0gaXNQYXRoVXBkYXRhYmxlKGNvbnRleHRPYmplY3RQYXRoLCB7XG5cdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udGV4dE9iamVjdFBhdGguY29udmVydGVkVHlwZXMsIG5hdmlnYXRpb25QYXRocylcblx0fSk7XG5cblx0aWYgKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0ID09PSBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHQvLyBMaXN0UmVwb3J0IGNhc2U6IHdlIGFsbG93IGRyYWcgYW5kIGRyb3Agb24gZHJhZnQtZW5hYmxlZCBlbnRpdGllc1xuXHRcdGlmICgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0XHRpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdFx0XHQ/IGlmRWxzZShpc0NvbnN0YW50KGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0KSwgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQsIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0XHRcdDogaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUhXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPYmplY3RQYWdlIGNhc2U6IHdlIGFsbG93IGRyYWcgYW5kIGRyb3AgaW4gZWRpdCBtb2RlXG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0XHQ/IGlmRWxzZShpc0NvbnN0YW50KGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0KSwgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQsIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0XHQ6IGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbixcblx0XHRcdFVJLklzRWRpdGFibGUsXG5cdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUhXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwZW5kZW50cyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0dmFyaWFudE1hbmFnZW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dFxuKTogVUk1RWxlbWVudFtdIHtcblx0Y29uc3QgaWQgPSB0YWJsZVByb3BlcnRpZXMuY29udGVudElkO1xuXHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZTtcblx0Y29uc3QgaGFuZGxlclByb3ZpZGVyID0gcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXI7XG5cblx0Y29uc3QgZGVwZW5kZW50czogVUk1RWxlbWVudFtdID0gW107XG5cdGNvbnN0IGN1dEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGN1dEFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDdXRIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkN1dFwiXG5cdFx0XHRcdGVuYWJsZWQ9e2N1dEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBjb3B5QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNvcHlBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q29weUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ29weVwiXG5cdFx0XHRcdGVuYWJsZWQ9e2NvcHlBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcGFzdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKHBhc3RlQWN0aW9uPy52aXNpYmxlICE9PSBcImZhbHNlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJQYXN0ZVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGNyZWF0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChcblx0XHR0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQgJiZcblx0XHRjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJlxuXHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlID09PSB1bmRlZmluZWQgJiZcblx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4gPT09IGZhbHNlXG5cdCkge1xuXHRcdC8vIFRoZSBzaG9ydGN1dCBpcyBub3QgZW5hYmxlZCBpbiBjYXNlIG9mIGEgY3JlYXRlIG1lbnUgKGkuZS4gd2hlbiBub2RlVHlwZSBpcyBkZWZpbmVkKVxuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIGZhbHNlKX1cblx0XHRcdFx0dmlzaWJsZT17Y3JlYXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtjcmVhdGVBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGNvbW1hbmQ9XCJDcmVhdGVcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXREZWxldGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHR2aXNpYmxlPXtkZWxldGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2RlbGV0ZUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8vIE1vdmUgdXAgYW5kIGRvd24gYWN0aW9uc1xuXHRjb25zdCBtb3ZlVXBBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1vdmVEb3duQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bikgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHRtb3ZlVXBBY3Rpb24gJiZcblx0XHRtb3ZlRG93bkFjdGlvbiAmJlxuXHRcdG1vdmVVcEFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHRtb3ZlRG93bkFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0KSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnRVcFwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIoZmFsc2UsIGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duXCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZURvd25BY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKFxuXHRcdFx0YWN0aW9uTmFtZSxcblx0XHRcdGFjdGlvbixcblx0XHRcdGZhbHNlLFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGhcblx0XHQpO1xuXHRcdGlmIChhY3Rpb25Db21tYW5kKSB7XG5cdFx0XHRkZXBlbmRlbnRzLnB1c2goYWN0aW9uQ29tbWFuZCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIk5vbmVcIikge1xuXHRcdC8vIFBlcnNpc3RlbmNlIHByb3ZpZGVyIG9mZmVycyBwZXJzaXN0aW5nIHBlcnNvbmFsaXphdGlvbiBjaGFuZ2VzIHdpdGhvdXQgdmFyaWFudCBtYW5hZ2VtZW50XG5cdFx0ZGVwZW5kZW50cy5wdXNoKDxQZXJzaXN0ZW5jZVByb3ZpZGVyIGlkPXtnZW5lcmF0ZShbaWQsIFwiUGVyc2lzdGVuY2VQcm92aWRlclwiXSl9IGZvcj17aWR9IC8+KTtcblx0fVxuXG5cdGRlcGVuZGVudHMucHVzaCg8Q29udGV4dE1lbnVTZXR0aW5nIHNjb3BlPVwiU2VsZWN0aW9uXCIgLz4pO1xuXG5cdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goZ2V0VXBsb2FkUGx1Z2luKHRhYmxlRGVmaW5pdGlvbiwgaWQsIGhhbmRsZXJQcm92aWRlcikpO1xuXHR9XG5cblx0cmV0dXJuIGRlcGVuZGVudHM7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGFibGUgYWN0aW9ucy5cbiAqIEBwYXJhbSB0YWJsZVxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dFxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9ucyhcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBDb250cm9sW10gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhY3Rpb25zOiBDb250cm9sW10gPSBbXTtcblx0aWYgKHRhYmxlLmRpc3BsYXlTZWdtZW50ZWRCdXR0b24pIHtcblx0XHRjb25zdCBhbHBCdXR0b25JdGVtczogU2VnbWVudGVkQnV0dG9uSXRlbVtdID0gW107XG5cdFx0aWYgKENvbW1vbkhlbHBlci5pc0Rlc2t0b3AoKSkge1xuXHRcdFx0YWxwQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0hZQlJJRF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRcdGtleT1cIkh5YnJpZFwiXG5cdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vY2hhcnQtdGFibGUtdmlld1wiXG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9DSEFSVF9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRrZXk9XCJDaGFydFwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL2Jhci1jaGFydFwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0YWxwQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdDxTZWdtZW50ZWRCdXR0b25JdGVtXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCJcblx0XHRcdFx0a2V5PVwiVGFibGVcIlxuXHRcdFx0XHRpY29uPVwic2FwLWljb246Ly90YWJsZS12aWV3XCJcblx0XHRcdC8+XG5cdFx0KTtcblxuXHRcdGFjdGlvbnMucHVzaChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGxheW91dEluZm9ybWF0aW9uPXsneyBhZ2dyZWdhdGlvbk5hbWU6IFwiZW5kXCIsIGFsaWdubWVudDogXCJFbmRcIiB9J31cblx0XHRcdFx0dmlzaWJsZT17XCJ7PSAke3BhZ2VJbnRlcm5hbD5hbHBDb250ZW50Vmlld30gPT09ICdUYWJsZScgfVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogKFxuXHRcdFx0XHRcdFx0PFNlZ21lbnRlZEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKX1cblx0XHRcdFx0XHRcdFx0c2VsZWN0PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5zZWdtZW50ZWRCdXR0b25QcmVzc31cblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk9XCJ7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM6IGFscEJ1dHRvbkl0ZW1zXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L1NlZ21lbnRlZEJ1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fVxuXG5cdGFjdGlvbnMucHVzaCguLi5nZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSh0YWJsZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpKTtcblxuXHRyZXR1cm4gYWN0aW9ucy5sZW5ndGggPiAwID8gYWN0aW9ucyA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0Um93U2V0dGluZ3MoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRyb3dBY3Rpb25UeXBlOiBUYWJsZVJvd0FjdGlvblR5cGUgfCB1bmRlZmluZWQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFJvd1NldHRpbmdzIHtcblx0Y29uc3Qgcm93QWN0aW9uSXRlbSA9IChcblx0XHQ8Um93QWN0aW9uSXRlbVxuXHRcdFx0dHlwZT17cm93QWN0aW9uVHlwZX1cblx0XHRcdHByZXNzPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIucm93UHJlc3N9XG5cdFx0XHR2aXNpYmxlPXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnZpc2libGV9XG5cdFx0Lz5cblx0KTtcblxuXHRyZXR1cm4gKFxuXHRcdDxSb3dTZXR0aW5ncyBuYXZpZ2F0ZWQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93TmF2aWdhdGVkfSBoaWdobGlnaHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfT5cblx0XHRcdHt7XG5cdFx0XHRcdHJvd0FjdGlvbnM6IHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uID8gcm93QWN0aW9uSXRlbSA6IHVuZGVmaW5lZFxuXHRcdFx0fX1cblx0XHQ8L1Jvd1NldHRpbmdzPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEBwYXJhbSByb3dBY3Rpb25UeXBlXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25JbkVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBtZW51XG4gKi9cbmZ1bmN0aW9uIGdldENvbnRleHRNZW51KFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0bmF2aWdhdGlvbkluRWRpdE1vZGU6IGJvb2xlYW5cbik6IE1lbnUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZW51SXRlbXMgPSBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0aWYgKHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uSW5FZGl0TW9kZSkge1xuXHRcdG1lbnVJdGVtcy5wdXNoKGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCB0YWJsZVByb3BlcnRpZXMuY29udGVudElkKSk7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXHRpZiAobWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUgaXRlbVNlbGVjdGVkPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZH0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHRcdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnU+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gdGFibGVJZFxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsIHRhYmxlSWQ6IHN0cmluZyk6IE1lbnVJdGVtIHtcblx0Ly8gVGhlIHZpc2libGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgYXQgcnVudGltZSB3aGVuIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgaXMgYXZhaWxhYmxlIGFuZCBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ29udGV4dE1lbnVcIiwgXCJDb2xsYWJvcmF0aW9uTWFuYWdlclwiXSl9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9XG5cdFx0XHRlbmFibGVkPVwiez0gJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID4gMH1cIlxuXHRcdFx0dmlzaWJsZT17ZmFsc2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBNZW51SXRlbSB7XG5cdC8vIFRoZSAnT3BlbiBpbiBOZXcgVGFiJyBhY3Rpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGZvciBzdGlja3kgc2Vzc2lvbnMgaW4gZWRpdCBtb2RlXG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGUgc2Vjb25kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZSA9IGFuZChcblx0XHRub3QoYW5kKHBhdGhJbk1vZGVsKFwiL3Nlc3Npb25PblwiLCBcImludGVybmFsXCIpLCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0bm90KHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIikpXG5cdCk7XG5cblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntBUEk6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJJ31cIlxuXHRcdFx0c3RhcnRzU2VjdGlvbj17dHJ1ZX1cblx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfQ09OVEVYVF9NRU5VX09QRU5fSU5fTkVXX1RBQn1cIlxuXHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYn1cblx0XHRcdGVuYWJsZWQ9XCJ7PSAke2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPiAwfVwiXG5cdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51IGRlcGVuZGVudHMuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gIHRoZSBNZW51IGRlcGVuZGVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXQ6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHk6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKGFjdGlvbk5hbWUsIGFjdGlvbiwgdHJ1ZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlcGVuZGVudHMubGVuZ3RoID4gMCA/IGRlcGVuZGVudHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBWYXJpYW50TWFuYWdlbWVudCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBoZWFkZXJMZXZlbFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcsXG5cdGlkOiBzdHJpbmcsXG5cdGhlYWRlckxldmVsOiBUaXRsZUxldmVsLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJWTVwiXSl9XG5cdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdHNlbGVjdD17aGFuZGxlclByb3ZpZGVyLnZhcmlhbnRTZWxlY3RlZH1cblx0XHRcdFx0aGVhZGVyTGV2ZWw9e2hlYWRlckxldmVsfVxuXHRcdFx0XHRzYXZlPXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNhdmVkfVxuXHRcdFx0XHRmb3I9e1tpZF19XG5cdFx0XHQ+PC9WYXJpYW50TWFuYWdlbWVudD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBRdWlja1ZhcmlhbnRTZWxlY3Rpb24gY29udHJvbCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcXVpY2tGaWx0ZXJzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycztcblx0aWYgKHF1aWNrRmlsdGVycykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UXVpY2tGaWx0ZXJTZWxlY3RvclxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiUXVpY2tGaWx0ZXJDb250YWluZXJcIl0pfVxuXHRcdFx0XHRwYXRocz17cXVpY2tGaWx0ZXJzLnBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5hbm5vdGF0aW9uUGF0aCl9XG5cdFx0XHRcdHNob3dDb3VudHM9e3F1aWNrRmlsdGVycy5zaG93Q291bnRzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIENvcHlQcm92aWRlciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENvcHlQcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENvcHlQcm92aWRlciB7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXG5cdGxldCB2aXNpYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQpIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEZvciBhIFRyZWVUYWJsZSwgdGhlIGNvcHkgYnV0dG9uIHNoYWxsIGJlIHZpc2libGUgb25seSB3aGVuIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWRcblx0XHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gTGlzdFJlcG9ydDogZW5hYmxlIGNvcHkgaWYgdGhlIGVudGl0eSBpcyBub3QgZHJhZnQtZW5hYmxlZFxuXHRcdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCA9PT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT2JqZWN0UGFnZTogZW5hYmxlIGNvcHkgaW4gcmVhZC1vbmx5XG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdHJldHVybiA8Q29weVByb3ZpZGVyIHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufSAvPjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENlbGxTZWxlY3RvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENlbGxTZWxlY3RvclxuICovXG5mdW5jdGlvbiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENlbGxTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAoXG5cdFx0IXRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkICYmXG5cdFx0dGFibGVUeXBlICYmXG5cdFx0W1wiUmVzcG9uc2l2ZVRhYmxlXCIsIFwiR3JpZFRhYmxlXCIsIFwiVHJlZVRhYmxlXCJdLmluY2x1ZGVzKHRhYmxlVHlwZSlcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDZWxsU2VsZWN0b3Jcblx0XHRcdFx0ZW5hYmxlZD17b3IoXG5cdFx0XHRcdFx0dGFibGVUeXBlICE9PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0XHRcdG5vdChnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSlcblx0XHRcdFx0KX1cblx0XHRcdFx0cmFuZ2VMaW1pdD17MjAwfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBDcmVhdGlvblJvdyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIENyZWF0aW9uUm93XG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IENyZWF0aW9uUm93IHwgdW5kZWZpbmVkIHtcblx0aWYgKCh0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIGFzIHN0cmluZykgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdGNvbnN0IGNyZWF0aW9uUm93QWN0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3cpIGFzXG5cdFx0XHR8IFN0YW5kYXJkQWN0aW9uXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoY3JlYXRpb25Sb3dBY3Rpb24/LmlzVGVtcGxhdGVkKSB7XG5cdFx0XHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlQ3VzdG9tRGF0YXMoW1xuXHRcdFx0XHR7IGtleTogXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSB9LFxuXHRcdFx0XHR7IGtleTogXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gfVxuXHRcdFx0XSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDcmVhdGlvblJvd1xuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93XSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Y3JlYXRpb25Sb3dBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXBwbHk9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRcdGFwcGx5RW5hYmxlZD17Y3JlYXRpb25Sb3dBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY3VzdG9tRGF0YVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ3JlYXRpb25Sb3c+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZHJhZyBhbmQgZHJvcCBjb25maWcgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcENvbmZpZyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBEcmFnRHJvcENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJhZ0Ryb3BDb25maWdcblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RHJhZ0FuZERyb3BFbmFibGVkKHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbikpfVxuXHRcdFx0XHRkcm9wUG9zaXRpb249e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hbGxvd0Ryb3BCZXR3ZWVuTm9kZXMgPT09IHRydWUgPyBcIk9uT3JCZXR3ZWVuXCIgOiBcIk9uXCJ9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0ZHJvcHBhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcmFnU3RhcnQ9e2hhbmRsZXJQcm92aWRlci5kcmFnU3RhcnREb2N1bWVudH1cblx0XHRcdFx0ZHJhZ0VudGVyPXtoYW5kbGVyUHJvdmlkZXIuZHJhZ0VudGVyRG9jdW1lbnR9XG5cdFx0XHRcdGRyb3A9e2hhbmRsZXJQcm92aWRlci5kcm9wRG9jdW1lbnR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWN0aW9uQ29tbWFuZCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGFjdGlvbkNvbW1hbmRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChcblx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50PlxuKTogQ29tbWFuZEV4ZWN1dGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQocGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dCA/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9XG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGRpc3BsYXlDb21tYW5kQWN0aW9uID0gYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIgPyBpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlIDogdHJ1ZTtcblx0Y29uc3QgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5lbmFibGVkIDogYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKGRpc3BsYXlDb21tYW5kQWN0aW9uICYmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCkpKSB7XG5cdFx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblxuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRvbkV4ZWN1dGVBY3Rpb246IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uLCBmYWxzZSksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSksXG5cdFx0XHRpc0lCTkVuYWJsZWQ6XG5cdFx0XHRcdGVuYWJsZWQgPz9cblx0XHRcdFx0VGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbjogY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uOiB0YWJsZURlZmluaXRpb24gfSxcblx0XHRcdFx0XHRkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHQhIShkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0KSxcblx0XHRcdGlzQWN0aW9uRW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdChkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckFjdGlvbikuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0UGF0aCxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNFbmFibGVkOiBlbmFibGVkXG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbihjb21tYW5kLCB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMhW2FjdGlvbk5hbWVdLCBhY3Rpb25QYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgcmVxdWlyZWQgbW9kdWxlcy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Q29yZVJlcXVpcmUodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXN0b21Nb2R1bGVzID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA/PyBbXTtcblxuXHRyZXR1cm4gYHtUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZScsIEFQSTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUEknJHtjdXN0b21Nb2R1bGVzXG5cdFx0Lm1hcCgobW9kdWxlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IGAsIGN1c3RvbU1vZHVsZSR7aW5kZXggKyAxfTogJyR7bW9kdWxlfSdgKVxuXHRcdC5qb2luKFwiXCIpfX1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29tcHV0ZWQgY29sdW1uLlxuICogQ3VycmVudGx5LCB0aGlzIHJlcHJlc2VudHMgb25seSB0aGUgRHJhZnRJbmRpY2F0b3IgYW5kIHRoZSBTaXR1YXRpb25zSW5kaWNhdG9yLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb21wdXRlZCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEByZXR1cm5zIFRoZSBjb21wdXRlZCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlZENvbHVtbihcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNvbHVtbi5pc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJkcmFmdFN0YXR1c1wiXSl9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0d2lkdGg9XCIzZW1cIlxuXHRcdFx0PlxuXHRcdFx0XHQ8RHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdHZpc2libGU9e29yKG5vdChFbnRpdHkuSXNBY3RpdmUpLCBFbnRpdHkuSGFzRHJhZnQpfVxuXHRcdFx0XHRcdHVzZWRJblRhYmxlPXt0cnVlfVxuXHRcdFx0XHRcdHVzZWRJbkFuYWx5dGljYWxUYWJsZT17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChjb2x1bW4uaXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJzaXR1YXRpb25zSW5kaWNhdG9yXCJdKX1cblx0XHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbH1cblx0XHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHR3aWR0aD1cIjRlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxTaXR1YXRpb25zSW5kaWNhdG9yIGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX0gLz5cblx0XHRcdDwvQ29sdW1uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4uXG4gKiBUaGlzIGNvbHVtbiB3aWxsIGVpdGhlciByZXVzZSBhIHRlbXBsYXRlIGNvbnRyb2wgdGhhdCBpcyBkZWZpbmVkIGF0IHJ1bnRpbWUgKHRlbXBsYXRlSWQgY2FzZSksIG9yIGRlZmluZSBhIHNsb3Qgd2hlcmUgdGhlIFhNTCBjb250ZW50IGlzIGNvcGllZC5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgc2xvdCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGlzUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcmV0dXJucyBUaGUgc2xvdCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG90Q29sdW1uKHRhYmxlSWQ6IHN0cmluZywgY29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBpc1JlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkKTogQ29sdW1uIHtcblx0Y29uc3QgdGVtcGxhdGUgPVxuXHRcdHR5cGVvZiBjb2x1bW4udGVtcGxhdGUgPT09IFwic3RyaW5nXCIgJiYgIWNvbHVtbi50ZW1wbGF0ZT8uc3RhcnRzV2l0aChcIjxcIikgPyAoXG5cdFx0XHQ8U2xvdENvbHVtbiB0ZW1wbGF0ZUlkPXtjb2x1bW4udGVtcGxhdGV9IC8+XG5cdFx0KSA6IChcblx0XHRcdGNvbHVtbi50ZW1wbGF0ZVxuXHRcdCk7XG5cdHJldHVybiAoXG5cdFx0PENvbHVtblxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgY29sdW1uLmlkXSl9XG5cdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHR3aWR0aD17Y29sdW1uLndpZHRofVxuXHRcdFx0aEFsaWduPXtjb2x1bW4uaG9yaXpvbnRhbEFsaWdufVxuXHRcdFx0aGVhZGVyPXtjb2x1bW4uaGVhZGVyfVxuXHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRyZXF1aXJlZD17aXNSZWFkT25seSA/IHVuZGVmaW5lZCA6IGNvbHVtbi5yZXF1aXJlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlXG5cdFx0XHR9fVxuXHRcdDwvQ29sdW1uPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBEcmFmdEluZGljYXRvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBEcmFmdEluZGljYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogRm9ybUVsZW1lbnRXcmFwcGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgJiZcblx0XHRjb2xsZWN0aW9uLmdldE9iamVjdChcIi4vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiKSAmJlxuXHRcdGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGhcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Z2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUpfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbXCJ0aGlzPmFyaWFMYWJlbGxlZEJ5XCJdfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Gb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgU2l0dWF0aW9uSW5kaWNhdG9yIE9iamVjdFN0YXR1cy5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIE9iamVjdFN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogT2JqZWN0U3RhdHVzIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHR2aXNpYmxlPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzfVxuXHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNvbnRhaW5zX0Vycm9yc31cIlxuXHRcdFx0XHRzdGF0ZT1cIkVycm9yXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBzdHlsZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YSBmaWVsZCBjb250ZXh0LlxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgZmllbGRcbiAqIEByZXR1cm5zIFJldHVybnMgJ3Nob3J0JyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGZpZWxkIGlzIG9mIHRoZSB0eXBlICdFZG0uVGltZU9mRGF5Jywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCk6IERhdGVUaW1lU3R5bGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZGF0YUZpZWxkQ29udGV4dCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNEYXRhRmllbGQodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3QuVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0cmV0dXJuIFwic2hvcnRcIjtcblx0fVxuXHRpZiAoXG5cdFx0aXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKHRhcmdldE9iamVjdCkgJiZcblx0XHRoYXNEYXRhUG9pbnRUYXJnZXQodGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCh0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUuJHRhcmdldC50eXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHQpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNyZWF0aW9uIHJvdy5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBjb250ZXh0XG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gZW5hYmxlQW5hbHl0aWNzIFdoZXRoZXIgYW5hbHl0aWNzIGFyZSBlbmFibGVkXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHJvdy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNyZWF0aW9uTW9kZTogUHJvcGVydGllc09mPFRhYmxlQ3JlYXRpb25PcHRpb25zPiB8IHVuZGVmaW5lZCxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRkYXRhRmllbGQ6IENvbnRleHQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRlbmFibGVBbmFseXRpY3M6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKChjcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gXCJDcmVhdGlvblJvd1wiKSB7XG5cdFx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZC5nZXRPYmplY3QoKTtcblxuXHRcdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkKSxcblx0XHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0XHR9O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7VGFibGVSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWUnfVwiXG5cdFx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGQuZ2V0UGF0aCgpfVxuXHRcdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRcdGNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvd31cblx0XHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9GaWVsZD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG1hY3JvczpGaWVsZCBpbnNpZGUgdGhlIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZVxuICogQHBhcmFtIGZpZWxkTW9kZSBUaGUgZmllbGQgbW9kZVxuICogQHBhcmFtIGlzQ29tcGFjdFR5cGUgV2hldGhlciB0aGUgdGFibGUgaXMgY29tcGFjdFxuICogQHBhcmFtIHRleHRBbGlnbiBUaGUgdGV4dCBhbGlnbm1lbnRcbiAqIEBwYXJhbSBhcmlhTGFiZWxsZWRCeSBUaGUgYXJpYSBsYWJlbGxlZCBieVxuICogQHBhcmFtIHNob3dFbXB0eUluZGljYXRvciBXaGV0aGVyIHRvIHNob3cgdGhlIGVtcHR5IGluZGljYXRvclxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGlzVGFibGVSZWFkT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNDb21wYWN0VHlwZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNob3dFbXB0eUluZGljYXRvcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoaXNUYWJsZVJlYWRPbmx5KSB7XG5cdFx0Y2FzZSB0cnVlOlxuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luICYmIGNvbHVtbi50eXBlQ29uZmlnPy5jbGFzc05hbWUgPT09IFwiRWRtLlN0cmVhbVwiKSB7XG5cdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0fVxuXG5cdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk92ZXJsYXlcIiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdHRleHRMaW5lc0VkaXQ6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TGluZXNFZGl0LFxuXHRcdHRleHRNYXhMaW5lczogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyxcblx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXksXG5cdFx0dGV4dE1heExlbmd0aDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMZW5ndGgsXG5cdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdHNob3dFbXB0eUluZGljYXRvcjogc2hvd0VtcHR5SW5kaWNhdG9yLFxuXHRcdHNlbWFudGljS2V5U3R5bGU6IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFwiLFxuXHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IsXG5cdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdGZpZWxkR3JvdXBOYW1lOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUsXG5cdFx0c2hvd0ljb25Vcmw6IGRhdGFGaWVsZE9iamVjdD8uSW5saW5lICYmICEhZGF0YUZpZWxkT2JqZWN0Py5JY29uVXJsLFxuXHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRpc0FuYWx5dGljczogZW5hYmxlQW5hbHl0aWNzLFxuXHRcdGZvcklubGluZUNyZWF0aW9uUm93czogY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiLFxuXHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdGNvbXBhY3RTZW1hbnRpY0tleTogaXNDb21wYWN0VHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYCR7aXNDb21wYWN0VHlwZX1gLFxuXHRcdGRhdGVUaW1lU3R5bGU6IGdldERlZmF1bHREYXRlVGltZVN0eWxlKGRhdGFGaWVsZENvbnRleHQpLFxuXHRcdGlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3c6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsLFxuXHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0fTtcblx0cmV0dXJuIChcblx0XHQ8RmllbGRcblx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdGVkaXRNb2RlPXtjb2x1bW5FZGl0TW9kZX1cblx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0d3JhcD17dGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwifVxuXHRcdFx0Y2xhc3M9e2NsYXNzTmFtZX1cblx0XHRcdGxpdmVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5maWVsZExpdmVDaGFuZ2V9XG5cdFx0XHRhcmlhTGFiZWxsZWRCeT17YXJpYUxhYmVsbGVkQnkgPyBbYXJpYUxhYmVsbGVkQnldIDogdW5kZWZpbmVkfVxuXHRcdFx0bmF2aWdhdGVBZnRlckFjdGlvbj17Y29sdW1uLmlzTmF2aWdhYmxlfVxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0fX1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gZGF0YUZpZWxkT1AgVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZE9QOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IHsgdGVtcGxhdGU6IHN0cmluZzsgY3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZyB9IHtcblx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxldCBjcmVhdGlvblRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3M7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBpc1RhYmxlUmVhZE9ubHkgPSB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHk7XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU7XG5cdGNvbnN0IGZpZWxkTW9kZSA9IHRhYmxlUHJvcGVydGllcy5maWVsZE1vZGU7XG5cdGNvbnN0IGlzQ29tcGFjdFR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb21wYWN0VHlwZTtcblxuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRPUC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0KGlzQW5ub3RhdGlvbk9mVGVybTxDaGFydD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpKVxuXHQpIHtcblx0XHRjb25zdCBzaG93T25seUNoYXJ0ID0gKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/ICFjb2x1bW4uc2V0dGluZ3M/LnNob3dNaWNyb0NoYXJ0TGFiZWwgOiB1bmRlZmluZWQpID8/IHRydWU7XG5cdFx0Y29uc3QgbWljcm9DaGFydFNpemUgPSB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBjb2x1bW4uc2V0dGluZ3M/Lm1pY3JvQ2hhcnRTaXplID8/IFwiWFNcIiA6IFwiWFNcIjtcblx0XHRsZXQgbWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uXG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbGxlY3Rpb24uZ2V0UGF0aChkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikpKTtcblx0XHRtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvbkNvbnRleHQobWljcm9DaGFydENvbGxlY3Rpb24pKTtcblx0XHQvL1dlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHZpc3VhbGl6YXRpb24gb2YgdGhlIFBWIGluIFBWIGNhc2UgYW5kIGV4cGVjdCBpdCB0byBiZSBhIGNoYXJ0IChzaW1pbGFyIHRvIFZpc3VhbEZpbHRlcnMpXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8TWljcm9DaGFydFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17bWljcm9DaGFydENvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKVxuXHRcdFx0XHRcdC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dPbmx5Q2hhcnQ9e3Nob3dPbmx5Q2hhcnR9XG5cdFx0XHRcdHNpemU9e21pY3JvQ2hhcnRTaXplID8/IFwiWFNcIn1cblx0XHRcdFx0aGlkZU9uTm9EYXRhPXt0cnVlfVxuXHRcdFx0XHRpc0FuYWx5dGljcz17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQ+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpZWxkKGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE9QLCBkYXRhRmllbGQuVmFsdWUucGF0aCkpXG5cdCkge1xuXHRcdC8vIHdoZW4gZXZhbHVhdGluZyBcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGlzVHJ1dGh5IHRvIGZvcmNlIHRoZSBiaW5kaW5nIGV2YWx1YXRpb25cblx0XHRjb25zdCBpc1JlYWRPbmx5ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKGlzVGFibGVSZWFkT25seSA9PT0gdHJ1ZSwgYW5kKGlzVHJ1dGh5KFVJLklzSW5hY3RpdmUpLCBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShlcXVhbChmaWVsZE1vZGUsIFwibm93cmFwcGVyXCIpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQodW5kZWZpbmVkKSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGlmIChpc1JlYWRPbmx5ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEJsb2NrXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdFx0XHR1c2VQYXJlbnRCaW5kaW5nQ2FjaGU9e3RhYmxlRGVmaW5pdGlvbi5kaXNhYmxlT3duUmVxdWVzdE9uTVZGfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0cmVhZE9ubHk9e2lzUmVhZE9ubHl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPEZpZWxkR3JvdXA+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cClcblx0KSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cDogRmllbGRHcm91cCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aCA9IGZpZWxkR3JvdXAuRGF0YS5sZW5ndGggLSAxO1xuXG5cdFx0Y29uc3QgaXRlbXMgPSBmaWVsZEdyb3VwLkRhdGEubWFwKChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmaWVsZEdyb3VwRGF0YUZpZWxkSWR4OiBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0ID0gZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiICsgZmllbGRHcm91cERhdGFGaWVsZElkeCk7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YUZpZWxkT1AgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cExhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dChmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0XHRjb250ZXh0OiBmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwgJiYgISFmaWVsZEdyb3VwTGFiZWwpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGaWVsZEhlbHBlci5idWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIilcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdGlkPXtUYWJsZUhlbHBlci5nZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZCh0YWJsZUlkLCBmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiSEVBREVSX0ZPUk1fTEFCRUxcIiwgW2ZpZWxkR3JvdXBMYWJlbF0pfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkVuZFwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFZCb3g+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIC8+LFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFwiTGVmdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YCR7VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApfSAke1RhYmxlSGVscGVyLmdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkT1Bcblx0XHRcdFx0XHRcdFx0XHRcdCl9YCxcblx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRNYXJnaW5DbGFzcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCksXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yID0gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoZHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdGl0ZW1zLnB1c2goZHJhZnRJbmRpY2F0b3IpO1xuXHRcdH1cblx0XHRjb25zdCBzaXR1YXRpb25JbmRpY2F0b3IgPSBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoc2l0dWF0aW9uSW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKHNpdHVhdGlvbkluZGljYXRvcik7XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8VkJveFxuXHRcdFx0XHR2aXNpYmxlPXtUYWJsZUhlbHBlci5nZXRWQm94VmlzaWJpbGl0eShcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRjb2x1bW4uRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogaXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvVkJveD5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRlbXBsYXRlID0gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0dGFibGVJZCxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdGNvbHVtbixcblx0XHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0XHRjcmVhdGlvblRlbXBsYXRlID0gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4geyB0ZW1wbGF0ZSwgY3JlYXRpb25UZW1wbGF0ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2x1bW4uYW5ub3RhdGlvblBhdGgpO1xuXHRpZiAoIWRhdGFGaWVsZENvbnRleHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkRGVmYXVsdChkYXRhRmllbGRDb250ZXh0KSk7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0LCBjb2xsZWN0aW9uKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0Py4oKSA/PyB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdFx0dGFibGVJZCxcblx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0Y29sdW1uLFxuXHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdGNvbGxlY3Rpb24sXG5cdFx0aGFuZGxlclByb3ZpZGVyXG5cdCk7XG5cblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gdGFibGVQcm9wZXJ0aWVzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoO1xuXHRjb25zdCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoKX1cblx0XHRcdHdpZHRoPXtcblx0XHRcdFx0IUNvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCBjb2x1bW4ud2lkdGhcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRtaW5XaWR0aD17XG5cdFx0XHRcdENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKVxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0Rlc2NyaXB0aW9uXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbCB8fCBjb2x1bW4ubmFtZX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbiB8fCBGaWVsZEhlbHBlci5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb24gfSl9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtUYWJsZUhlbHBlci5zZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkoZGF0YUZpZWxkT2JqZWN0LCBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YVwiKSl9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXt0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIiwgY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwpLFxuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlcy50ZW1wbGF0ZSxcblx0XHRcdFx0Y3JlYXRpb25UZW1wbGF0ZTogdGVtcGxhdGVzLmNyZWF0aW9uVGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgY29sbGVjdGlvbjogQ29udGV4dCwgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0cmV0dXJuIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29sdW1uc1xuXHRcdC5tYXAoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbHVtblRlbXBsYXRlKHRhYmxlSWQsIHRhYmxlUHJvcGVydGllcywgY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sbGVjdGlvbiwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbHVtbiBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KVxuXHRcdC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpIGFzIENvbHVtbltdO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyA9IE9taXQ8U3RyaWN0UHJvcGVydGllc09mPFRhYmxlQVBJPiwgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiPiAmIHtcblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZztcblx0W1wiZmw6ZmxleGliaWxpdHlcIl0/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBkZXNpZ250aW1lIGZvciB0aGUgTURDIHRhYmxlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGR0OmRlc2lnbnRpbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RGVzaWdudGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZVwiO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGludGVybmFsIFAxM24gdGFibGUgbW9kZSAoc3RyaW5nKSB0byB0aGUgY29ycmVzcG9uZGluZyBNREMgZW51bS5cbiAqIEBwYXJhbSBzdHJpbmdNb2RlXG4gKiBAcmV0dXJucyBUaGUgTURDIGVudW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0TURDUDEzbk1vZGUoc3RyaW5nTW9kZTogc3RyaW5nKTogVGFibGVQMTNuTW9kZSB7XG5cdHN3aXRjaCAoc3RyaW5nTW9kZSkge1xuXHRcdGNhc2UgXCJBZ2dyZWdhdGVcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkFnZ3JlZ2F0ZTtcblx0XHRjYXNlIFwiU29ydFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuU29ydDtcblx0XHRjYXNlIFwiQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdFx0Y2FzZSBcIkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuRmlsdGVyO1xuXHRcdGNhc2UgXCJHcm91cFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy5lcnJvcihcIlVua25vd24gUDEzbiBtb2RlOiBcIiArIHN0cmluZ01vZGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNRENUYWJsZVRlbXBsYXRlKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMpOiBNRENUYWJsZSB7XG5cdC8vIEZvciBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgZGlzcGxheWluZyBhIGRyYWZ0LWVuYWJsZWQgZW50aXR5LCB3ZSBvbmx5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlc1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbj8ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7XG5cdFx0cm91dGVQYXRoPzogc3RyaW5nO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgdGFyZ2V0ID0gbmF2aWdhdGlvbkluZm8/LnJvdXRlUGF0aDtcblx0bGV0IG5hdmlnYXRpb25JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YXJnZXQpIHtcblx0XHRjb25zdCB0YXJnZXRJbmZvcm1hdGlvbiA9IHBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuX2dldFRhcmdldEluZm9ybWF0aW9uKHRhcmdldCk7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGUgPSAodGFyZ2V0SW5mb3JtYXRpb24/Lm9wdGlvbnM/LnNldHRpbmdzPy5vcGVuSW5FZGl0TW9kZSBhcyBib29sZWFuIHwgdW5kZWZpbmVkKSA/PyBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9XG5cdFx0KHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkgJiZcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0TW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBkZWxlZ2F0ZSA9IFRhYmxlSGVscGVyLmdldERlbGVnYXRlKFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0dGFibGVQcm9wZXJ0aWVzLmlzQWxwID09PSB0cnVlLFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5lbnRpdHlOYW1lLFxuXHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXNcblx0KTtcblx0Y29uc3QgaGVhZGVyVmlzaWJsZSA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXJWaXNpYmxlID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5oZWFkZXJWaXNpYmxlO1xuXHRjb25zdCBjdXJyZW50SGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlciA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IGhlYWRlckJpbmRpbmdFeHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZShjdXJyZW50SGVhZGVyID8/IFwiXCIsIHRhYmxlUHJvcGVydGllcy50YWJUaXRsZSA/PyBcIlwiLCAhIWhlYWRlclZpc2libGUpO1xuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKTtcblx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pLnRhcmdldCBhc1xuXHRcdHwgRW50aXR5U2V0XG5cdFx0fCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdGNvbnN0IG1vZGVsQ29udGV4dENoYW5nZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnRhYmxlQ29udGV4dENoYW5nZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgbGluZUl0ZW0gPSBUYWJsZUhlbHBlci5nZXRVaUxpbmVJdGVtT2JqZWN0KHBhcmFtZXRlcnMubWV0YVBhdGgsIHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEpIGFzXG5cdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25bXVxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpICYmIGlzU2luZ2xldG9uKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uID0gbmF2aWdhdGlvblBhdGg7XG5cdH1cblxuXHRjb25zdCBjb2xsZWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSE7XG5cdGNvbnN0IGRyYWZ0ID0gKGNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0Ly8gQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkZXNpZ250aW1lIGZpbGUgaWYgZGVzaWdudGltZSBpcyBlbmFibGVkIGZyb20gY29yZSBvciBsb2NhbGx5IHZpYSB1cmwgcGFyYW1ldGVyc1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRhYmxlUHJvcGVydGllcy52YXJpYW50TWFuYWdlbWVudCA/PyBcIk5vbmVcIjtcblx0Y29uc3QgZGVzaWdudGltZSA9IGdldERlc2lnbnRpbWUoKTtcblx0bGV0IHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0cm93QWN0aW9uVHlwZSA9IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uO1xuXHR9XG5cdHJvd0FjdGlvblR5cGUgPz89XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8uYWN0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgPyBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBzaG93Q3JlYXRlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKT8udmlzaWJsZSB8fCB0cnVlO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnV0dG9uIGlzIGhpZGRlbiB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gZW50ZXJlZCB5ZXQgaW4gdGhlIHJvdyAodHJ1ZS9mYWxzZSkuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYGZhbHNlYC5cblx0ICovXG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi51cGRhdGFibGVQcm9wZXJ0eVBhdGg7XG5cblx0bGV0IGN1cnJlbnRQZXJzb25hbGl6YXRpb246IFRhYmxlUDEzbk1vZGVbXSB8IHVuZGVmaW5lZDtcblx0c3dpdGNoICh0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRydWVcIjpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBbVGFibGVQMTNuTW9kZS5Tb3J0LCBUYWJsZVAxM25Nb2RlLkNvbHVtbiwgVGFibGVQMTNuTW9kZS5GaWx0ZXJdO1xuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gWy4uLmN1cnJlbnRQZXJzb25hbGl6YXRpb24sIFRhYmxlUDEzbk1vZGUuR3JvdXBdO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBJbiBjYXNlIGdyb3VwaW5nIG1vZGUgaXMgZGVmaW5lZCBleHBsaWNpdGVseSBvbiB0aGUgcGVyc29uYWxpemF0aW9uLCB3ZSBvbmx5IGVuYWJsZSBpdCBmb3IgdGhlIGFuYWx5dGljYWwgYW5kIHJlc3BvbnNpdmUgdGFibGUuXG5cdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSB7XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKS5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleGNsdWRlR3JvdXBGcm9tUDEzbiA9IHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb25cblx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0LmZpbHRlcigobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZS50cmltKCkpICE9PSBUYWJsZVAxM25Nb2RlLkdyb3VwKSBhcyBUYWJsZVAxM25Nb2RlW107XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBleGNsdWRlR3JvdXBGcm9tUDEzbi5sZW5ndGggPyBleGNsdWRlR3JvdXBGcm9tUDEzbiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0fVxuXG5cdGNvbnN0IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zID0gQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGxpbmVJdGVtKTtcblxuXHRjb25zdCBjdXN0b21EYXRhID0gW1xuXHRcdHsga2V5OiBcImtpbmRcIiwgdmFsdWU6IGNvbGxlY3Rpb25FbnRpdHkuX3R5cGUgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uUGF0aFwiLCB2YWx1ZTogbmF2aWdhdGlvblBhdGggfSxcblx0XHR7IGtleTogXCJlbmFibGVBbmFseXRpY3NcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRpb25Nb2RlXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIH0sXG5cdFx0eyBrZXk6IFwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlubGluZUNyZWF0aW9uUm93Q291bnQgfSxcblx0XHR7IGtleTogXCJzaG93Q3JlYXRlXCIsIHZhbHVlOiBzaG93Q3JlYXRlIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRlQXRFbmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kIH0sXG5cdFx0eyBrZXk6IFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5yZWFkT25seSB9LFxuXHRcdHsga2V5OiBcInRhYmxlVHlwZVwiLCB2YWx1ZTogdGFibGVUeXBlIH0sXG5cdFx0eyBrZXk6IFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImVudGl0eVR5cGVcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiIH0sXG5cdFx0eyBrZXk6IFwibWV0YVBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImhpZGRlbkZpbHRlcnNcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5maWx0ZXJzPy5oaWRkZW5GaWx0ZXJzIH0sXG5cdFx0eyBrZXk6IFwicmVxdWVzdEdyb3VwSWRcIiwgdmFsdWU6IFwiJGF1dG8uV29ya2Vyc1wiIH0sXG5cdFx0eyBrZXk6IFwic2VnbWVudGVkQnV0dG9uSWRcIiwgdmFsdWU6IGdlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pIH0sXG5cdFx0eyBrZXk6IFwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgfSxcblx0XHR7IGtleTogXCJkcmFmdFwiLCB2YWx1ZTogZHJhZnQgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIsIHZhbHVlOiBUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtKSB9LFxuXHRcdHtcblx0XHRcdGtleTogXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiLFxuXHRcdFx0dmFsdWU6IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLmxlbmd0aCA+IDAgPyBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0eyBrZXk6IFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIsIHZhbHVlOiB1cGRhdGFibGVQcm9wZXJ0eVBhdGggfHwgXCJcIiB9LFxuXHRcdHsga2V5OiBcImV4cG9ydFJlcXVlc3RTaXplXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUgfVxuXHRdO1xuXG5cdHJldHVybiAoXG5cdFx0PE1EQ1RhYmxlXG5cdFx0XHRjb3JlOnJlcXVpcmU9e2dldENvcmVSZXF1aXJlKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pfVxuXHRcdFx0Zmw6ZmxleGliaWxpdHk9e3RhYmxlUHJvcGVydGllc1tcImZsOmZsZXhpYmlsaXR5XCJdfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zb3J0Q29uZGl0aW9uc31cblx0XHRcdGdyb3VwQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9uc31cblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zfVxuXHRcdFx0ZHQ6ZGVzaWdudGltZT17ZGVzaWdudGltZX1cblx0XHRcdGlkPXt0YWJsZVByb3BlcnRpZXMuY29udGVudElkfVxuXHRcdFx0YnVzeUluZGljYXRvckRlbGF5PXswfVxuXHRcdFx0ZW5hYmxlRXhwb3J0PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0fVxuXHRcdFx0ZGVsZWdhdGU9e0pTT04ucGFyc2UoZGVsZWdhdGUpfVxuXHRcdFx0cm93UHJlc3M9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnJvd1ByZXNzIDogdW5kZWZpbmVkfVxuXHRcdFx0YmVmb3JlT3BlbkNvbnRleHRNZW51PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVPcGVuQ29udGV4dE1lbnV9XG5cdFx0XHRhdXRvQmluZE9uSW5pdD17dGFibGVQcm9wZXJ0aWVzLnVzZUJhc2ljU2VhcmNoIHx8ICF0YWJsZVByb3BlcnRpZXMuZmlsdGVyQmFyfVxuXHRcdFx0c2VsZWN0aW9uTW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlbGVjdGlvbk1vZGUgfHwgXCJOb25lXCJ9XG5cdFx0XHRzZWxlY3Rpb25DaGFuZ2U9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlbGVjdGlvbkNoYW5nZX1cblx0XHRcdHNob3dSb3dDb3VudD17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNob3dSb3dDb3VudH1cblx0XHRcdGhlYWRlcj17Y3VycmVudEhlYWRlcn1cblx0XHRcdGhlYWRlclZpc2libGU9e2hlYWRlckJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0aGVhZGVyTGV2ZWw9e3RhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbH1cblx0XHRcdGhlYWRlclN0eWxlPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyU3R5bGV9XG5cdFx0XHR0aHJlc2hvbGQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50aHJlc2hvbGQgPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnRocmVzaG9sZH1cblx0XHRcdHAxM25Nb2RlPXtjdXJyZW50UGVyc29uYWxpemF0aW9ufVxuXHRcdFx0cGFzdGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRiZWZvcmVFeHBvcnQ9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmJlZm9yZUV4cG9ydH1cblx0XHRcdGNsYXNzPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPT09IHRydWUgPyBcInNhcFVpU2l6ZUNvbmRlbnNlZFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubXVsdGlTZWxlY3RNb2RlfVxuXHRcdFx0c2hvd1Bhc3RlQnV0dG9uPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlUGFzdGU9e3RhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IGZhbHNlIDogcGFzdGVBY3Rpb24/LmVuYWJsZWR9XG5cdFx0XHRtb2RlbENvbnRleHRDaGFuZ2U9e21vZGVsQ29udGV4dENoYW5nZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBjcmVhdGVDdXN0b21EYXRhcyhjdXN0b21EYXRhKSxcblx0XHRcdFx0ZGF0YVN0YXRlSW5kaWNhdG9yOiBnZXREYXRhU3RhdGVJbmRpY2F0b3IocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR0eXBlOiBnZXRUYWJsZVR5cGUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRlcGVuZGVudHM6IGdldERlcGVuZGVudHModGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCB2YXJpYW50TWFuYWdlbWVudCwgY29sbGVjdGlvbkNvbnRleHQpLFxuXHRcdFx0XHRhY3Rpb25zOiBnZXRBY3Rpb25zKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpLFxuXHRcdFx0XHRyb3dTZXR0aW5nczogZ2V0Um93U2V0dGluZ3ModGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiwgcm93QWN0aW9uVHlwZSwgdGFibGVUeXBlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNvbnRleHRNZW51OiBnZXRDb250ZXh0TWVudShcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50aXR5LFxuXHRcdFx0XHRcdHJvd0FjdGlvblR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvbkluRWRpdE1vZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0Y29sdW1uczogZ2V0Q29sdW1ucyh0YWJsZVByb3BlcnRpZXMsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGRyYWdEcm9wQ29uZmlnOiBnZXREcmFnQW5kRHJvcENvbmZpZyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR2YXJpYW50OiBnZXRWYXJpYW50TWFuYWdlbWVudChcblx0XHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbCxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRxdWlja0ZpbHRlcjogZ2V0UXVpY2tGaWx0ZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y29weVByb3ZpZGVyOiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y2VsbFNlbGVjdG9yOiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzKVxuXHRcdFx0fX1cblx0XHQ8L01EQ1RhYmxlPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLFlBQVlBLENBQ3BCQyxlQUFtQyxFQUNuQ0MsV0FBb0IsRUFDcEJDLFNBQW9CLEVBQ3BCQyxjQUFzQixFQUNnQztJQUN0RCxNQUFNQyxVQUFVLEdBQUdILFdBQVcsQ0FBQ0ksU0FBUyxDQUFDLENBQUM7SUFDMUMsUUFBUUgsU0FBUztNQUNoQixLQUFLLFdBQVc7UUFDZixPQUNDSSxJQUFBLENBQUNDLGFBQWE7VUFDYkMsWUFBWSxFQUFFUixlQUFlLENBQUNTLE9BQU8sQ0FBQ0QsWUFBYTtVQUNuREUsUUFBUSxFQUFFVixlQUFlLENBQUNTLE9BQU8sQ0FBQ0MsUUFBUztVQUMzQ1AsY0FBYyxFQUFFQSxjQUFlO1VBQy9CUSxnQkFBZ0IsRUFBRVgsZUFBZSxDQUFDUyxPQUFPLENBQUNHLGlCQUFrQjtVQUM1REMsZUFBZSxFQUFFYixlQUFlLENBQUNTLE9BQU8sQ0FBQ0ksZUFBZ0I7VUFDekRDLGtCQUFrQixFQUFFZCxlQUFlLENB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