@sapui5/sap.fe.templates 1.105.1 → 1.105.3

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.templates",
3
- "version": "1.105.1",
3
+ "version": "1.105.3",
4
4
  "description": "SAPUI5 Library sap.fe.templates",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.105.1</version>
9
+ <version>1.105.3</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.templates</documentation>
12
12
 
@@ -900,4 +900,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/ActionRu
900
900
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype)), _class2)) || _class);
901
901
  return ListReportController;
902
902
  }, false);
903
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEVudGl0eVNldCIsImJhc2UiLCJnZXRDdXJyZW50RW50aXR5U2V0IiwiU2lkZUVmZmVjdHMiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJFZGl0RmxvdyIsIkVkaXRGbG93T3ZlcnJpZGVzIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiS1BJTWFuYWdlbWVudCIsIlBsYWNlaG9sZGVyIiwiTWFzc0VkaXQiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25GaWx0ZXJzQ2hhbmdlZCIsIm9FdmVudCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib25QZW5kaW5nRmlsdGVycyIsInNldFByb3BlcnR5IiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0IiwiZ2V0UGFyYW1ldGVyIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvVk0iLCJnZXRTb3VyY2UiLCJjdXJyZW50VmFyaWFudEtleSIsIm9NdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwidHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsImdldENvbmRpdGlvbnMiLCJfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyIsIm9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzVGVtcGxhdGVDb250ZW50VmlldyIsImdldFByb3BlcnR5IiwiZ2V0UGF0aCIsIkNoYXJ0IiwiaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyIsIlRhYmxlIiwiaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInRoZW4iLCJvRXh0ZXJuYWxTdGF0ZSIsImZpbHRlckJhckNvbmRpdGlvbnMiLCJmaWx0ZXIiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiZ2V0Vmlld0RhdGEiLCJsaXZlTW9kZSIsInN5c3RlbSIsInBob25lIiwib0R5bmFtaWNQYWdlIiwiYnlJZCIsInNldEhlYWRlckV4cGFuZGVkIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRSdW50aW1lIiwiZm5VcGRhdGVDaGFydCIsIkNoYXJ0VXRpbHMiLCJzZXRDaGFydEZpbHRlcnMiLCJyZWJpbmQiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJzU2VsZWN0ZWRLZXkiLCJtUGFyYW1ldGVycyIsImtleSIsIm9DaGFydCIsIl9nZXRDaGFydCIsIm9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhSXRlbXMiLCJvU2VnbWVudGVkQnV0dG9uIiwiZ2V0SXRlbXMiLCJmb3JFYWNoIiwib0l0ZW0iLCJnZXRLZXkiLCJmb2N1cyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJfZ2V0U2VnbWVudGVkQnV0dG9uIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl91cGRhdGVUYWJsZSIsIl91cGRhdGVDaGFydCIsIkh5YnJpZCIsIm9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJzZXRWaXNpYmxlIiwiZGF0YSIsIm9uU3RhdGVDaGFuZ2UiLCJvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQiLCJmaWx0ZXJCYXIiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImFJZ25vcmVkTGFiZWxzIiwiTWVzc2FnZVN0cmlwIiwiZ2V0TGFiZWxzIiwib1Jlc291cmNlQnVuZGxlIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiRGVsZWdhdGVVdGlsIiwiZ2V0TG9jYWxpemVkVGV4dCIsImV4dGVuc2lvbkFQSSIsIkV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsImFscENvbnRlbnRWaWV3IiwiX2dldERlZmF1bHRQYXRoIiwiZGVza3RvcCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwib25FeGl0IiwiZGVzdHJveSIsImFUYWJsZXMiLCJfZ2V0Q29udHJvbHMiLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5Iiwib1RhYmxlQmluZGluZyIsIl9nZXRUYWJsZUJpbmRpbmciLCJDb21tb25VdGlscyIsIl9pc0ZjbEVuYWJsZWQiLCJyZWZyZXNoIiwic1VwZGF0ZVRpbWVyIiwiZm5VcGRhdGVUYWJsZUFjdGlvbnMiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldE1vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJyZXNwb25zZSIsImFDb250cm9scyIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInVuZGVmaW5lZCIsIm9Db250cm9sIiwic2V0Tm9EYXRhVGV4dCIsIm9uUGFnZVJlYWR5IiwiZm9yY2VGb2N1cyIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsInNldEZvY3VzT25GaXJzdEVycm9uZW91c0ZpZWxkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwib25WaWV3TmVlZHNSZWZyZXNoIiwiX2lzTXVsdGlNb2RlIiwiZ2V0RGlzcGxheWVkRW50aXR5U2V0Iiwic2xpY2UiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib1RpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiTGlzdFJlcG9ydFRpdGxlIiwiTGlzdFJlcG9ydFN1YnRpdGxlIiwiX2dldFBhZ2VPckZpbHRlckJhclZhcmlhbnRNYW5hZ2VtZW50IiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsIl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCIsImFkYXB0YXRpb25GaWx0ZXJCYXIiLCJnZXRJbmJ1aWx0RmlsdGVyIiwiZ2V0UGFyZW50Iiwic0NvbnRyb2wiLCJfZ2V0U2VnbWVudGVkQnV0dG9uSWQiLCJfZ2V0Q2hhcnRDb250cm9sSWQiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQiLCJfZ2V0VGFibGVDb250cm9sSWQiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJpc0EiLCJzVGFibGVJZCIsIm9UYWJsZUNvbnRyb2wiLCJfZ2V0Um93QmluZGluZyIsInNLZXkiLCJvVGFiTXVsdGlNb2RlIiwiaW5kZXhPZiIsInB1c2giLCJkZWZhdWx0UGF0aCIsIl9pc0luaXRMb2FkRW5hYmxlZCIsImluaXRMb2FkTW9kZSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJzZXRTdXNwZW5kU2VsZWN0aW9uIiwiX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwiZ2V0T3duZXJDb21wb25lbnQiLCJtQ2FjaGUiLCJpZ25vcmVkRmllbGRzIiwiYUNoYXJ0cyIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJzQ2FjaGVLZXkiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImhpZGVGaWx0ZXJCYXIiLCJWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJjdXJyZW50VmFyaWFudCIsImZpbmQiLCJ2YXJpYW50IiwiZXhlY3V0ZU9uU2VsZWN0IiwiQXV0byIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5Iiwib0NvbmRpdGlvbnMiLCJzdGFydHNXaXRoIiwic3RhbmRhcmRWYXJpYW50IiwiaXNUYWJsZUJvdW5kIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJpc0JvdW5kIiwiZ2V0QmluZGluZ0luZm8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXh0ZW5zaWJsZSxcblx0ZmluYWxFeHRlbnNpb24sXG5cdHByaXZhdGVFeHRlbnNpb24sXG5cdHB1YmxpY0V4dGVuc2lvbixcblx0dXNpbmdFeHRlbnNpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgRWRpdEZsb3dPdmVycmlkZXMgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9vdmVycmlkZXMvRWRpdEZsb3dcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0IHR5cGUgeyBWNENvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cylcblx0c2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEVkaXRGbG93Lm92ZXJyaWRlKEVkaXRGbG93T3ZlcnJpZGVzKSlcblx0ZWRpdEZsb3chOiBFZGl0RmxvdztcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcml2YXRlIGV4dGVuc2lvbkFQST86IEV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBmaWx0ZXJCYXJDb25kaXRpb25zPzogYW55O1xuXHRwcml2YXRlIHNVcGRhdGVUaW1lcj86IGFueTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBoYXNQZW5kaW5nVGFibGVDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgXCJcIik7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBmYWxzZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidW9tXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3RvclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JOdW1iZXJcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImN1cnJlbmN5XCIsIHt9KTtcblxuXHRcdGlmICh0aGlzLl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCkpIHtcblx0XHRcdGxldCBhbHBDb250ZW50VmlldyA9IHRoaXMuX2dldERlZmF1bHRQYXRoKCk7XG5cdFx0XHRpZiAoIXN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBDb25maWd1cmUgdGhlIGluaXRpYWwgbG9hZCBzZXR0aW5nc1xuXHRcdHRoaXMuX3NldEluaXRMb2FkKCk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0ZGVsZXRlIHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucztcblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0X29uQWZ0ZXJCaW5kaW5nKCkge1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHR0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRpZiAoQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKS5faXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0XHQvLyB0aGVyZSBpcyBhbiBpc3N1ZSBpZiB3ZSB1c2UgYSB0aW1lb3V0IHdpdGggYSBrZXB0IGFsaXZlIGNvbnRleHQgdXNlZCBvbiBhbm90aGVyIHBhZ2Vcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMuc1VwZGF0ZVRpbWVyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNVcGRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuc1VwZGF0ZVRpbWVyO1xuXHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFuZCB2aXNpYmlsaXR5IHVwb24gdGFibGUgZGF0YSB1cGRhdGUuXG5cdFx0XHRcdFx0Y29uc3QgZm5VcGRhdGVUYWJsZUFjdGlvbnMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmRldGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVRhYmxlQWN0aW9ucyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLmF0dGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVRhYmxlQWN0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdEVkaXRTdGF0ZS5zZXRFZGl0U3RhdGVQcm9jZXNzZWQoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuc1VwZGF0ZVRpbWVyKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcih0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUoKSk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdCgodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSByZXNwb25zZTtcblx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gdGhpcy5fZ2V0Q29udHJvbHMoKTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0O1xuXHRcdFx0XHRjb25zdCBzVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUXCIsXG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgYXMgUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHNFbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0YUNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvQ29udHJvbC5zZXROb0RhdGFUZXh0KHNUZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdC8vIEVuYWJsaW5nIG1hbmRhdG9yeSBmaWx0ZXIgZmllbGRzIG1lc3NhZ2UgZGlhbG9nIGFuZCBmb2N1c2luZyBvbiB0aGVtXG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cblx0XHRcdGlmIChvRmlsdGVyQmFyICYmICFvRmlsdGVyQmFyLmdldFNob3dNZXNzYWdlcygpKSB7XG5cdFx0XHRcdG9GaWx0ZXJCYXIuc2V0U2hvd01lc3NhZ2VzKHRydWUpO1xuXHRcdFx0XHQob0ZpbHRlckJhciBhcyBhbnkpLnNldEZvY3VzT25GaXJzdEVycm9uZW91c0ZpZWxkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBoYW5kbGVyIG9uIGJhY2sgbmF2aWdhdGlvbiB0aGF0IGRpc3BsYXlzIERyYWZ0IGNvbmZpcm1hdGlvblxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBjb250ZW50IG9mIGEgbGlzdCByZXBvcnQgdmlldyBuZWVkcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBvbiB0aGUgRmlsdGVyQmFyIGFuZCB0aGUgc2VhcmNoIGlzIHRyaWdnZXJlZCxcblx0ICogb3Igd2hlbiBhIHRhYiB3aXRoIGN1c3RvbSBjb250ZW50IGlzIHNlbGVjdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGluIGNhc2Ugb2YgY3VzdG9taXphdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIE1hcCBjb250YWluaW5nIHRoZSBmaWx0ZXIgY29uZGl0aW9ucyBvZiB0aGUgRmlsdGVyQmFyLCB0aGUgY3VycmVudFRhYklEXG5cdCAqIGFuZCB0aGUgdmlldyByZWZyZXNoIGNhdXNlICh0YWJDaGFuZ2VkIG9yIHNlYXJjaCkuXG5cdCAqIFRoZSBtYXAgbG9va3MgbGlrZSB0aGlzOlxuXHQgKiA8Y29kZT48cHJlPlxuXHQgKiBcdHtcblx0ICogXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0ICogXHRcdFx0Q291bnRyeTogW1xuXHQgKiBcdFx0XHRcdHtcblx0ICogXHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCJcblx0ICpcdFx0XHRcdFx0dmFsaWRhdGVkOiBcIk5vdFZhbGlkYXRlZFwiXG5cdCAqXHRcdFx0XHRcdHZhbHVlczogW1wiR2VybWFueVwiLCAuLi5dXG5cdCAqIFx0XHRcdFx0fSxcblx0ICogXHRcdFx0XHQuLi5cblx0ICogXHRcdFx0XVxuXHQgKiBcdFx0XHQuLi5cblx0ICogXHRcdH0sXG5cdCAqXHRcdGN1cnJlbnRUYWJJZDogXCJmZTo6Q3VzdG9tVGFiOjp0YWIxXCIsXG5cdCAqXHRcdHJlZnJlc2hDYXVzZTogXCJ0YWJDaGFuZ2VkXCIgfCBcInNlYXJjaFwiXG5cdCAqXHR9XG5cdCAqIDwvcHJlPjwvY29kZT5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uVmlld05lZWRzUmVmcmVzaChtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsdGVyIG9yIHNlYXJjaCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGluIHRoZSBGaWx0ZXJCYXIsXG5cdCAqIGJ1dCBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHlldCBieSB0aGUgZW5kIHVzZXIgKHdpdGggdGhlICdHbycgb3IgJ1NlYXJjaCcgYnV0dG9uKS5cblx0ICogVHlwaWNhbGx5LCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCB0YWIgaXMgZ3JleWVkIG91dCB1bnRpbCB0aGUgZmlsdGVycyBhcmUgdmFsaWRhdGVkLlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGluIGNhc2Ugb2YgY3VzdG9taXphdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBlbmRpbmdGaWx0ZXJzKCkge1xuXHRcdC8qIFRvIGJlIG92ZXJyaWRlbiAqL1xuXHR9XG5cblx0Z2V0Q3VycmVudEVudGl0eVNldCgpIHtcblx0XHRyZXR1cm4gdGhpcy5faXNNdWx0aU1vZGUoKVxuXHRcdFx0PyB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk/LmdldERpc3BsYXllZEVudGl0eVNldCgpXG5cdFx0XHQ6IHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKS5zbGljZSgxKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpbml0aWF0ZXMgdGhlIHVwZGF0ZSBvZiB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCB0aGUgdmlzaWJsZSBzdGF0ZSBvZiB0aGUgRGF0YUZpZWxkRm9ySUJOIGJ1dHRvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhVGFibGVzIEFycmF5IG9mIHRhYmxlcyBpbiB0aGUgbGlzdCByZXBvcnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF91cGRhdGVUYWJsZUFjdGlvbnMoYVRhYmxlczogYW55KSB7XG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblx0XHRcdC8vIFVwZGF0ZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9yQWN0aW9uIGJ1dHRvbnMgb24gdGFibGUgdG9vbGJhclxuXHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2Nyb2xscyB0byBhIHNwZWNpZmljIHJvdyBvbiBhbGwgdGhlIGF2YWlsYWJsZSB0YWJsZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlciNfc2Nyb2xsVGFibGVzVG9Sb3dcblx0ICogQHBhcmFtIHNSb3dQYXRoIFRoZSBwYXRoIG9mIHRoZSB0YWJsZSByb3cgY29udGV4dCB0byBiZSBzY3JvbGxlZCB0b1xuXHQgKi9cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3cob1RhYmxlLCBzUm93UGF0aCk7XG5cdFx0fSk7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1RpdGxlSW5mbyA9IHsgdGl0bGU6IFwiXCIsIHN1YnRpdGxlOiBcIlwiLCBpbnRlbnQ6IFwiXCIsIGljb246IFwiXCIgfTtcblx0XHRvVGl0bGVJbmZvLnRpdGxlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoKS5MaXN0UmVwb3J0VGl0bGU7XG5cdFx0b1RpdGxlSW5mby5zdWJ0aXRsZSA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKCkuTGlzdFJlcG9ydFN1YnRpdGxlO1xuXHRcdHJldHVybiBvVGl0bGVJbmZvO1xuXHR9XG5cblx0X2dldFBhZ2VPckZpbHRlckJhclZhcmlhbnRNYW5hZ2VtZW50KCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlBhZ2VWYXJpYW50TWFuYWdlbWVudFwiKSB8fCB0aGlzLmdldFZpZXcoKS5ieUlkKGAke3RoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpfTo6VmFyaWFudE1hbmFnZW1lbnRgKVxuXHRcdCk7XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldEFkYXB0YXRpb25GaWx0ZXJCYXJDb250cm9sKCkge1xuXHRcdC8vIElmIHRoZSBhZGFwdGF0aW9uIGZpbHRlciBiYXIgaXMgcGFydCBvZiB0aGUgRE9NIHRyZWUsIHRoZSBcIkFkYXB0IEZpbHRlclwiIGRpYWxvZyBpcyBvcGVuLFxuXHRcdC8vIGFuZCB3ZSByZXR1cm4gdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBhcyBhbiBhY3RpdmUgY29udHJvbCAodmlzaWJsZSBmb3IgdGhlIHVzZXIpXG5cdFx0Y29uc3QgYWRhcHRhdGlvbkZpbHRlckJhciA9ICh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkgYXMgYW55KS5nZXRJbmJ1aWx0RmlsdGVyKCk7XG5cdFx0cmV0dXJuIGFkYXB0YXRpb25GaWx0ZXJCYXI/LmdldFBhcmVudCgpID8gYWRhcHRhdGlvbkZpbHRlckJhciA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b24oc0NvbnRyb2w6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbklkKHNDb250cm9sKSk7XG5cdH1cblxuXHRfZ2V0U2VnbWVudGVkQnV0dG9uSWQoc0NvbnRyb2w6IGFueSkge1xuXHRcdGlmIChzQ29udHJvbCA9PT0gXCJDaGFydFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q2hhcnQoKS5kYXRhKFwic2VnbWVudGVkQnV0dG9uSWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRUYWJsZSgpPy5kYXRhKFwic2VnbWVudGVkQnV0dG9uSWRcIik7XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpbHRlckJhckNvbnRyb2xJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJmaWx0ZXJCYXJJZFwiKTtcblx0fVxuXG5cdF9nZXRDaGFydENvbnRyb2xJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJzaW5nbGVDaGFydElkXCIpO1xuXHR9XG5cblx0Z2V0Q2hhcnRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldENoYXJ0Q29udHJvbElkKCkpO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbElkKCkpO1xuXHR9XG5cblx0X2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2xJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJ2aXN1YWxGaWx0ZXJCYXJJZFwiKTtcblx0fVxuXG5cdF9nZXRNdWx0aU1vZGVDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OlRhYk11bHRpcGxlTW9kZTo6Q29udHJvbFwiKSBhcyBNdWx0aXBsZU1vZGVDb250cm9sO1xuXHR9XG5cblx0X2dldFRhYmxlQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInNpbmdsZVRhYmxlSWRcIik7XG5cdH1cblxuXHRfZ2V0VGFibGUoKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudDtcblx0XHRcdHJldHVybiBvQ29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSA/IChvQ29udHJvbCBhcyBUYWJsZSkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldFRhYmxlQ29udHJvbElkKCkpIGFzIFRhYmxlO1xuXHR9XG5cblx0X2dldENoYXJ0KCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldENoYXJ0Q29udHJvbElkKCkpO1xuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhzVGFibGVJZD86IGFueSkge1xuXHRcdGNvbnN0IG9UYWJsZUNvbnRyb2wgPSBzVGFibGVJZCA/IHRoaXMuZ2V0VmlldygpLmJ5SWQoc1RhYmxlSWQpIDogdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRyZXR1cm4gb1RhYmxlQ29udHJvbCAmJiAob1RhYmxlQ29udHJvbCBhcyBhbnkpLl9nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRfZ2V0Q29udHJvbHMoc0tleT86IGFueSkge1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IGFueVtdID0gW107XG5cdFx0XHRjb25zdCBvVGFiTXVsdGlNb2RlID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLmNvbnRlbnQ7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQob0l0ZW0uZ2V0S2V5KCkpO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wgJiYgc0tleSkge1xuXHRcdFx0XHRcdGlmIChvSXRlbS5nZXRLZXkoKS5pbmRleE9mKGBmZTo6JHtzS2V5fWApID4gLTEpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5fZ2V0Q2hhcnQoKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCkge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJkZWZhdWx0UGF0aFwiKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzTXVsdGlNb2RlXG5cdCAqIEByZXR1cm5zIElzIE11bHRpcGxlIFRhYmxlIG1vZGUgc2V0P1xuXHQgKi9cblx0X2lzTXVsdGlNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiX3BhZ2VNb2RlbFwiKT8uZ2V0UHJvcGVydHkoXCIvbXVsdGlWaWV3c0NvbnRyb2xcIik7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgTGlzdFJlcG9ydCBpcyBjb25maWd1cmVkIHRvIGxvYWQgZGF0YSBhdCBzdGFydCB1cC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9pc0luaXRMb2FkRGlzYWJsZWRcblx0ICogQHJldHVybnMgSXMgSW5pdExvYWQgZW5hYmxlZD9cblx0ICovXG5cdF9pc0luaXRMb2FkRW5hYmxlZCgpIHtcblx0XHRjb25zdCBpbml0TG9hZE1vZGUgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmluaXRpYWxMb2FkO1xuXHRcdHJldHVybiBpbml0TG9hZE1vZGUgPT09IEluaXRpYWxMb2FkTW9kZS5FbmFibGVkO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwiaGFzTXVsdGlWaXN1YWxpemF0aW9uc1wiKSA9PT0gXCJ0cnVlXCI7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN1c3BlbmQgc2VhcmNoIG9uIHRoZSBmaWx0ZXIgYmFyLiBUaGUgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaXMgZGlzYWJsZWQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gSW5pdExvYWQgLSBEaXNhYmxlZC9BdXRvLlxuXHQgKiBJdCBpcyBlbmFibGVkIGxhdGVyIHdoZW4gdGhlIHZpZXcgc3RhdGUgaXMgc2V0LCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHJlYWxpemUgaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVycy5cblx0ICovXG5cdF9kaXNhYmxlSW5pdExvYWQoKSB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdC8vIGNoZWNrIGZvciBmaWx0ZXIgYmFyIGhpZGRlblxuXHRcdGlmIChmaWx0ZXJCYXIpIHtcblx0XHRcdGZpbHRlckJhci5zZXRTdXNwZW5kU2VsZWN0aW9uKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIGJ5IGZsZXggdG8gZGV0ZXJtaW5lIGlmIHRoZSBhcHBseUF1dG9tYXRpY2FsbHkgc2V0dGluZyBvbiB0aGUgdmFyaWFudCBpcyB2YWxpZC5cblx0ICogQ2FsbGVkIG9ubHkgZm9yIFN0YW5kYXJkIFZhcmlhbnQgYW5kIG9ubHkgd2hlbiB0aGVyZSBpcyBkaXNwbGF5IHRleHQgc2V0IGZvciBhcHBseUF1dG9tYXRpY2FsbHkgKEZFIG9ubHkgc2V0cyBpdCBmb3IgQXV0bykuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4gdHJ1ZSBpZiBkYXRhIHNob3VsZCBiZSBsb2FkZWQgYXV0b21hdGljYWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQoKSB7XG5cdFx0Ly8gV2UgYWx3YXlzIHJldHVybiBmYWxzZSBhbmQgdGFrZSBjYXJlIG9mIGl0IHdoZW4gdmlldyBzdGF0ZSBpcyBzZXRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJlIHRoZSBzZXR0aW5ncyBmb3IgaW5pdGlhbCBsb2FkIGJhc2VkIG9uXG5cdCAqIC0gbWFuaWZlc3Qgc2V0dGluZyBpbml0TG9hZCAtIEVuYWJsZWQvRGlzYWJsZWQvQXV0b1xuXHQgKiAtIHVzZXIncyBzZXR0aW5nIG9mIGFwcGx5QXV0b21hdGljYWxseSBvbiB2YXJpYW50XG5cdCAqIC0gaWYgdGhlcmUgYXJlIGRlZmF1bHQgZmlsdGVyc1xuXHQgKiBXZSBkaXNhYmxlIHRoZSBmaWx0ZXIgYmFyIHNlYXJjaCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmFibGUgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldC5cblx0ICovXG5cdF9zZXRJbml0TG9hZCgpIHtcblx0XHQvLyBpZiBpbml0TG9hZCBpcyBEaXNhYmxlZCBvciBBdXRvLCBzd2l0Y2ggb2ZmIGZpbHRlciBiYXIgc2VhcmNoIHRlbXBvcmFyaWx5IGF0IHN0YXJ0XG5cdFx0aWYgKCF0aGlzLl9pc0luaXRMb2FkRW5hYmxlZCgpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlSW5pdExvYWQoKTtcblx0XHR9XG5cdFx0Ly8gc2V0IGhvb2sgZm9yIGZsZXggZm9yIHdoZW4gc3RhbmRhcmQgdmFyaWFudCBpcyBzZXQgKGF0IHN0YXJ0IG9yIGJ5IHVzZXIgYXQgcnVudGltZSlcblx0XHQvLyByZXF1aXJlZCB0byBvdmVycmlkZSB0aGUgdXNlciBzZXR0aW5nICdhcHBseSBhdXRvbWF0aWNhbGx5JyBiZWhhdmlvdXIgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnNcblx0XHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogYW55ID0gdGhpcy5fZ2V0UGFnZU9yRmlsdGVyQmFyVmFyaWFudE1hbmFnZW1lbnQoKTtcblx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LnJlZ2lzdGVyQXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQodGhpcy5fYXBwbHlBdXRvbWF0aWNhbGx5T25TdGFuZGFyZFZhcmlhbnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFNoYXJlTW9kZWwoKSB7XG5cdFx0Ly8gVE9ETzogZGVhY3RpdmF0ZWQgZm9yIG5vdyAtIGN1cnJlbnRseSB0aGVyZSBpcyBubyBfdGVtcGxQcml2IGFueW1vcmUsIHRvIGJlIGRpc2N1c3NlZFxuXHRcdC8vIHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseSBub3QgY2FsbGVkIGFueW1vcmUgZnJvbSB0aGUgaW5pdCBtZXRob2RcblxuXHRcdGNvbnN0IGZuR2V0VXNlciA9IE9iamVjdFBhdGguZ2V0KFwic2FwLnVzaGVsbC5Db250YWluZXIuZ2V0VXNlclwiKTtcblx0XHQvL3ZhciBvTWFuaWZlc3QgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpXCIpO1xuXHRcdC8vdmFyIHNCb29rbWFya0ljb24gPSAob01hbmlmZXN0ICYmIG9NYW5pZmVzdC5pY29ucyAmJiBvTWFuaWZlc3QuaWNvbnMuaWNvbikgfHwgXCJcIjtcblxuXHRcdC8vc2hhcmVNb2RlbDogSG9sZHMgYWxsIHRoZSBzaGFyaW5nIHJlbGV2YW50IGluZm9ybWF0aW9uIGFuZCBpbmZvIHVzZWQgaW4gWE1MIHZpZXdcblx0XHRjb25zdCBvU2hhcmVJbmZvID0ge1xuXHRcdFx0Ym9va21hcmtUaXRsZTogZG9jdW1lbnQudGl0bGUsIC8vVG8gbmFtZSB0aGUgYm9va21hcmsgYWNjb3JkaW5nIHRvIHRoZSBhcHAgdGl0bGUuXG5cdFx0XHRib29rbWFya0N1c3RvbVVybDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjb25zdCBzSGFzaCA9IGhhc2hlci5nZXRIYXNoKCk7XG5cdFx0XHRcdHJldHVybiBzSGFzaCA/IGAjJHtzSGFzaH1gIDogd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHR9LFxuXHRcdFx0Lypcblx0XHRcdFx0XHRcdFx0VG8gYmUgYWN0aXZhdGVkIG9uY2UgdGhlIEZMUCBzaG93cyB0aGUgY291bnQgLSBzZWUgY29tbWVudCBhYm92ZVxuXHRcdFx0XHRcdFx0XHRib29rbWFya1NlcnZpY2VVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vdmFyIG9UYWJsZSA9IG9UYWJsZS5nZXRJbm5lclRhYmxlKCk7IG9UYWJsZSBpcyBhbHJlYWR5IHRoZSBzYXAuZmUgdGFibGUgKGJ1dCBub3QgdGhlIGlubmVyIG9uZSlcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgdXNlIHRhYmxlLmdldExpc3RCaW5kaW5nSW5mbyBpbnN0ZWFkIG9mIHRoZSBiaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9CaW5kaW5nID0gb1RhYmxlLmdldEJpbmRpbmcoXCJyb3dzXCIpIHx8IG9UYWJsZS5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gZm5HZXREb3dubG9hZFVybChvQmluZGluZykgOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9LCovXG5cdFx0XHRpc1NoYXJlSW5KYW1BY3RpdmU6ICEhZm5HZXRVc2VyICYmIGZuR2V0VXNlcigpLmlzSmFtQWN0aXZlKClcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb1RlbXBsYXRlUHJpdmF0ZU1vZGVsID0gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKFwiX3RlbXBsUHJpdlwiKSBhcyBKU09OTW9kZWw7XG5cdFx0b1RlbXBsYXRlUHJpdmF0ZU1vZGVsLnNldFByb3BlcnR5KFwiL2xpc3RSZXBvcnQvc2hhcmVcIiwgb1NoYXJlSW5mbyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9jYWwgVUkgbW9kZWwgb2YgdGhlIHBhZ2Ugd2l0aCB0aGUgZmllbGRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBmaWx0ZXIgYmFyICh0aGlzIGlzIHNwZWNpZmljIHRvIHRoZSBBTFAgc2NlbmFyaW8pLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIE1EQyBmaWx0ZXIgYmFyXG5cdCAqL1xuXHRfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyOiBGaWx0ZXJCYXIpIHtcblx0XHRjb25zdCBtQ2FjaGU6IGFueSA9IHt9O1xuXHRcdGNvbnN0IGlnbm9yZWRGaWVsZHM6IGFueSA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblxuXHRcdGlmICghYVRhYmxlcy5sZW5ndGggfHwgIWFDaGFydHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIG5vdCBhIHRhYmxlIGFuZCBhIGNoYXJ0LCB3ZSdyZSBub3QgaW4gdGhlIEFMUCBjYXNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIHRoZSBtb21lbnQsIHRoZXJlJ3Mgbm90aGluZyBmb3IgdGFibGVzLi4uXG5cdFx0YUNoYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IGAke3NDaGFydEVudGl0eVNldH1DaGFydGA7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc0NhY2hlS2V5XSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL2lnbm9yZWRGaWVsZHNcIiwgaWdub3JlZEZpZWxkcyk7XG5cdH1cblxuXHRfaXNGaWx0ZXJCYXJIaWRkZW4oKSB7XG5cdFx0cmV0dXJuICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuaGlkZUZpbHRlckJhcjtcblx0fVxuXG5cdF9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQoVmFyaWFudE1hbmFnZW1lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBCb29sZWFuIHtcblx0XHRpZiAoIVZhcmlhbnRNYW5hZ2VtZW50IHx8ICFrZXkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFudHMgPSBWYXJpYW50TWFuYWdlbWVudC5nZXRWYXJpYW50cygpO1xuXHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50ID0gdmFyaWFudHMuZmluZChmdW5jdGlvbiAodmFyaWFudDogYW55KSB7XG5cdFx0XHRyZXR1cm4gdmFyaWFudCAmJiB2YXJpYW50LmtleSA9PT0ga2V5O1xuXHRcdH0pO1xuXHRcdHJldHVybiAoY3VycmVudFZhcmlhbnQgJiYgY3VycmVudFZhcmlhbnQuZXhlY3V0ZU9uU2VsZWN0KSB8fCBmYWxzZTtcblx0fVxuXG5cdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk06IGFueSkge1xuXHRcdGlmIChcblx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuaW5pdGlhbExvYWQgPT09IEluaXRpYWxMb2FkTW9kZS5BdXRvICYmXG5cdFx0XHQoIW9WTSB8fCBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvQ29uZGl0aW9ucykge1xuXHRcdFx0XHRcdC8vIGlnbm9yZSBmaWx0ZXJzIHN0YXJ0aW5nIHdpdGggJCAoZS5nLiAkc2VhcmNoLCAkZWRpdFN0YXRlKVxuXHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiJFwiKSAmJiBBcnJheS5pc0FycmF5KG9Db25kaXRpb25zW3NLZXldKSAmJiBvQ29uZGl0aW9uc1tzS2V5XS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIGxvYWQgZGF0YSBhcyBwZXIgdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHRoZSB2YXJpYW50XG5cdFx0XHRcdFx0XHRjb25zdCBzdGFuZGFyZFZhcmlhbnQ6IGFueSA9IG9WTS5nZXRWYXJpYW50cygpLmZpbmQoKHZhcmlhbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFyaWFudC5rZXkgPT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3RhbmRhcmRWYXJpYW50ICYmIHN0YW5kYXJkVmFyaWFudC5leGVjdXRlT25TZWxlY3Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF91cGRhdGVUYWJsZShvVGFibGU6IGFueSkge1xuXHRcdGlmICghb1RhYmxlLmlzVGFibGVCb3VuZCgpIHx8IHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcykge1xuXHRcdFx0b1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0X3VwZGF0ZUNoYXJ0KG9DaGFydDogYW55KSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuX2dldENoYXJ0KG9DaGFydCk7XG5cdFx0aWYgKCEob0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuaXNCb3VuZChcImRhdGFcIikpIHx8IHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcykge1xuXHRcdFx0b0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpLnJlYmluZChvQ2hhcnQsIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKSk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdUYWJsZUNoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvbkZpbHRlcnNDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdC8vIFBlbmRpbmcgZmlsdGVycyBpbnRvIEZpbHRlckJhciB0byBiZSB1c2VkIGZvciBjdXN0b20gdmlld3Ncblx0XHRcdFx0dGhpcy5vblBlbmRpbmdGaWx0ZXJzKCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFwcGxpZWRGaWx0ZXJzXCIsIG9GaWx0ZXJCYXIuZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCgpLmZpbHRlcnNUZXh0KTtcblx0XHRcdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvVk0gPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFyaWFudEtleSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblxuXHRcdFx0b011bHRpTW9kZUNvbnRyb2w/LmludmFsaWRhdGVDb250ZW50KCk7XG5cdFx0XHRvTXVsdGlNb2RlQ29udHJvbD8uc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvVk0pKSB7XG5cdFx0XHRcdFx0Ly8gdGhlIGFwcCBzdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgdmlhIG9uU2VhcmNoIGhhbmRsZXJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLnRyaWdnZXJTZWFyY2goKTtcblx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy5fZ2V0QXBwbHlBdXRvbWF0aWNhbGx5T25WYXJpYW50KG9WTSwgY3VycmVudFZhcmlhbnRLZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAwKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlISEhXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSxcblx0XHRvblNlYXJjaCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSB0aGlzLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgYkhpZGVEcmFmdCA9IEZpbHRlclV0aWxzLmdldEVkaXRTdGF0ZUlzSGlkZURyYWZ0KG9GaWx0ZXJCYXIuZ2V0Q29uZGl0aW9ucygpKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhpZGVEcmFmdEluZm9cIiwgYkhpZGVEcmFmdCk7XG5cblx0XHRcdGlmICghdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdH1cblx0XHRcdGlmIChvTWRjQ2hhcnQpIHtcblx0XHRcdFx0Ly8gZGlzYWJsZSBib3VuZCBhY3Rpb25zIFRPRE86IHRoaXMgY2xlYXJzIGV2ZXJ5dGhpbmcgZm9yIHRoZSBjaGFydD9cblx0XHRcdFx0KG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KS5zZXRQcm9wZXJ0eShcIlwiLCB7fSk7XG5cblx0XHRcdFx0Y29uc3Qgb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9NZGNDaGFydC5nZXRCaW5kaW5nQ29udGV4dChcInBhZ2VJbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9hbHBDb250ZW50Vmlld2ApO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6Okxpc3RSZXBvcnRcIikgYXMgRHluYW1pY1BhZ2U7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogVjRDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRDb250ZW50KCksXG5cdFx0XHRcdG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCksXG5cdFx0XHRcdGFEYXRhID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImRhdGFcIiksXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoYURhdGEpIHtcblx0XHRcdFx0Ly8gdXBkYXRlIGFjdGlvbiBidXR0b25zIGVuYWJsZW1lbnQgLyBkaXNhYmxlbWVudFxuXHRcdFx0XHRDaGFydFJ1bnRpbWUuZm5VcGRhdGVDaGFydChvRXZlbnQpO1xuXHRcdFx0XHQvLyB1cGRhdGUgc2VsZWN0aW9ucyBvbiBzZWxlY3Rpb24gb3IgZGVzZWxlY3Rpb25cblx0XHRcdFx0Q2hhcnRVdGlscy5zZXRDaGFydEZpbHRlcnMob01kY0NoYXJ0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1RhYmxlKSB7XG5cdFx0XHRcdChvVGFibGUgYXMgYW55KS5yZWJpbmQoKTtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSBvRXZlbnQubVBhcmFtZXRlcnMua2V5ID8gb0V2ZW50Lm1QYXJhbWV0ZXJzLmtleSA6IG51bGw7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYWxwQ29udGVudFZpZXdcIiwgc1NlbGVjdGVkS2V5KTtcblx0XHRcdGNvbnN0IG9DaGFydCA9IHRoaXMuX2dldENoYXJ0KCk7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0Y29uc3Qgb1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlID0ge1xuXHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdFx0XHRcdGNvbnN0IGFJdGVtcyA9IG9TZWdtZW50ZWRCdXR0b24uZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHRhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpID09PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0XHRcdFx0b0l0ZW0uZm9jdXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLnJlbW92ZUV2ZW50RGVsZWdhdGUob1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IG9TZWdtZW50ZWRCdXR0b24gPSAoXG5cdFx0XHRcdHNTZWxlY3RlZEtleSA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSA/IHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbihcIlRhYmxlXCIpIDogdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKFwiQ2hhcnRcIilcblx0XHRcdCkgYXMgU2VnbWVudGVkQnV0dG9uO1xuXHRcdFx0aWYgKG9TZWdtZW50ZWRCdXR0b24gIT09IG9FdmVudC5nZXRTb3VyY2UoKSkge1xuXHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLmFkZEV2ZW50RGVsZWdhdGUob1NlZ21lbnRlZEJ1dHRvbkRlbGVnYXRlKTtcblx0XHRcdH1cblx0XHRcdHN3aXRjaCAoc1NlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ6XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZDpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVUYWJsZShvVGFibGUpO1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvbkZpbHRlcnNTZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIikgPT09IFwiQ29tcGFjdFwiKSB7XG5cdFx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInZpc3VhbEZpbHRlckJhcklkXCIpKSBhcyBDb250cm9sKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJ2aXN1YWxGaWx0ZXJCYXJJZFwiKSkgYXMgQ29udHJvbCkuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRHluYW1pY1BhZ2VUaXRsZVN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhcjogYW55ID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKGZpbHRlckJhciAmJiBmaWx0ZXJCYXIuZ2V0U2VnbWVudGVkQnV0dG9uKCkpIHtcblx0XHRcdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJpc0V4cGFuZGVkXCIpKSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyLmdldFNlZ21lbnRlZEJ1dHRvbigpLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyLmdldFNlZ21lbnRlZEJ1dHRvbigpLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRmb3JtYXR0ZXJzID0ge1xuXHRcdHNldEFMUENvbnRyb2xNZXNzYWdlU3RyaXAodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGFJZ25vcmVkRmllbGRzOiBhbnlbXSwgYklzQ2hhcnQ6IGFueSwgb0FwcGx5U3VwcG9ydGVkPzogYW55KSB7XG5cdFx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdFx0YklzQ2hhcnQgPSBiSXNDaGFydCA9PT0gXCJ0cnVlXCIgfHwgYklzQ2hhcnQgPT09IHRydWU7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBiSXNDaGFydCkge1xuXHRcdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0b0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLFxuXHRcdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlIGFzIFJlc291cmNlQnVuZGxlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlYXJjaElnbm9yZWQgPSAhb0FwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaDtcblx0XHRcdFx0c1RleHQgPSBiSXNDaGFydFxuXHRcdFx0XHRcdD8gTWVzc2FnZVN0cmlwLmdldEFMUFRleHQoYUlnbm9yZWRMYWJlbHMsIG9GaWx0ZXJCYXIsIGJJc1NlYXJjaElnbm9yZWQpXG5cdFx0XHRcdFx0OiBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgXCJcIiwgRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQpO1xuXHRcdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0UmVwb3J0Q29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxREEsSUFBTUEsbUJBQW1CLEdBQUdDLFdBQVcsQ0FBQ0QsbUJBQXhDO0VBQUEsSUFDQ0UsZUFBZSxHQUFHRCxXQUFXLENBQUNDLGVBRC9CO01BSU1DLG9CLFdBRExDLGNBQWMsQ0FBQyxrREFBRCxDLFVBRWJDLGNBQWMsQ0FDZEMsZUFBZSxDQUFDQyxRQUFoQixDQUF5QjtJQUN4QkMsY0FBYyxFQUFFLFlBQWlDO01BQy9DLEtBQUtDLE9BQUwsR0FBZUMsYUFBZixFQUFE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
903
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiQ29yZUxpYnJhcnkiLCJJbml0aWFsTG9hZE1vZGUiLCJMaXN0UmVwb3J0Q29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJJbnRlcm5hbFJvdXRpbmciLCJvdmVycmlkZSIsIm9uQWZ0ZXJCaW5kaW5nIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfb25BZnRlckJpbmRpbmciLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldEVudGl0eVNldCIsImJhc2UiLCJnZXRDdXJyZW50RW50aXR5U2V0IiwiU2lkZUVmZmVjdHMiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIlNoYXJlIiwiU2hhcmVPdmVycmlkZXMiLCJFZGl0RmxvdyIsIkVkaXRGbG93T3ZlcnJpZGVzIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiS1BJTWFuYWdlbWVudCIsIlBsYWNlaG9sZGVyIiwiTWFzc0VkaXQiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25GaWx0ZXJzQ2hhbmdlZCIsIm9FdmVudCIsIm9GaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib25QZW5kaW5nRmlsdGVycyIsInNldFByb3BlcnR5IiwiZ2V0QXNzaWduZWRGaWx0ZXJzVGV4dCIsImZpbHRlcnNUZXh0IiwiZ2V0UGFyYW1ldGVyIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvVk0iLCJnZXRTb3VyY2UiLCJjdXJyZW50VmFyaWFudEtleSIsIm9NdWx0aU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldEZyZWV6ZUNvbnRlbnQiLCJzZXRUaW1lb3V0IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwidHJpZ2dlclNlYXJjaCIsIl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsImdldENvbmRpdGlvbnMiLCJfdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyIsIm9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzVGVtcGxhdGVDb250ZW50VmlldyIsImdldFByb3BlcnR5IiwiZ2V0UGF0aCIsIkNoYXJ0IiwiaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyIsIlRhYmxlIiwiaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInRoZW4iLCJvRXh0ZXJuYWxTdGF0ZSIsImZpbHRlckJhckNvbmRpdGlvbnMiLCJmaWx0ZXIiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiZ2V0Vmlld0RhdGEiLCJsaXZlTW9kZSIsInN5c3RlbSIsInBob25lIiwib0R5bmFtaWNQYWdlIiwiYnlJZCIsInNldEhlYWRlckV4cGFuZGVkIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwib0NvbnRyb2xsZXIiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiZ2V0Q29udGVudCIsIm9UYWJsZSIsIl9nZXRUYWJsZSIsImFEYXRhIiwiQ2hhcnRSdW50aW1lIiwiZm5VcGRhdGVDaGFydCIsIkNoYXJ0VXRpbHMiLCJzZXRDaGFydEZpbHRlcnMiLCJyZWJpbmQiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJzU2VsZWN0ZWRLZXkiLCJtUGFyYW1ldGVycyIsImtleSIsIm9DaGFydCIsIl9nZXRDaGFydCIsIm9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhSXRlbXMiLCJvU2VnbWVudGVkQnV0dG9uIiwiZ2V0SXRlbXMiLCJmb3JFYWNoIiwib0l0ZW0iLCJnZXRLZXkiLCJmb2N1cyIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJfZ2V0U2VnbWVudGVkQnV0dG9uIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl91cGRhdGVUYWJsZSIsIl91cGRhdGVDaGFydCIsIkh5YnJpZCIsIm9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJzZXRWaXNpYmxlIiwiZGF0YSIsIm9uU3RhdGVDaGFuZ2UiLCJvbkR5bmFtaWNQYWdlVGl0bGVTdGF0ZUNoYW5nZWQiLCJmaWx0ZXJCYXIiLCJnZXRTZWdtZW50ZWRCdXR0b24iLCJmb3JtYXR0ZXJzIiwic2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCIsImFJZ25vcmVkRmllbGRzIiwiYklzQ2hhcnQiLCJvQXBwbHlTdXBwb3J0ZWQiLCJzVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImFJZ25vcmVkTGFiZWxzIiwiTWVzc2FnZVN0cmlwIiwiZ2V0TGFiZWxzIiwib1Jlc291cmNlQnVuZGxlIiwiYklzU2VhcmNoSWdub3JlZCIsImVuYWJsZVNlYXJjaCIsImdldEFMUFRleHQiLCJnZXRUZXh0IiwiRGVsZWdhdGVVdGlsIiwiZ2V0TG9jYWxpemVkVGV4dCIsImV4dGVuc2lvbkFQSSIsIkV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJfaGFzTXVsdGlWaXN1YWxpemF0aW9ucyIsImFscENvbnRlbnRWaWV3IiwiX2dldERlZmF1bHRQYXRoIiwiZGVza3RvcCIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRlclByb3h5Iiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiX3NldEluaXRMb2FkIiwib25FeGl0IiwiZGVzdHJveSIsImFUYWJsZXMiLCJfZ2V0Q29udHJvbHMiLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5Iiwib1RhYmxlQmluZGluZyIsIl9nZXRUYWJsZUJpbmRpbmciLCJDb21tb25VdGlscyIsIl9pc0ZjbEVuYWJsZWQiLCJyZWZyZXNoIiwic1VwZGF0ZVRpbWVyIiwiZm5VcGRhdGVUYWJsZUFjdGlvbnMiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldE1vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJyZXNwb25zZSIsImFDb250cm9scyIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInVuZGVmaW5lZCIsIm9Db250cm9sIiwic2V0Tm9EYXRhVGV4dCIsIm9uUGFnZVJlYWR5IiwiZm9yY2VGb2N1cyIsImdldFNob3dNZXNzYWdlcyIsInNldFNob3dNZXNzYWdlcyIsInNldEZvY3VzT25GaXJzdEVycm9uZW91c0ZpZWxkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwib25WaWV3TmVlZHNSZWZyZXNoIiwiX2lzTXVsdGlNb2RlIiwiZ2V0RGlzcGxheWVkRW50aXR5U2V0Iiwic2xpY2UiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiSlNPTiIsInBhcnNlIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib1RpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiTGlzdFJlcG9ydFRpdGxlIiwiTGlzdFJlcG9ydFN1YnRpdGxlIiwiX2dldFBhZ2VPckZpbHRlckJhclZhcmlhbnRNYW5hZ2VtZW50IiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsIl9nZXRBZGFwdGF0aW9uRmlsdGVyQmFyQ29udHJvbCIsImFkYXB0YXRpb25GaWx0ZXJCYXIiLCJnZXRJbmJ1aWx0RmlsdGVyIiwiZ2V0UGFyZW50Iiwic0NvbnRyb2wiLCJfZ2V0U2VnbWVudGVkQnV0dG9uSWQiLCJfZ2V0Q2hhcnRDb250cm9sSWQiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCIsIl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQiLCJfZ2V0VGFibGVDb250cm9sSWQiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsImNvbnRlbnQiLCJpc0EiLCJzVGFibGVJZCIsIm9UYWJsZUNvbnRyb2wiLCJfZ2V0Um93QmluZGluZyIsInNLZXkiLCJvVGFiTXVsdGlNb2RlIiwiaW5kZXhPZiIsInB1c2giLCJkZWZhdWx0UGF0aCIsIl9pc0luaXRMb2FkRW5hYmxlZCIsImluaXRMb2FkTW9kZSIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9kaXNhYmxlSW5pdExvYWQiLCJzZXRTdXNwZW5kU2VsZWN0aW9uIiwiX2FwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJyZWdpc3RlckFwcGx5QXV0b21hdGljYWxseU9uU3RhbmRhcmRWYXJpYW50IiwiYmluZCIsIl9zZXRTaGFyZU1vZGVsIiwiZm5HZXRVc2VyIiwiT2JqZWN0UGF0aCIsImdldCIsIm9TaGFyZUluZm8iLCJib29rbWFya1RpdGxlIiwiZG9jdW1lbnQiLCJib29rbWFya0N1c3RvbVVybCIsInNIYXNoIiwiaGFzaGVyIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzU2hhcmVJbkphbUFjdGl2ZSIsImlzSmFtQWN0aXZlIiwib1RlbXBsYXRlUHJpdmF0ZU1vZGVsIiwiZ2V0T3duZXJDb21wb25lbnQiLCJtQ2FjaGUiLCJpZ25vcmVkRmllbGRzIiwiYUNoYXJ0cyIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJzQ2FjaGVLZXkiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImhpZGVGaWx0ZXJCYXIiLCJWYXJpYW50TWFuYWdlbWVudCIsInZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJjdXJyZW50VmFyaWFudCIsImZpbmQiLCJ2YXJpYW50IiwiZXhlY3V0ZU9uU2VsZWN0IiwiQXV0byIsImdldFN0YW5kYXJkVmFyaWFudEtleSIsImdldEN1cnJlbnRWYXJpYW50S2V5Iiwib0NvbmRpdGlvbnMiLCJzdGFydHNXaXRoIiwic3RhbmRhcmRWYXJpYW50IiwiaXNUYWJsZUJvdW5kIiwib0lubmVyQ2hhcnQiLCJnZXRDb250cm9sRGVsZWdhdGUiLCJpc0JvdW5kIiwiZ2V0QmluZGluZ0luZm8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1BhZ2UgZnJvbSBcInNhcC9mL0R5bmFtaWNQYWdlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXh0ZW5zaWJsZSxcblx0ZmluYWxFeHRlbnNpb24sXG5cdHByaXZhdGVFeHRlbnNpb24sXG5cdHB1YmxpY0V4dGVuc2lvbixcblx0dXNpbmdFeHRlbnNpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IE11bHRpcGxlTW9kZUNvbnRyb2wgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9jb250cm9scy9NdWx0aXBsZU1vZGVDb250cm9sXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgRWRpdEZsb3dPdmVycmlkZXMgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9vdmVycmlkZXMvRWRpdEZsb3dcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBoYXNoZXIgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2hhc2hlclwiO1xuaW1wb3J0IHR5cGUgeyBWNENvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmNvbnN0IFRlbXBsYXRlQ29udGVudFZpZXcgPSBDb3JlTGlicmFyeS5UZW1wbGF0ZUNvbnRlbnRWaWV3LFxuXHRJbml0aWFsTG9hZE1vZGUgPSBDb3JlTGlicmFyeS5Jbml0aWFsTG9hZE1vZGU7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlclwiKVxuY2xhc3MgTGlzdFJlcG9ydENvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoe1xuXHRcdFx0b25BZnRlckJpbmRpbmc6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbFJvdXRpbmcpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcikuX29uQWZ0ZXJCaW5kaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiAodGhpcy5iYXNlIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5nZXRDdXJyZW50RW50aXR5U2V0KCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihTaWRlRWZmZWN0cylcblx0c2lkZUVmZmVjdHMhOiBTaWRlRWZmZWN0cztcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEVkaXRGbG93Lm92ZXJyaWRlKEVkaXRGbG93T3ZlcnJpZGVzKSlcblx0ZWRpdEZsb3chOiBFZGl0RmxvdztcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oS1BJTWFuYWdlbWVudClcblx0a3BpTWFuYWdlbWVudCE6IEtQSU1hbmFnZW1lbnQ7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIGZpbHRlckJhckNvbmRpdGlvbnM/OiBhbnk7XG5cdHByaXZhdGUgc1VwZGF0ZVRpbWVyPzogYW55O1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGhhc1BlbmRpbmdDaGFydENoYW5nZXM/OiBib29sZWFuO1xuXHRwcml2YXRlIGhhc1BlbmRpbmdUYWJsZUNoYW5nZXM/OiBib29sZWFuO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25Jbml0LmFwcGx5KHRoaXMpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhcHBsaWVkRmlsdGVyc1wiLCBcIlwiKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGZhbHNlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ1b21cIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNjYWxlZmFjdG9yXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3Rvck51bWJlclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3VycmVuY3lcIiwge30pO1xuXG5cdFx0aWYgKHRoaXMuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0bGV0IGFscENvbnRlbnRWaWV3ID0gdGhpcy5fZ2V0RGVmYXVsdFBhdGgoKTtcblx0XHRcdGlmICghc3lzdGVtLmRlc2t0b3AgJiYgYWxwQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdGFscENvbnRlbnRWaWV3ID0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdH1cblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIGFscENvbnRlbnRWaWV3KTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBjb25kaXRpb25zIGZyb20gZmlsdGVyIGJhclxuXHRcdC8vIHRoaXMgaXMgbGF0ZXIgdXNlZCBiZWZvcmUgbmF2aWdhdGlvbiB0byBnZXQgY29uZGl0aW9ucyBhcHBsaWVkIG9uIHRoZSBmaWx0ZXIgYmFyXG5cdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0ge307XG5cblx0XHQvLyBBcyBBcHBTdGF0ZUhhbmRsZXIuYXBwbHlBcHBTdGF0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gd2Ugd2FudCB0byBtYWtlIHN1cmUgaXQgd2lsbFxuXHRcdC8vIGhhcHBlbiBhZnRlciB0aGUgcm91dGVNYXRjaCBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQgKG90aGVyd2lzZSB0aGUgcm91dGVyIGdldHMgYnJva2VuKVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdC8vIENvbmZpZ3VyZSB0aGUgaW5pdGlhbCBsb2FkIHNldHRpbmdzXG5cdFx0dGhpcy5fc2V0SW5pdExvYWQoKTtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRkZWxldGUgdGhpcy5maWx0ZXJCYXJDb25kaXRpb25zO1xuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRfb25BZnRlckJpbmRpbmcoKSB7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIik7XG5cdFx0aWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpLl9pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGFuIGlzc3VlIGlmIHdlIHVzZSBhIHRpbWVvdXQgd2l0aCBhIGtlcHQgYWxpdmUgY29udGV4dCB1c2VkIG9uIGFub3RoZXIgcGFnZVxuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMuc1VwZGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5zVXBkYXRlVGltZXI7XG5cdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBVcGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgdXBvbiB0YWJsZSBkYXRhIHVwZGF0ZS5cblx0XHRcdFx0XHRjb25zdCBmblVwZGF0ZVRhYmxlQWN0aW9ucyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZVByb2Nlc3NlZCgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSgpKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdGNvbnN0IHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdG9Db250cm9sLnNldE5vRGF0YVRleHQoc1RleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2cgYW5kIGZvY3VzaW5nIG9uIHRoZW1cblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgIW9GaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0b0ZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHRcdChvRmlsdGVyQmFyIGFzIGFueSkuc2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBsaXN0IHJlcG9ydCB2aWV3IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIG9uIHRoZSBGaWx0ZXJCYXIgYW5kIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkLFxuXHQgKiBvciB3aGVuIGEgdGFiIHdpdGggY3VzdG9tIGNvbnRlbnQgaXMgc2VsZWN0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQgb3Igc2VhcmNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCkge1xuXHRcdHJldHVybiB0aGlzLl9pc011bHRpTW9kZSgpXG5cdFx0XHQ/IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKT8uZ2V0RGlzcGxheWVkRW50aXR5U2V0KClcblx0XHRcdDogdGhpcy5fZ2V0VGFibGUoKT8uZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLnNsaWNlKDEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICpcblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBhbnkpIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblxuXHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvVGl0bGVJbmZvID0geyB0aXRsZTogXCJcIiwgc3VidGl0bGU6IFwiXCIsIGludGVudDogXCJcIiwgaWNvbjogXCJcIiB9O1xuXHRcdG9UaXRsZUluZm8udGl0bGUgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YSgpLkxpc3RSZXBvcnRUaXRsZTtcblx0XHRvVGl0bGVJbmZvLnN1YnRpdGxlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoKS5MaXN0UmVwb3J0U3VidGl0bGU7XG5cdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdH1cblxuXHRfZ2V0UGFnZU9yRmlsdGVyQmFyVmFyaWFudE1hbmFnZW1lbnQoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpIHx8IHRoaXMuZ2V0VmlldygpLmJ5SWQoYCR7dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbElkKCl9OjpWYXJpYW50TWFuYWdlbWVudGApXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2xJZCgpKSBhcyBGaWx0ZXJCYXI7XG5cdH1cblxuXHRfZ2V0QWRhcHRhdGlvbkZpbHRlckJhckNvbnRyb2woKSB7XG5cdFx0Ly8gSWYgdGhlIGFkYXB0YXRpb24gZmlsdGVyIGJhciBpcyBwYXJ0IG9mIHRoZSBET00gdHJlZSwgdGhlIFwiQWRhcHQgRmlsdGVyXCIgZGlhbG9nIGlzIG9wZW4sXG5cdFx0Ly8gYW5kIHdlIHJldHVybiB0aGUgYWRhcHRhdGlvbiBmaWx0ZXIgYmFyIGFzIGFuIGFjdGl2ZSBjb250cm9sICh2aXNpYmxlIGZvciB0aGUgdXNlcilcblx0XHRjb25zdCBhZGFwdGF0aW9uRmlsdGVyQmFyID0gKHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKSBhcyBhbnkpLmdldEluYnVpbHRGaWx0ZXIoKTtcblx0XHRyZXR1cm4gYWRhcHRhdGlvbkZpbHRlckJhcj8uZ2V0UGFyZW50KCkgPyBhZGFwdGF0aW9uRmlsdGVyQmFyIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uSWQoc0NvbnRyb2wpKTtcblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b25JZChzQ29udHJvbDogYW55KSB7XG5cdFx0aWYgKHNDb250cm9sID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDaGFydCgpLmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImZpbHRlckJhcklkXCIpO1xuXHR9XG5cblx0X2dldENoYXJ0Q29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInNpbmdsZUNoYXJ0SWRcIik7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0Q2hhcnRDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInZpc3VhbEZpbHRlckJhcklkXCIpO1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlOjpDb250cm9sXCIpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cdH1cblxuXHRfZ2V0VGFibGVDb250cm9sSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwic2luZ2xlVGFibGVJZFwiKTtcblx0fVxuXG5cdF9nZXRUYWJsZSgpOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpPy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50O1xuXHRcdFx0cmV0dXJuIG9Db250cm9sPy5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpID8gKG9Db250cm9sIGFzIFRhYmxlKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0VGFibGVDb250cm9sSWQoKSkgYXMgVGFibGU7XG5cdH1cblxuXHRfZ2V0Q2hhcnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0Q2hhcnRDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKHNUYWJsZUlkPzogYW55KSB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29udHJvbCA9IHNUYWJsZUlkID8gdGhpcy5nZXRWaWV3KCkuYnlJZChzVGFibGVJZCkgOiB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdHJldHVybiBvVGFibGVDb250cm9sICYmIChvVGFibGVDb250cm9sIGFzIGFueSkuX2dldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdF9nZXRDb250cm9scyhzS2V5PzogYW55KSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkuY29udGVudDtcblx0XHRcdG9UYWJNdWx0aU1vZGUuZ2V0SXRlbXMoKS5mb3JFYWNoKChvSXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gdGhpcy5nZXRWaWV3KCkuYnlJZChvSXRlbS5nZXRLZXkoKSk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCAmJiBzS2V5KSB7XG5cdFx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpLmluZGV4T2YoYGZlOjoke3NLZXl9YCkgPiAtMSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gYUNvbnRyb2xzO1xuXHRcdH0gZWxzZSBpZiAoc0tleSA9PT0gXCJDaGFydFwiKSB7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLl9nZXRDaGFydCgpO1xuXHRcdFx0cmV0dXJuIG9DaGFydCA/IFtvQ2hhcnRdIDogW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRyZXR1cm4gb1RhYmxlID8gW29UYWJsZV0gOiBbXTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RGVmYXVsdFBhdGgoKSB7XG5cdFx0Y29uc3QgZGVmYXVsdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImRlZmF1bHRQYXRoXCIpO1xuXHRcdHN3aXRjaCAoZGVmYXVsdFBhdGgpIHtcblx0XHRcdGNhc2UgXCJwcmltYXJ5XCI6XG5cdFx0XHRcdHJldHVybiBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0Y2FzZSBcInNlY29uZGFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZTtcblx0XHRcdGNhc2UgXCJib3RoXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBrbm93IGlmIExpc3RSZXBvcnQgaXMgY29uZmlndXJlZCB3aXRoIE11bHRpcGxlIFRhYmxlIG1vZGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaXNNdWx0aU1vZGVcblx0ICogQHJldHVybnMgSXMgTXVsdGlwbGUgVGFibGUgbW9kZSBzZXQ/XG5cdCAqL1xuXHRfaXNNdWx0aU1vZGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpPy5nZXRQcm9wZXJ0eShcIi9tdWx0aVZpZXdzQ29udHJvbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gbG9hZCBkYXRhIGF0IHN0YXJ0IHVwLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzSW5pdExvYWREaXNhYmxlZFxuXHQgKiBAcmV0dXJucyBJcyBJbml0TG9hZCBlbmFibGVkP1xuXHQgKi9cblx0X2lzSW5pdExvYWRFbmFibGVkKCkge1xuXHRcdGNvbnN0IGluaXRMb2FkTW9kZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuaW5pdGlhbExvYWQ7XG5cdFx0cmV0dXJuIGluaXRMb2FkTW9kZSA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQ7XG5cdH1cblxuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zXCIpID09PSBcInRydWVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc3VzcGVuZCBzZWFyY2ggb24gdGhlIGZpbHRlciBiYXIuIFRoZSBpbml0aWFsIGxvYWRpbmcgb2YgZGF0YSBpcyBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBJbml0TG9hZCAtIERpc2FibGVkL0F1dG8uXG5cdCAqIEl0IGlzIGVuYWJsZWQgbGF0ZXIgd2hlbiB0aGUgdmlldyBzdGF0ZSBpcyBzZXQsIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gcmVhbGl6ZSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzLlxuXHQgKi9cblx0X2Rpc2FibGVJbml0TG9hZCgpIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0Ly8gY2hlY2sgZm9yIGZpbHRlciBiYXIgaGlkZGVuXG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0ZmlsdGVyQmFyLnNldFN1c3BlbmRTZWxlY3Rpb24odHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCBjYWxsZWQgYnkgZmxleCB0byBkZXRlcm1pbmUgaWYgdGhlIGFwcGx5QXV0b21hdGljYWxseSBzZXR0aW5nIG9uIHRoZSB2YXJpYW50IGlzIHZhbGlkLlxuXHQgKiBDYWxsZWQgb25seSBmb3IgU3RhbmRhcmQgVmFyaWFudCBhbmQgb25seSB3aGVuIHRoZXJlIGlzIGRpc3BsYXkgdGV4dCBzZXQgZm9yIGFwcGx5QXV0b21hdGljYWxseSAoRkUgb25seSBzZXRzIGl0IGZvciBBdXRvKS5cblx0ICpcblx0ICogQHJldHVybnMgQm9vbGVhbiB0cnVlIGlmIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCgpIHtcblx0XHQvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIGFuZCB0YWtlIGNhcmUgb2YgaXQgd2hlbiB2aWV3IHN0YXRlIGlzIHNldFxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25maWd1cmUgdGhlIHNldHRpbmdzIGZvciBpbml0aWFsIGxvYWQgYmFzZWQgb25cblx0ICogLSBtYW5pZmVzdCBzZXR0aW5nIGluaXRMb2FkIC0gRW5hYmxlZC9EaXNhYmxlZC9BdXRvXG5cdCAqIC0gdXNlcidzIHNldHRpbmcgb2YgYXBwbHlBdXRvbWF0aWNhbGx5IG9uIHZhcmlhbnRcblx0ICogLSBpZiB0aGVyZSBhcmUgZGVmYXVsdCBmaWx0ZXJzXG5cdCAqIFdlIGRpc2FibGUgdGhlIGZpbHRlciBiYXIgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuYWJsZSBpdCB3aGVuIHZpZXcgc3RhdGUgaXMgc2V0LlxuXHQgKi9cblx0X3NldEluaXRMb2FkKCkge1xuXHRcdC8vIGlmIGluaXRMb2FkIGlzIERpc2FibGVkIG9yIEF1dG8sIHN3aXRjaCBvZmYgZmlsdGVyIGJhciBzZWFyY2ggdGVtcG9yYXJpbHkgYXQgc3RhcnRcblx0XHRpZiAoIXRoaXMuX2lzSW5pdExvYWRFbmFibGVkKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVJbml0TG9hZCgpO1xuXHRcdH1cblx0XHQvLyBzZXQgaG9vayBmb3IgZmxleCBmb3Igd2hlbiBzdGFuZGFyZCB2YXJpYW50IGlzIHNldCAoYXQgc3RhcnQgb3IgYnkgdXNlciBhdCBydW50aW1lKVxuXHRcdC8vIHJlcXVpcmVkIHRvIG92ZXJyaWRlIHRoZSB1c2VyIHNldHRpbmcgJ2FwcGx5IGF1dG9tYXRpY2FsbHknIGJlaGF2aW91ciBpZiB0aGVyZSBhcmUgbm8gZmlsdGVyc1xuXHRcdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBhbnkgPSB0aGlzLl9nZXRQYWdlT3JGaWx0ZXJCYXJWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0dmFyaWFudE1hbmFnZW1lbnQucmVnaXN0ZXJBcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudCh0aGlzLl9hcHBseUF1dG9tYXRpY2FsbHlPblN0YW5kYXJkVmFyaWFudC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gYCMke3NIYXNofWAgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdH0sXG5cdFx0XHQvKlxuXHRcdFx0XHRcdFx0XHRUbyBiZSBhY3RpdmF0ZWQgb25jZSB0aGUgRkxQIHNob3dzIHRoZSBjb3VudCAtIHNlZSBjb21tZW50IGFib3ZlXG5cdFx0XHRcdFx0XHRcdGJvb2ttYXJrU2VydmljZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly92YXIgb1RhYmxlID0gb1RhYmxlLmdldElubmVyVGFibGUoKTsgb1RhYmxlIGlzIGFscmVhZHkgdGhlIHNhcC5mZSB0YWJsZSAoYnV0IG5vdCB0aGUgaW5uZXIgb25lKVxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB1c2UgdGFibGUuZ2V0TGlzdEJpbmRpbmdJbmZvIGluc3RlYWQgb2YgdGhlIGJpbmRpbmdcblx0XHRcdFx0XHRcdFx0XHR2YXIgb0JpbmRpbmcgPSBvVGFibGUuZ2V0QmluZGluZyhcInJvd3NcIikgfHwgb1RhYmxlLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmcgPyBmbkdldERvd25sb2FkVXJsKG9CaW5kaW5nKSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0sKi9cblx0XHRcdGlzU2hhcmVJbkphbUFjdGl2ZTogISFmbkdldFVzZXIgJiYgZm5HZXRVc2VyKCkuaXNKYW1BY3RpdmUoKVxuXHRcdH07XG5cblx0XHRjb25zdCBvVGVtcGxhdGVQcml2YXRlTW9kZWwgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJfdGVtcGxQcml2XCIpIGFzIEpTT05Nb2RlbDtcblx0XHRvVGVtcGxhdGVQcml2YXRlTW9kZWwuc2V0UHJvcGVydHkoXCIvbGlzdFJlcG9ydC9zaGFyZVwiLCBvU2hhcmVJbmZvKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIEFMUCBzY2VuYXJpbykuXG5cdCAqXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0ICogQHBhcmFtIG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdGNvbnN0IG1DYWNoZTogYW55ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogYW55ID0ge30sXG5cdFx0XHRhVGFibGVzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJ0YWJsZVwiKSxcblx0XHRcdGFDaGFydHMgPSB0aGlzLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpO1xuXG5cdFx0aWYgKCFhVGFibGVzLmxlbmd0aCB8fCAhYUNoYXJ0cy5sZW5ndGgpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3Mgbm90IGEgdGFibGUgYW5kIGEgY2hhcnQsIHdlJ3JlIG5vdCBpbiB0aGUgQUxQIGNhc2Vcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGb3IgdGhlIG1vbWVudCwgdGhlcmUncyBub3RoaW5nIGZvciB0YWJsZXMuLi5cblx0XHRhQ2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRjb25zdCBzQ2hhcnRFbnRpdHlQYXRoID0gb0NoYXJ0LmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c0NoYXJ0RW50aXR5U2V0ID0gc0NoYXJ0RW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5U2V0fUNoYXJ0YDtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldEFwcGx5QXV0b21hdGljYWxseU9uVmFyaWFudChWYXJpYW50TWFuYWdlbWVudDogYW55LCBrZXk6IHN0cmluZyk6IEJvb2xlYW4ge1xuXHRcdGlmICghVmFyaWFudE1hbmFnZW1lbnQgfHwgIWtleSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYW50cyA9IFZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3QgY3VycmVudFZhcmlhbnQgPSB2YXJpYW50cy5maW5kKGZ1bmN0aW9uICh2YXJpYW50OiBhbnkpIHtcblx0XHRcdHJldHVybiB2YXJpYW50ICYmIHZhcmlhbnQua2V5ID09PSBrZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIChjdXJyZW50VmFyaWFudCAmJiBjdXJyZW50VmFyaWFudC5leGVjdXRlT25TZWxlY3QpIHx8IGZhbHNlO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogYW55KSB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gbG9hZCBkYXRhIGFzIHBlciB1c2VyJ3Mgc2V0dGluZyBvZiBhcHBseUF1dG9tYXRpY2FsbHkgb24gdGhlIHZhcmlhbnRcblx0XHRcdFx0XHRcdGNvbnN0IHN0YW5kYXJkVmFyaWFudDogYW55ID0gb1ZNLmdldFZhcmlhbnRzKCkuZmluZCgodmFyaWFudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YXJpYW50LmtleSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzdGFuZGFyZFZhcmlhbnQgJiYgc3RhbmRhcmRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogYW55KSB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBhbnkpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHRvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgb0ZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQpO1xuXHRcdFx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9WTSA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYXJpYW50S2V5ID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImtleVwiKTtcblx0XHRcdGNvbnN0IG9NdWx0aU1vZGVDb250cm9sID0gdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXG5cdFx0XHRvTXVsdGlNb2RlQ29udHJvbD8uaW52YWxpZGF0ZUNvbnRlbnQoKTtcblx0XHRcdG9NdWx0aU1vZGVDb250cm9sPy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdFx0Ly8gc2V0VGltZW91dCBjYXVzZSB0aGUgdmFyaWFudCBuZWVkcyB0byBiZSBhcHBsaWVkIGJlZm9yZSBqdWRnaW5nIHRoZSBhdXRvIHNlYXJjaCBvciB1cGRhdGluZyB0aGUgYXBwIHN0YXRlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTSkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCF0aGlzLl9nZXRBcHBseUF1dG9tYXRpY2FsbHlPblZhcmlhbnQob1ZNLCBjdXJyZW50VmFyaWFudEtleSkpIHtcblx0XHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDApO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmUhISFcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAxMDAwKTtcblx0XHR9LFxuXHRcdG9uU2VhcmNoKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyKSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9NZGNDaGFydCA9IHRoaXMuZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBiSGlkZURyYWZ0ID0gRmlsdGVyVXRpbHMuZ2V0RWRpdFN0YXRlSXNIaWRlRHJhZnQob0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCkpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgZmFsc2UpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBiSGlkZURyYWZ0KTtcblxuXHRcdFx0aWYgKCF0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCkpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlQUxQTm90QXBwbGljYWJsZUZpZWxkcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9NZGNDaGFydCkge1xuXHRcdFx0XHQvLyBkaXNhYmxlIGJvdW5kIGFjdGlvbnMgVE9ETzogdGhpcyBjbGVhcnMgZXZlcnl0aGluZyBmb3IgdGhlIGNoYXJ0P1xuXHRcdFx0XHQob01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFwiXCIsIHt9KTtcblxuXHRcdFx0XHRjb25zdCBvUGFnZUludGVybmFsTW9kZWxDb250ZXh0ID0gb01kY0NoYXJ0LmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCk7XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gc3RvcmUgZmlsdGVyIGJhciBjb25kaXRpb25zIHRvIHVzZSBsYXRlciB3aGlsZSBuYXZpZ2F0aW9uXG5cdFx0XHRTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHRcdC50aGVuKChvRXh0ZXJuYWxTdGF0ZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maWx0ZXJCYXJDb25kaXRpb25zID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgZXh0ZXJuYWwgc3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRpZiAoKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5saXZlTW9kZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc3lzdGVtLnBob25lKSB7XG5cdFx0XHRcdGNvbnN0IG9EeW5hbWljUGFnZSA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6TGlzdFJlcG9ydFwiKSBhcyBEeW5hbWljUGFnZTtcblx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldENvbnRlbnQoKSxcblx0XHRcdFx0b1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKSxcblx0XHRcdFx0YURhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChhRGF0YSkge1xuXHRcdFx0XHQvLyB1cGRhdGUgYWN0aW9uIGJ1dHRvbnMgZW5hYmxlbWVudCAvIGRpc2FibGVtZW50XG5cdFx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0XHRcdC8vIHVwZGF0ZSBzZWxlY3Rpb25zIG9uIHNlbGVjdGlvbiBvciBkZXNlbGVjdGlvblxuXHRcdFx0XHRDaGFydFV0aWxzLnNldENoYXJ0RmlsdGVycyhvTWRjQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc1RlbXBsYXRlQ29udGVudFZpZXcgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vYWxwQ29udGVudFZpZXdgKTtcblx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydCkge1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChvVGFibGUpIHtcblx0XHRcdFx0KG9UYWJsZSBhcyBhbnkpLnJlYmluZCgpO1xuXHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG9FdmVudC5tUGFyYW1ldGVycy5rZXkgPyBvRXZlbnQubVBhcmFtZXRlcnMua2V5IDogbnVsbDtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBzU2VsZWN0ZWRLZXkpO1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5fZ2V0Q2hhcnQoKTtcblx0XHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0XHRjb25zdCBvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUgPSB7XG5cdFx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRJdGVtcygpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uZ2V0S2V5KCkgPT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0XHRcdFx0XHRvSXRlbS5mb2N1cygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24ucmVtb3ZlRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgb1NlZ21lbnRlZEJ1dHRvbiA9IChcblx0XHRcdFx0c1NlbGVjdGVkS2V5ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlID8gdGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uKFwiVGFibGVcIikgOiB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oXCJDaGFydFwiKVxuXHRcdFx0KSBhcyBTZWdtZW50ZWRCdXR0b247XG5cdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbiAhPT0gb0V2ZW50LmdldFNvdXJjZSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uYWRkRXZlbnREZWxlZ2F0ZShvU2VnbWVudGVkQnV0dG9uRGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDpcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkOlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlKG9UYWJsZSk7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ2hhcnQob0NoYXJ0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc1NlZ21lbnRlZEJ1dHRvblByZXNzZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImtleVwiKSA9PT0gXCJDb21wYWN0XCIpIHtcblx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwidmlzdWFsRmlsdGVyQmFySWRcIikpIGFzIENvbnRyb2wpLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInZpc3VhbEZpbHRlckJhcklkXCIpKSBhcyBDb250cm9sKS5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TdGF0ZUNoYW5nZSh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25EeW5hbWljUGFnZVRpdGxlU3RhdGVDaGFuZ2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyOiBhbnkgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAoZmlsdGVyQmFyICYmIGZpbHRlckJhci5nZXRTZWdtZW50ZWRCdXR0b24oKSkge1xuXHRcdFx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImlzRXhwYW5kZWRcIikpIHtcblx0XHRcdFx0XHRmaWx0ZXJCYXIuZ2V0U2VnbWVudGVkQnV0dG9uKCkuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmaWx0ZXJCYXIuZ2V0U2VnbWVudGVkQnV0dG9uKCkuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGZvcm1hdHRlcnMgPSB7XG5cdFx0c2V0QUxQQ29udHJvbE1lc3NhZ2VTdHJpcCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgYUlnbm9yZWRGaWVsZHM6IGFueVtdLCBiSXNDaGFydDogYW55LCBvQXBwbHlTdXBwb3J0ZWQ/OiBhbnkpIHtcblx0XHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0XHRiSXNDaGFydCA9IGJJc0NoYXJ0ID09PSBcInRydWVcIiB8fCBiSXNDaGFydCA9PT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0XHRhSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRvRmlsdGVyQmFyLmRhdGEoXCJlbnRpdHlUeXBlXCIpLFxuXHRcdFx0XHRcdG9GaWx0ZXJCYXIsXG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgYXMgUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoO1xuXHRcdFx0XHRzVGV4dCA9IGJJc0NoYXJ0XG5cdFx0XHRcdFx0PyBNZXNzYWdlU3RyaXAuZ2V0QUxQVGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckJhciwgYklzU2VhcmNoSWdub3JlZClcblx0XHRcdFx0XHQ6IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQmFyLCBcIlwiLCBEZWxlZ2F0ZVV0aWwuZ2V0TG9jYWxpemVkVGV4dCk7XG5cdFx0XHRcdHJldHVybiBzVGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RSZXBvcnRDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFEQSxJQUFNQSxtQkFBbUIsR0FBR0MsV0FBVyxDQUFDRCxtQkFBeEM7RUFBQSxJQUNDRSxlQUFlLEdBQUdELFdBQVcsQ0FBQ0MsZUFEL0I7TUFJTUMsb0IsV0FETEMsY0FBYyxDQUFDLGtEQUFELEMsVUFFYkMsY0FBYyxDQUNkQyxlQUFlLENBQUNDLFFBQWhCLENBQXlCO0lBQ3hCQyxjQUFjLEVBQUUsWUFBaUM7TUFDL0MsS0FBS0MsT0FBTCxHQUFlQyxhQUFmLEVB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
@@ -93,7 +93,7 @@ class ListReportController extends PageController {
93
93
  placeholder!: Placeholder;
94
94
  @usingExtension(MassEdit)
95
95
  massEdit!: MassEdit;
96
- private extensionAPI?: ExtensionAPI;
96
+ protected extensionAPI?: ExtensionAPI;
97
97
  private filterBarConditions?: any;
98
98
  private sUpdateTimer?: any;
99
99
  private oResourceBundle?: ResourceBundle;
@@ -82,12 +82,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/C
82
82
  var _proto = MultipleModeControl.prototype;
83
83
 
84
84
  _proto.onBeforeRendering = function onBeforeRendering() {
85
- var _this$_getFilterContr,
86
- _this2 = this;
85
+ var _this2 = this;
87
86
 
88
87
  this.getTabsModel(); // Generate the model which is mandatory for some bindings
89
88
 
90
- var oFilterBarAPI = (_this$_getFilterContr = this._getFilterControl()) === null || _this$_getFilterContr === void 0 ? void 0 : _this$_getFilterContr.getParent();
89
+ var oFilterControl = this._getFilterControl();
90
+
91
+ if (!oFilterControl) {
92
+ // In case there's no filterbar, we have to update the counts in the tabs immediately
93
+ this.setCountsOutDated(true);
94
+ }
95
+
96
+ var oFilterBarAPI = oFilterControl === null || oFilterControl === void 0 ? void 0 : oFilterControl.getParent();
91
97
 
92
98
  this._getAllInnerControls().forEach(function (oMacroAPI) {
93
99
  var _oMacroAPI$suspendBin;
@@ -158,9 +164,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/C
158
164
  ;
159
165
 
160
166
  _proto.getSelectedInnerControl = function getSelectedInnerControl() {
161
- var _this3 = this;
167
+ var _this$content,
168
+ _this3 = this;
162
169
 
163
- var oSelectedTab = this.content.getItems().find(function (oItem) {
170
+ var oSelectedTab = (_this$content = this.content) === null || _this$content === void 0 ? void 0 : _this$content.getItems().find(function (oItem) {
164
171
  return oItem.getKey() === _this3.content.getSelectedKey();
165
172
  });
166
173
  return oSelectedTab ? this._getAllInnerControls().find(function (oMacroAPI) {
@@ -355,9 +362,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/C
355
362
  };
356
363
 
357
364
  _proto._refreshTabsCount = function _refreshTabsCount() {
358
- var _this6 = this;
365
+ var _this$content2,
366
+ _this6 = this;
359
367
 
360
- var sSelectedKey = this.content.getSelectedKey();
368
+ var sSelectedKey = (_this$content2 = this.content) === null || _this$content2 === void 0 ? void 0 : _this$content2.getSelectedKey();
361
369
 
362
370
  this._getAllInnerControls(true).forEach(function (oMacroAPI) {
363
371
  var oIconTabFilter = _this6._getTabFromInnerControl(oMacroAPI);
@@ -468,4 +476,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/C
468
476
  })), _class2)) || _class);
469
477
  return MultipleModeControl;
470
478
  }, false);
471
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsImRlZmluZVVJNUNsYXNzIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImFzc29jaWF0aW9uIiwiZXZlbnQiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFRhYnNNb2RlbCIsIm9GaWx0ZXJCYXJBUEkiLCJfZ2V0RmlsdGVyQ29udHJvbCIsImdldFBhcmVudCIsIl9nZXRBbGxJbm5lckNvbnRyb2xzIiwiZm9yRWFjaCIsIm9NYWNyb0FQSSIsInNob3dDb3VudHMiLCJhdHRhY2hFdmVudCIsIl9yZWZyZXNoVGFic0NvdW50IiwiYmluZCIsInN1c3BlbmRCaW5kaW5nIiwiX29uU2VhcmNoIiwiX29uRmlsdGVyQ2hhbmdlZCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImNvbnRlbnQiLCJnZXREaXNwbGF5ZWRFbnRpdHlTZXQiLCJkYXRhIiwic2xpY2UiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIl9nZXRUYWJGcm9tSW5uZXJDb250cm9sIiwiaGFuZGxlVGFiQ2hhbmdlIiwib0V2ZW50Iiwib0ljb25UYWJCYXIiLCJnZXRTb3VyY2UiLCJvTXVsdGlDb250cm9sIiwibVBhcmFtZXRlcnMiLCJnZXRQYXJhbWV0ZXJzIiwiX3NldElubmVyQmluZGluZyIsInNQcmV2aW91c1NlbGVjdGVkS2V5IiwicHJldmlvdXNLZXkiLCJzU2VsZWN0ZWRLZXkiLCJzZWxlY3RlZEtleSIsIm9GaWx0ZXJCYXIiLCJfcmVmcmVzaEN1c3RvbVZpZXciLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwiQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJIiwiYWRkIiwiY2hhbmdlcyIsImNoYW5nZVNwZWNpZmljRGF0YSIsImNoYW5nZVR5cGUiLCJwcmV2aW91c1NlbGVjdGVkS2V5Iiwic2VsZWN0b3JFbGVtZW50IiwiX2dldFZpZXdDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJmaXJlRXZlbnQiLCJpY29uVGFiQmFyIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJzZXRDb3VudHNPdXREYXRlZCIsImJWYWx1ZSIsInNldFByb3BlcnR5Iiwic2V0RnJlZXplQ29udGVudCIsIl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUmVzb3VyY2VCdW5kbGUiLCJ0YWJzTW9kZWwiLCJvRmlsdGVyQ29udHJvbCIsInJlc3VsdHMiLCJvVGFiIiwic1RhYklkIiwibUlnbm9yZWRGaWVsZHMiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm5vdEFwcGxpY2FibGUiLCJmaWVsZHMiLCJ0aXRsZSIsIl9zZXRUYWJNZXNzYWdlU3RyaXAiLCJlbnRpdHlUeXBlUGF0aCIsImlnbm9yZWRGaWVsZHMiLCJyZXNvdXJjZUJ1bmRsZSIsImdldFRleHQiLCJzZXREYXRhIiwiYk9ubHlGb3JWaXNpYmxlVGFiIiwiaW5uZXJDb250cm9scyIsInJlZHVjZSIsImFJbm5lckNvbnRyb2xzIiwic0lubmVyQ29udHJvbCIsIkNvcmUiLCJieUlkIiwicHVzaCIsImZpbHRlciIsIm9Jbm5lckNvbnRyb2wiLCJnZXRWaXNpYmxlIiwiZmlsdGVyQ29udHJvbCIsInNTdXBwb3J0ZWRDbGFzcyIsIkljb25UYWJGaWx0ZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJpc0EiLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwib0ljb25UYWJGaWx0ZXIiLCJnZXRDb3VudHMiLCJjb3VudHNPdXREYXRlZCIsInNldENvdW50IiwidGhlbiIsImlDb3VudCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQiLCJiSXNTZWxlY3RlZEtleSIsInNBY3Rpb24iLCJSZXN1bWUiLCJTdXNwZW5kIiwicHJvcGVydGllcyIsInNUZXh0IiwiYUlnbm9yZWRGaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJnZXRQYXJhbWV0ZXIiLCJDb250cm9sIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aXBsZU1vZGVDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IEljb25UYWJGaWx0ZXIgZnJvbSBcInNhcC9tL0ljb25UYWJGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCBDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkgZnJvbSBcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIElubmVyQ29udHJvbFR5cGUgPSBNYWNyb0FQSSAmXG5cdFBhcnRpYWw8e1xuXHRcdHJlc3VtZUJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdHN1c3BlbmRCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRnZXRDb3VudHM6IEZ1bmN0aW9uO1xuXHRcdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzOiBGdW5jdGlvbjtcblx0XHRpbnZhbGlkYXRlQ29udGVudDogRnVuY3Rpb247XG5cdH0+O1xuXG50eXBlIE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMgPSB7XG5cdGVudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGlnbm9yZWRGaWVsZHM6IGFueVtdO1xuXHRyZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGU7XG5cdHRpdGxlOiBzdHJpbmc7XG59O1xuXG5lbnVtIEJpbmRpbmdBY3Rpb24ge1xuXHRTdXNwZW5kID0gXCJzdXNwZW5kQmluZGluZ1wiLFxuXHRSZXN1bWUgPSBcInJlc3VtZUJpbmRpbmdcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuY29udHJvbHMuTXVsdGlwbGVNb2RlQ29udHJvbFwiKVxuY2xhc3MgTXVsdGlwbGVNb2RlQ29udHJvbCBleHRlbmRzIENvbnRyb2wge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRzaG93Q291bnRzITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRmcmVlemVDb250ZW50ITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRjb3VudHNPdXREYXRlZCE6IGJvb2xlYW47XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5JY29uVGFiQmFyXCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdGNvbnRlbnQhOiBJY29uVGFiQmFyO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRpbm5lckNvbnRyb2xzITogc3RyaW5nW107XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAuZmUuY29yZS5jb250cm9scy5GaWx0ZXJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGZpbHRlckNvbnRyb2whOiBzdHJpbmc7XG5cblx0QGV2ZW50KClcblx0c2VsZWN0ITogRnVuY3Rpb247XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0dGhpcy5nZXRUYWJzTW9kZWwoKTsgLy8gR2VuZXJhdGUgdGhlIG1vZGVsIHdoaWNoIGlzIG1hbmRhdG9yeSBmb3Igc29tZSBiaW5kaW5nc1xuXG5cdFx0Y29uc3Qgb0ZpbHRlckJhckFQSSA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKT8uZ2V0UGFyZW50KCk7XG5cdFx0dGhpcy5fZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc2hvd0NvdW50cykge1xuXHRcdFx0XHRvTWFjcm9BUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbERhdGFSZXF1ZXN0ZWRcIiwgdGhpcy5fcmVmcmVzaFRhYnNDb3VudC5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdG9NYWNyb0FQSS5zdXNwZW5kQmluZGluZz8uKCk7XG5cdFx0fSk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJBUEkpIHtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCB0aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpKTtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgdGhpcy5fb25GaWx0ZXJDaGFuZ2VkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4oIXRoaXMuZ2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIpKTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCkge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGVudGl0eSBzZXQgb2YgdGhlIGRpc3BsYXllZCB2aXN1YWxpemF0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW50aXR5IHNldFxuXHQgKi9cblx0Z2V0RGlzcGxheWVkRW50aXR5U2V0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uY29udGVudD8uZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLnNsaWNlKDEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1vZGVsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgSWNvblRhYkZpbHRlcnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwuTW9kZWwgfCB1bmRlZmluZWR9IFRoZSBtb2RlbFxuXHQgKi9cblx0Z2V0VGFic01vZGVsKCk6IE1vZGVsIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVGFic01vZGVsID0gXCJ0YWJzSW50ZXJuYWxcIjtcblx0XHRjb25zdCBvQ29udGVudCA9IHRoaXMuY29udGVudDtcblx0XHRpZiAoIW9Db250ZW50KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRsZXQgb01vZGVsID0gb0NvbnRlbnQuZ2V0TW9kZWwoc1RhYnNNb2RlbCk7XG5cdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdFx0b0NvbnRlbnQuc2V0TW9kZWwob01vZGVsLCBzVGFic01vZGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Nb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9sIG9mIHRoZSBkaXNwbGF5ZWQgdGFiLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7SW5uZXJDb250cm9sVHlwZSB8IHVuZGVmaW5lZH0gVGhlIGNvbnRyb2xcblx0ICovXG5cdGdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk6IElubmVyQ29udHJvbFR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9TZWxlY3RlZFRhYiA9IHRoaXMuY29udGVudC5nZXRJdGVtcygpLmZpbmQoKG9JdGVtKSA9PiAob0l0ZW0gYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkgPT09IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpKTtcblx0XHRyZXR1cm4gb1NlbGVjdGVkVGFiXG5cdFx0XHQ/IHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5maW5kKChvTWFjcm9BUEkpID0+IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKSA9PT0gb1NlbGVjdGVkVGFiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgYmluZGluZyBvZiBhbGwgaW5uZXIgY29udHJvbHMgd2hlbiB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBpcyBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLkV2ZW50fSBvRXZlbnQgRXZlbnQgZmlyZWQgYnkgdGhlIEljb25UYWJCYXJcblx0ICovXG5cdHN0YXRpYyBoYW5kbGVUYWJDaGFuZ2Uob0V2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBvSWNvblRhYkJhciA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBvTXVsdGlDb250cm9sID0gb0ljb25UYWJCYXIuZ2V0UGFyZW50KCk7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblxuXHRcdGlmIChzU2VsZWN0ZWRLZXkgJiYgc1ByZXZpb3VzU2VsZWN0ZWRLZXkgIT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IG9NdWx0aUNvbnRyb2wuX2dldEZpbHRlckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmICFvTXVsdGlDb250cm9sLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAoIW9NdWx0aUNvbnRyb2wuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0XHRcdC8vY3VzdG9tIHRhYlxuXHRcdFx0XHRcdG9NdWx0aUNvbnRyb2wuX3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpLCBcInRhYkNoYW5nZWRcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSS5hZGQoe1xuXHRcdFx0XHRjaGFuZ2VzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZVR5cGU6IFwic2VsZWN0SWNvblRhYkJhckZpbHRlclwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdFx0XHRwcmV2aW91c1NlbGVjdGVkS2V5OiBzUHJldmlvdXNTZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2VsZWN0b3JFbGVtZW50OiBvSWNvblRhYkJhclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0b011bHRpQ29udHJvbC5fZ2V0Vmlld0NvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCk/LnVwZGF0ZUFwcFN0YXRlKCk7XG5cblx0XHRvTXVsdGlDb250cm9sLmZpcmVFdmVudChcInNlbGVjdFwiLCB7XG5cdFx0XHRpY29uVGFiQmFyOiBvSWNvblRhYkJhcixcblx0XHRcdHNlbGVjdGVkS2V5OiBzU2VsZWN0ZWRLZXksXG5cdFx0XHRwcmV2aW91c0tleTogc1ByZXZpb3VzU2VsZWN0ZWRLZXlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiBhbGwgaW5uZXIgY29udHJvbHMuXG5cdCAqL1xuXHRpbnZhbGlkYXRlQ29udGVudCgpIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdG9NYWNyb0FQSS5pbnZhbGlkYXRlQ29udGVudD8uKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY291bnRzIHRvIG91dCBvZiBkYXRlIG9yIHVwIHRvIGRhdGVcblx0ICogSWYgdGhlIGNvdW50cyBhcmUgc2V0IHRvIFwib3V0IG9mIGRhdGVcIiBhbmQgdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgZG9lc24ndCBjb250YWluIGFuIGlubmVyIGNvbnRyb2wgYWxsIGlubmVyIGNvbnRyb2xzIGFyZSByZXF1ZXN0ZWQgdG8gZ2V0IHRoZSBuZXcgY291bnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJWYWx1ZSBGcmVlemUgb3Igbm90IHRoZSBjb250cm9sXG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl9yZWZyZXNoVGFic0NvdW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZyZWV6ZXMgdGhlIGNvbnRlbnQgOlxuXHQgKiAgLSBjb250ZW50IGlzIGZyb3plbjogdGhlIGJpbmRpbmcgb2YgdGhlIGlubmVyIGNvbnRyb2xzIGFyZSBzdXNwZW5kZWQuXG5cdCAqICAtIGNvbnRlbnQgaXMgdW5mcm96ZW46IHRoZSBiaW5kaW5nIG9mIGlubmVyIGNvbnRyb2wgcmVsYXRlZCB0byB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBpcyByZXN1bWVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJWYWx1ZSBGcmVlemUgb3Igbm90IHRoZSBjb250cm9sXG5cdCAqL1xuXHRzZXRGcmVlemVDb250ZW50KGJWYWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIsIGJWYWx1ZSk7XG5cdFx0dGhpcy5fc2V0SW5uZXJCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgbW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBvbiBlYWNoIEljb25UYWJGaWx0ZXIgKGNvbnRhaW5pbmcgaW5uZXIgY29udHJvbCkgYWNjb3JkaW5nIHRvIHRoZSBlbnRpdHlUeXBlIG9mIHRoZSBmaWx0ZXIgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9SZXNvdXJjZUJ1bmRsZVxuXHQgKi9cblx0X3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcyhvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdFx0Y29uc3QgdGFic01vZGVsID0gdGhpcy5nZXRUYWJzTW9kZWwoKTtcblx0XHRjb25zdCBvRmlsdGVyQ29udHJvbCA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKSBhcyBDb250cm9sO1xuXHRcdGlmICh0YWJzTW9kZWwgJiYgb0ZpbHRlckNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IHJlc3VsdHM6IGFueSA9IHt9O1xuXHRcdFx0dGhpcy5fZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvVGFiID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0XHRpZiAob1RhYikge1xuXHRcdFx0XHRcdGNvbnN0IHNUYWJJZCA9IG9UYWIuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0Y29uc3QgbUlnbm9yZWRGaWVsZHMgPSBvTWFjcm9BUEkucmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHM/LihvRmlsdGVyQ29udHJvbCkgfHwgW107XG5cdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0ge1xuXHRcdFx0XHRcdFx0bm90QXBwbGljYWJsZToge1xuXHRcdFx0XHRcdFx0XHRmaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy5fc2V0VGFiTWVzc2FnZVN0cmlwKHtcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlUeXBlUGF0aDogb0ZpbHRlckNvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlZEZpZWxkczogbUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VCdW5kbGU6IG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogb1RhYi5nZXRUZXh0KClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdCh0YWJzTW9kZWwgYXMgYW55KS5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxJbm5lckNvbnRyb2xzKGJPbmx5Rm9yVmlzaWJsZVRhYiA9IGZhbHNlKTogSW5uZXJDb250cm9sVHlwZVtdIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xzLnJlZHVjZSgoYUlubmVyQ29udHJvbHM6IElubmVyQ29udHJvbFR5cGVbXSwgc0lubmVyQ29udHJvbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gQ29yZS5ieUlkKHNJbm5lckNvbnRyb2wpIGFzIElubmVyQ29udHJvbFR5cGU7XG5cdFx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdGFJbm5lckNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhSW5uZXJDb250cm9scy5maWx0ZXIoXG5cdFx0XHRcdFx0KG9Jbm5lckNvbnRyb2wpID0+ICFiT25seUZvclZpc2libGVUYWIgfHwgdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvSW5uZXJDb250cm9sKT8uZ2V0VmlzaWJsZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LCBbXSkgfHwgW11cblx0XHQpO1xuXHR9XG5cblx0X2dldEZpbHRlckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gQ29yZS5ieUlkKHRoaXMuZmlsdGVyQ29udHJvbCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0NvbnRyb2w6IENvbnRyb2wpOiBJY29uVGFiRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzU3VwcG9ydGVkQ2xhc3MgPSBJY29uVGFiRmlsdGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdGxldCBvVGFiOiBhbnkgPSBvQ29udHJvbDtcblx0XHRpZiAob1RhYiAmJiAhb1RhYi5pc0Eoc1N1cHBvcnRlZENsYXNzKSAmJiBvVGFiLmdldFBhcmVudCkge1xuXHRcdFx0b1RhYiA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1RhYiAmJiBvVGFiLmlzQShzU3VwcG9ydGVkQ2xhc3MpID8gKG9UYWIgYXMgSWNvblRhYkZpbHRlcikgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Vmlld0NvbnRyb2xsZXIoKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpO1xuXHRcdHJldHVybiBvVmlldyAmJiBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdH1cblxuXHRfcmVmcmVzaEN1c3RvbVZpZXcob0ZpbHRlckNvbmRpdGlvbnM6IGFueSwgc1JlZnJlc2hDYXVzZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKT8ub25WaWV3TmVlZHNSZWZyZXNoPy4oe1xuXHRcdFx0ZmlsdGVyQ29uZGl0aW9uczogb0ZpbHRlckNvbmRpdGlvbnMsXG5cdFx0XHRjdXJyZW50VGFiSWQ6IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpLFxuXHRcdFx0cmVmcmVzaENhdXNlOiBzUmVmcmVzaENhdXNlXG5cdFx0fSk7XG5cdH1cblxuXHRfcmVmcmVzaFRhYnNDb3VudCgpOiB2b2lkIHtcblx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKHRydWUpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRpZiAob01hY3JvQVBJPy5nZXRDb3VudHMgJiYgKHRoaXMuY291bnRzT3V0RGF0ZWQgfHwgc1NlbGVjdGVkS2V5ID09PSBvSWNvblRhYkZpbHRlcj8uZ2V0S2V5KCkpKSB7XG5cdFx0XHRcdGlmIChvSWNvblRhYkZpbHRlciAmJiBvSWNvblRhYkZpbHRlci5zZXRDb3VudCkge1xuXHRcdFx0XHRcdG9JY29uVGFiRmlsdGVyLnNldENvdW50KFwiLi4uXCIpO1xuXHRcdFx0XHRcdG9NYWNyb0FQSVxuXHRcdFx0XHRcdFx0LmdldENvdW50cygpXG5cdFx0XHRcdFx0XHQudGhlbigoaUNvdW50OiBzdHJpbmcpID0+IG9JY29uVGFiRmlsdGVyLnNldENvdW50KGlDb3VudCB8fCBcIjBcIikpXG5cdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgQ291bnRzIGZvciBDb250cm9sXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQoZmFsc2UpO1xuXHR9XG5cblx0X3NldElubmVyQmluZGluZyhiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlbGVjdGVkS2V5ID0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IGJJc1NlbGVjdGVkS2V5ICYmICF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSA/IEJpbmRpbmdBY3Rpb24uUmVzdW1lIDogQmluZGluZ0FjdGlvbi5TdXNwZW5kO1xuXHRcdFx0XHRvTWFjcm9BUElbc0FjdGlvbl0/LihzQWN0aW9uID09PSBCaW5kaW5nQWN0aW9uLlJlc3VtZSA/IGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiBiSXNTZWxlY3RlZEtleSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VGFiTWVzc2FnZVN0cmlwKHByb3BlcnRpZXM6IE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMpIHtcblx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdGNvbnN0IGFJZ25vcmVkRmllbGRzID0gcHJvcGVydGllcy5pZ25vcmVkRmllbGRzO1xuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpIGFzIENvbnRyb2w7XG5cdFx0aWYgKG9GaWx0ZXJDb250cm9sICYmIEFycmF5LmlzQXJyYXkoYUlnbm9yZWRGaWVsZHMpICYmIGFJZ25vcmVkRmllbGRzLmxlbmd0aCA+IDAgJiYgcHJvcGVydGllcy50aXRsZSkge1xuXHRcdFx0Y29uc3QgYUlnbm9yZWRMYWJlbHMgPSBNZXNzYWdlU3RyaXAuZ2V0TGFiZWxzKFxuXHRcdFx0XHRhSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0cHJvcGVydGllcy5lbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0XHRcdHByb3BlcnRpZXMucmVzb3VyY2VCdW5kbGVcblx0XHRcdCk7XG5cdFx0XHRzVGV4dCA9IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQ29udHJvbCwgcHJvcGVydGllcy50aXRsZSwgRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQpO1xuXHRcdFx0cmV0dXJuIHNUZXh0O1xuXHRcdH1cblx0fVxuXG5cdF9vblNlYXJjaChvRXZlbnQ6IENvcmVFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHModGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKT8ub1Jlc291cmNlQnVuZGxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY3VzdG9tIHRhYlxuXHRcdFx0dGhpcy5fcmVmcmVzaEN1c3RvbVZpZXcob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNcIiksIFwic2VhcmNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkZpbHRlckNoYW5nZWQob0V2ZW50OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZU1vZGVDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFrQ0tBLGE7O2FBQUFBLGE7SUFBQUEsYTtJQUFBQSxhO0tBQUFBLGEsS0FBQUEsYTs7TUFNQ0MsbUIsV0FETEMsY0FBYyxDQUFDLDBEQUFELEMsVUFFYkMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFSLENBQUQsQyxVQUdSRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVI7SUFBbUJDLFlBQVksRUFBRTtFQUFqQyxDQUFELEMsVUFHUkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFSO0lBQW1CQyxZQUFZLEVBQUU7RUFBakMsQ0FBRCxDLFVBR1JDLFdBQVcsQ0FBQztJQUFFRixJQUFJLEVBQUUsa0JBQVI7SUFBNEJHLFFBQVEsRUFBRSxLQUF0QztJQUE2Q0MsU0FBUyxFQUFFO0VBQXhELENBQUQsQyxVQUdYQyxXQUFXLENBQUM7SUFBRUwsSUFBSSxFQUFFLHFCQUFSO0lBQStCRyxRQUFRLEVBQUU7RUFBekMsQ0FBRCxDLFVBR1hFLFdBQVcsQ0FBQztJ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
479
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsImRlZmluZVVJNUNsYXNzIiwicHJvcGVydHkiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImFzc29jaWF0aW9uIiwiZXZlbnQiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFRhYnNNb2RlbCIsIm9GaWx0ZXJDb250cm9sIiwiX2dldEZpbHRlckNvbnRyb2wiLCJzZXRDb3VudHNPdXREYXRlZCIsIm9GaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJfZ2V0QWxsSW5uZXJDb250cm9scyIsImZvckVhY2giLCJvTWFjcm9BUEkiLCJzaG93Q291bnRzIiwiYXR0YWNoRXZlbnQiLCJfcmVmcmVzaFRhYnNDb3VudCIsImJpbmQiLCJzdXNwZW5kQmluZGluZyIsIl9vblNlYXJjaCIsIl9vbkZpbHRlckNoYW5nZWQiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2wiLCJyZXN1bWVCaW5kaW5nIiwiZ2V0UHJvcGVydHkiLCJyZW5kZXIiLCJvUm0iLCJvQ29udHJvbCIsInJlbmRlckNvbnRyb2wiLCJjb250ZW50IiwiZ2V0RGlzcGxheWVkRW50aXR5U2V0IiwiZGF0YSIsInNsaWNlIiwic1RhYnNNb2RlbCIsIm9Db250ZW50IiwidW5kZWZpbmVkIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsIm9TZWxlY3RlZFRhYiIsImdldEl0ZW1zIiwiZmluZCIsIm9JdGVtIiwiZ2V0S2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJfZ2V0VGFiRnJvbUlubmVyQ29udHJvbCIsImhhbmRsZVRhYkNoYW5nZSIsIm9FdmVudCIsIm9JY29uVGFiQmFyIiwiZ2V0U291cmNlIiwib011bHRpQ29udHJvbCIsIm1QYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIl9zZXRJbm5lckJpbmRpbmciLCJzUHJldmlvdXNTZWxlY3RlZEtleSIsInByZXZpb3VzS2V5Iiwic1NlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJvRmlsdGVyQmFyIiwiX3JlZnJlc2hDdXN0b21WaWV3IiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsIkNvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSSIsImFkZCIsImNoYW5nZXMiLCJjaGFuZ2VTcGVjaWZpY0RhdGEiLCJjaGFuZ2VUeXBlIiwicHJldmlvdXNTZWxlY3RlZEtleSIsInNlbGVjdG9yRWxlbWVudCIsIl9nZXRWaWV3Q29udHJvbGxlciIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiZmlyZUV2ZW50IiwiaWNvblRhYkJhciIsImludmFsaWRhdGVDb250ZW50IiwiYlZhbHVlIiwic2V0UHJvcGVydHkiLCJzZXRGcmVlemVDb250ZW50IiwiX3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcyIsIm9SZXNvdXJjZUJ1bmRsZSIsInRhYnNNb2RlbCIsInJlc3VsdHMiLCJvVGFiIiwic1RhYklkIiwibUlnbm9yZWRGaWVsZHMiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm5vdEFwcGxpY2FibGUiLCJmaWVsZHMiLCJ0aXRsZSIsIl9zZXRUYWJNZXNzYWdlU3RyaXAiLCJlbnRpdHlUeXBlUGF0aCIsImlnbm9yZWRGaWVsZHMiLCJyZXNvdXJjZUJ1bmRsZSIsImdldFRleHQiLCJzZXREYXRhIiwiYk9ubHlGb3JWaXNpYmxlVGFiIiwiaW5uZXJDb250cm9scyIsInJlZHVjZSIsImFJbm5lckNvbnRyb2xzIiwic0lubmVyQ29udHJvbCIsIkNvcmUiLCJieUlkIiwicHVzaCIsImZpbHRlciIsIm9Jbm5lckNvbnRyb2wiLCJnZXRWaXNpYmxlIiwiZmlsdGVyQ29udHJvbCIsInNTdXBwb3J0ZWRDbGFzcyIsIkljb25UYWJGaWx0ZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJpc0EiLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwib0ljb25UYWJGaWx0ZXIiLCJnZXRDb3VudHMiLCJjb3VudHNPdXREYXRlZCIsInNldENvdW50IiwidGhlbiIsImlDb3VudCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQiLCJiSXNTZWxlY3RlZEtleSIsInNBY3Rpb24iLCJSZXN1bWUiLCJTdXNwZW5kIiwicHJvcGVydGllcyIsInNUZXh0IiwiYUlnbm9yZWRGaWVsZHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhSWdub3JlZExhYmVscyIsIk1lc3NhZ2VTdHJpcCIsImdldExhYmVscyIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJnZXRQYXJhbWV0ZXIiLCJDb250cm9sIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aXBsZU1vZGVDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgYXNzb2NpYXRpb24sIGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IEljb25UYWJGaWx0ZXIgZnJvbSBcInNhcC9tL0ljb25UYWJGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIENvcmVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCBDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkgZnJvbSBcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIElubmVyQ29udHJvbFR5cGUgPSBNYWNyb0FQSSAmXG5cdFBhcnRpYWw8e1xuXHRcdHJlc3VtZUJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdHN1c3BlbmRCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRnZXRDb3VudHM6IEZ1bmN0aW9uO1xuXHRcdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzOiBGdW5jdGlvbjtcblx0XHRpbnZhbGlkYXRlQ29udGVudDogRnVuY3Rpb247XG5cdH0+O1xuXG50eXBlIE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMgPSB7XG5cdGVudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGlnbm9yZWRGaWVsZHM6IGFueVtdO1xuXHRyZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGU7XG5cdHRpdGxlOiBzdHJpbmc7XG59O1xuXG5lbnVtIEJpbmRpbmdBY3Rpb24ge1xuXHRTdXNwZW5kID0gXCJzdXNwZW5kQmluZGluZ1wiLFxuXHRSZXN1bWUgPSBcInJlc3VtZUJpbmRpbmdcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuY29udHJvbHMuTXVsdGlwbGVNb2RlQ29udHJvbFwiKVxuY2xhc3MgTXVsdGlwbGVNb2RlQ29udHJvbCBleHRlbmRzIENvbnRyb2wge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRzaG93Q291bnRzITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRmcmVlemVDb250ZW50ITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRjb3VudHNPdXREYXRlZCE6IGJvb2xlYW47XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5JY29uVGFiQmFyXCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdGNvbnRlbnQhOiBJY29uVGFiQmFyO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRpbm5lckNvbnRyb2xzITogc3RyaW5nW107XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAuZmUuY29yZS5jb250cm9scy5GaWx0ZXJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGZpbHRlckNvbnRyb2whOiBzdHJpbmc7XG5cblx0QGV2ZW50KClcblx0c2VsZWN0ITogRnVuY3Rpb247XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0dGhpcy5nZXRUYWJzTW9kZWwoKTsgLy8gR2VuZXJhdGUgdGhlIG1vZGVsIHdoaWNoIGlzIG1hbmRhdG9yeSBmb3Igc29tZSBiaW5kaW5nc1xuXG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0aWYgKCFvRmlsdGVyQ29udHJvbCkge1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSdzIG5vIGZpbHRlcmJhciwgd2UgaGF2ZSB0byB1cGRhdGUgdGhlIGNvdW50cyBpbiB0aGUgdGFicyBpbW1lZGlhdGVseVxuXHRcdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZCh0cnVlKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0ZpbHRlckJhckFQSSA9IG9GaWx0ZXJDb250cm9sPy5nZXRQYXJlbnQoKTtcblx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdG9NYWNyb0FQSS5hdHRhY2hFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCB0aGlzLl9yZWZyZXNoVGFic0NvdW50LmJpbmQodGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0b01hY3JvQVBJLnN1c3BlbmRCaW5kaW5nPy4oKTtcblx0XHR9KTtcblx0XHRpZiAob0ZpbHRlckJhckFQSSkge1xuXHRcdFx0b0ZpbHRlckJhckFQSS5hdHRhY2hFdmVudChcImludGVybmFsU2VhcmNoXCIsIHRoaXMuX29uU2VhcmNoLmJpbmQodGhpcykpO1xuXHRcdFx0b0ZpbHRlckJhckFQSS5hdHRhY2hFdmVudChcImludGVybmFsRmlsdGVyQ2hhbmdlZFwiLCB0aGlzLl9vbkZpbHRlckNoYW5nZWQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHR0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LnJlc3VtZUJpbmRpbmc/LighdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpO1xuXHR9XG5cblx0c3RhdGljIHJlbmRlcihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBNdWx0aXBsZU1vZGVDb250cm9sKSB7XG5cdFx0b1JtLnJlbmRlckNvbnRyb2wob0NvbnRyb2wuY29udGVudCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZW50aXR5IHNldCBvZiB0aGUgZGlzcGxheWVkIHZpc3VhbGl6YXRpb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXREaXNwbGF5ZWRFbnRpdHlTZXQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5jb250ZW50Py5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbW9kZWwgY29udGFpbmluZyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBJY29uVGFiRmlsdGVycy5cblx0ICpcblx0ICogQHJldHVybnMge3NhcC51aS5tb2RlbC5Nb2RlbCB8IHVuZGVmaW5lZH0gVGhlIG1vZGVsXG5cdCAqL1xuXHRnZXRUYWJzTW9kZWwoKTogTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHNUYWJzTW9kZWwgPSBcInRhYnNJbnRlcm5hbFwiO1xuXHRcdGNvbnN0IG9Db250ZW50ID0gdGhpcy5jb250ZW50O1xuXHRcdGlmICghb0NvbnRlbnQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBvTW9kZWwgPSBvQ29udGVudC5nZXRNb2RlbChzVGFic01vZGVsKTtcblx0XHRpZiAoIW9Nb2RlbCkge1xuXHRcdFx0b01vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvQ29udGVudC5zZXRNb2RlbChvTW9kZWwsIHNUYWJzTW9kZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlubmVyIGNvbnRyb2wgb2YgdGhlIGRpc3BsYXllZCB0YWIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtJbm5lckNvbnRyb2xUeXBlIHwgdW5kZWZpbmVkfSBUaGUgY29udHJvbFxuXHQgKi9cblx0Z2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKTogSW5uZXJDb250cm9sVHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb1NlbGVjdGVkVGFiID0gdGhpcy5jb250ZW50Py5nZXRJdGVtcygpLmZpbmQoKG9JdGVtKSA9PiAob0l0ZW0gYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkgPT09IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpKTtcblx0XHRyZXR1cm4gb1NlbGVjdGVkVGFiXG5cdFx0XHQ/IHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5maW5kKChvTWFjcm9BUEkpID0+IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKSA9PT0gb1NlbGVjdGVkVGFiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgYmluZGluZyBvZiBhbGwgaW5uZXIgY29udHJvbHMgd2hlbiB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBpcyBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLkV2ZW50fSBvRXZlbnQgRXZlbnQgZmlyZWQgYnkgdGhlIEljb25UYWJCYXJcblx0ICovXG5cdHN0YXRpYyBoYW5kbGVUYWJDaGFuZ2Uob0V2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBvSWNvblRhYkJhciA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBvTXVsdGlDb250cm9sID0gb0ljb25UYWJCYXIuZ2V0UGFyZW50KCk7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblxuXHRcdGlmIChzU2VsZWN0ZWRLZXkgJiYgc1ByZXZpb3VzU2VsZWN0ZWRLZXkgIT09IHNTZWxlY3RlZEtleSkge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IG9NdWx0aUNvbnRyb2wuX2dldEZpbHRlckNvbnRyb2woKTtcblx0XHRcdGlmIChvRmlsdGVyQmFyICYmICFvTXVsdGlDb250cm9sLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAoIW9NdWx0aUNvbnRyb2wuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0XHRcdC8vY3VzdG9tIHRhYlxuXHRcdFx0XHRcdG9NdWx0aUNvbnRyb2wuX3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpLCBcInRhYkNoYW5nZWRcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSS5hZGQoe1xuXHRcdFx0XHRjaGFuZ2VzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZVR5cGU6IFwic2VsZWN0SWNvblRhYkJhckZpbHRlclwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdFx0XHRwcmV2aW91c1NlbGVjdGVkS2V5OiBzUHJldmlvdXNTZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2VsZWN0b3JFbGVtZW50OiBvSWNvblRhYkJhclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0b011bHRpQ29udHJvbC5fZ2V0Vmlld0NvbnRyb2xsZXIoKT8uZ2V0RXh0ZW5zaW9uQVBJKCk/LnVwZGF0ZUFwcFN0YXRlKCk7XG5cblx0XHRvTXVsdGlDb250cm9sLmZpcmVFdmVudChcInNlbGVjdFwiLCB7XG5cdFx0XHRpY29uVGFiQmFyOiBvSWNvblRhYkJhcixcblx0XHRcdHNlbGVjdGVkS2V5OiBzU2VsZWN0ZWRLZXksXG5cdFx0XHRwcmV2aW91c0tleTogc1ByZXZpb3VzU2VsZWN0ZWRLZXlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiBhbGwgaW5uZXIgY29udHJvbHMuXG5cdCAqL1xuXHRpbnZhbGlkYXRlQ29udGVudCgpIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdG9NYWNyb0FQSS5pbnZhbGlkYXRlQ29udGVudD8uKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY291bnRzIHRvIG91dCBvZiBkYXRlIG9yIHVwIHRvIGRhdGVcblx0ICogSWYgdGhlIGNvdW50cyBhcmUgc2V0IHRvIFwib3V0IG9mIGRhdGVcIiBhbmQgdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgZG9lc24ndCBjb250YWluIGFuIGlubmVyIGNvbnRyb2wgYWxsIGlubmVyIGNvbnRyb2xzIGFyZSByZXF1ZXN0ZWQgdG8gZ2V0IHRoZSBuZXcgY291bnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJWYWx1ZSBGcmVlemUgb3Igbm90IHRoZSBjb250cm9sXG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl9yZWZyZXNoVGFic0NvdW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZyZWV6ZXMgdGhlIGNvbnRlbnQgOlxuXHQgKiAgLSBjb250ZW50IGlzIGZyb3plbjogdGhlIGJpbmRpbmcgb2YgdGhlIGlubmVyIGNvbnRyb2xzIGFyZSBzdXNwZW5kZWQuXG5cdCAqICAtIGNvbnRlbnQgaXMgdW5mcm96ZW46IHRoZSBiaW5kaW5nIG9mIGlubmVyIGNvbnRyb2wgcmVsYXRlZCB0byB0aGUgc2VsZWN0ZWQgSWNvblRhYkZpbHRlciBpcyByZXN1bWVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJWYWx1ZSBGcmVlemUgb3Igbm90IHRoZSBjb250cm9sXG5cdCAqL1xuXHRzZXRGcmVlemVDb250ZW50KGJWYWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIsIGJWYWx1ZSk7XG5cdFx0dGhpcy5fc2V0SW5uZXJCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgbW9kZWwgd2l0aCB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBvbiBlYWNoIEljb25UYWJGaWx0ZXIgKGNvbnRhaW5pbmcgaW5uZXIgY29udHJvbCkgYWNjb3JkaW5nIHRvIHRoZSBlbnRpdHlUeXBlIG9mIHRoZSBmaWx0ZXIgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9SZXNvdXJjZUJ1bmRsZVxuXHQgKi9cblx0X3VwZGF0ZU11bHRpVGFiTm90QXBwbGljYWJsZUZpZWxkcyhvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdFx0Y29uc3QgdGFic01vZGVsID0gdGhpcy5nZXRUYWJzTW9kZWwoKTtcblx0XHRjb25zdCBvRmlsdGVyQ29udHJvbCA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKSBhcyBDb250cm9sO1xuXHRcdGlmICh0YWJzTW9kZWwgJiYgb0ZpbHRlckNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IHJlc3VsdHM6IGFueSA9IHt9O1xuXHRcdFx0dGhpcy5fZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvVGFiID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0XHRpZiAob1RhYikge1xuXHRcdFx0XHRcdGNvbnN0IHNUYWJJZCA9IG9UYWIuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0Y29uc3QgbUlnbm9yZWRGaWVsZHMgPSBvTWFjcm9BUEkucmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHM/LihvRmlsdGVyQ29udHJvbCkgfHwgW107XG5cdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0ge1xuXHRcdFx0XHRcdFx0bm90QXBwbGljYWJsZToge1xuXHRcdFx0XHRcdFx0XHRmaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy5fc2V0VGFiTWVzc2FnZVN0cmlwKHtcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlUeXBlUGF0aDogb0ZpbHRlckNvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlZEZpZWxkczogbUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VCdW5kbGU6IG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogb1RhYi5nZXRUZXh0KClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdCh0YWJzTW9kZWwgYXMgYW55KS5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxJbm5lckNvbnRyb2xzKGJPbmx5Rm9yVmlzaWJsZVRhYiA9IGZhbHNlKTogSW5uZXJDb250cm9sVHlwZVtdIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xzLnJlZHVjZSgoYUlubmVyQ29udHJvbHM6IElubmVyQ29udHJvbFR5cGVbXSwgc0lubmVyQ29udHJvbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gQ29yZS5ieUlkKHNJbm5lckNvbnRyb2wpIGFzIElubmVyQ29udHJvbFR5cGU7XG5cdFx0XHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdGFJbm5lckNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhSW5uZXJDb250cm9scy5maWx0ZXIoXG5cdFx0XHRcdFx0KG9Jbm5lckNvbnRyb2wpID0+ICFiT25seUZvclZpc2libGVUYWIgfHwgdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvSW5uZXJDb250cm9sKT8uZ2V0VmlzaWJsZSgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LCBbXSkgfHwgW11cblx0XHQpO1xuXHR9XG5cblx0X2dldEZpbHRlckNvbnRyb2woKTogRmlsdGVyQmFyIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gQ29yZS5ieUlkKHRoaXMuZmlsdGVyQ29udHJvbCkgYXMgRmlsdGVyQmFyIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0NvbnRyb2w6IENvbnRyb2wpOiBJY29uVGFiRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzU3VwcG9ydGVkQ2xhc3MgPSBJY29uVGFiRmlsdGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdGxldCBvVGFiOiBhbnkgPSBvQ29udHJvbDtcblx0XHRpZiAob1RhYiAmJiAhb1RhYi5pc0Eoc1N1cHBvcnRlZENsYXNzKSAmJiBvVGFiLmdldFBhcmVudCkge1xuXHRcdFx0b1RhYiA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1RhYiAmJiBvVGFiLmlzQShzU3VwcG9ydGVkQ2xhc3MpID8gKG9UYWIgYXMgSWNvblRhYkZpbHRlcikgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Vmlld0NvbnRyb2xsZXIoKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpO1xuXHRcdHJldHVybiBvVmlldyAmJiBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdH1cblxuXHRfcmVmcmVzaEN1c3RvbVZpZXcob0ZpbHRlckNvbmRpdGlvbnM6IGFueSwgc1JlZnJlc2hDYXVzZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKT8ub25WaWV3TmVlZHNSZWZyZXNoPy4oe1xuXHRcdFx0ZmlsdGVyQ29uZGl0aW9uczogb0ZpbHRlckNvbmRpdGlvbnMsXG5cdFx0XHRjdXJyZW50VGFiSWQ6IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpLFxuXHRcdFx0cmVmcmVzaENhdXNlOiBzUmVmcmVzaENhdXNlXG5cdFx0fSk7XG5cdH1cblxuXHRfcmVmcmVzaFRhYnNDb3VudCgpOiB2b2lkIHtcblx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSB0aGlzLmNvbnRlbnQ/LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0dGhpcy5fZ2V0QWxsSW5uZXJDb250cm9scyh0cnVlKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0aWYgKG9NYWNyb0FQST8uZ2V0Q291bnRzICYmICh0aGlzLmNvdW50c091dERhdGVkIHx8IHNTZWxlY3RlZEtleSA9PT0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpKSkge1xuXHRcdFx0XHRpZiAob0ljb25UYWJGaWx0ZXIgJiYgb0ljb25UYWJGaWx0ZXIuc2V0Q291bnQpIHtcblx0XHRcdFx0XHRvSWNvblRhYkZpbHRlci5zZXRDb3VudChcIi4uLlwiKTtcblx0XHRcdFx0XHRvTWFjcm9BUElcblx0XHRcdFx0XHRcdC5nZXRDb3VudHMoKVxuXHRcdFx0XHRcdFx0LnRoZW4oKGlDb3VudDogc3RyaW5nKSA9PiBvSWNvblRhYkZpbHRlci5zZXRDb3VudChpQ291bnQgfHwgXCIwXCIpKVxuXHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIENvdW50cyBmb3IgQ29udHJvbFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKGZhbHNlKTtcblx0fVxuXG5cdF9zZXRJbm5lckJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9JY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvTWFjcm9BUEkpO1xuXHRcdFx0XHRjb25zdCBiSXNTZWxlY3RlZEtleSA9IG9JY29uVGFiRmlsdGVyPy5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCk7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBiSXNTZWxlY3RlZEtleSAmJiAhdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikgPyBCaW5kaW5nQWN0aW9uLlJlc3VtZSA6IEJpbmRpbmdBY3Rpb24uU3VzcGVuZDtcblx0XHRcdFx0b01hY3JvQVBJW3NBY3Rpb25dPy4oc0FjdGlvbiA9PT0gQmluZGluZ0FjdGlvbi5SZXN1bWUgPyBiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgJiYgYklzU2VsZWN0ZWRLZXkgOiB1bmRlZmluZWQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X3NldFRhYk1lc3NhZ2VTdHJpcChwcm9wZXJ0aWVzOiBNZXNzYWdlU3RyaXBQcm9wZXJ0aWVzKSB7XG5cdFx0bGV0IHNUZXh0ID0gXCJcIjtcblx0XHRjb25zdCBhSWdub3JlZEZpZWxkcyA9IHByb3BlcnRpZXMuaWdub3JlZEZpZWxkcztcblx0XHRjb25zdCBvRmlsdGVyQ29udHJvbCA9IHRoaXMuX2dldEZpbHRlckNvbnRyb2woKSBhcyBDb250cm9sO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbCAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIHByb3BlcnRpZXMudGl0bGUpIHtcblx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdHByb3BlcnRpZXMuZW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdG9GaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRwcm9wZXJ0aWVzLnJlc291cmNlQnVuZGxlXG5cdFx0XHQpO1xuXHRcdFx0c1RleHQgPSBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckNvbnRyb2wsIHByb3BlcnRpZXMudGl0bGUsIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KTtcblx0XHRcdHJldHVybiBzVGV4dDtcblx0XHR9XG5cdH1cblxuXHRfb25TZWFyY2gob0V2ZW50OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuc2V0RnJlZXplQ29udGVudChmYWxzZSk7XG5cdFx0aWYgKHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKHRoaXMuX2dldFZpZXdDb250cm9sbGVyKCk/Lm9SZXNvdXJjZUJ1bmRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zXCIpLCBcInNlYXJjaFwiKTtcblx0XHR9XG5cdH1cblxuXHRfb25GaWx0ZXJDaGFuZ2VkKG9FdmVudDogQ29yZUV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25kaXRpb25zQmFzZWRcIikpIHtcblx0XHRcdHRoaXMuc2V0RnJlZXplQ29udGVudCh0cnVlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlwbGVNb2RlQ29udHJvbDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Ba0NLQSxhOzthQUFBQSxhO0lBQUFBLGE7SUFBQUEsYTtLQUFBQSxhLEtBQUFBLGE7O01BTUNDLG1CLFdBRExDLGNBQWMsQ0FBQywwREFBRCxDLFVBRWJDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUixDQUFELEMsVUFHUkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFSO0lBQW1CQyxZQUFZLEVBQUU7RUFBakMsQ0FBRCxDLFVBR1JGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUs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