@sapui5/sap.fe.core 1.136.9 → 1.136.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppStateHandler.js +4 -5
  6. package/src/sap/fe/core/AppStateHandler.ts +6 -5
  7. package/src/sap/fe/core/CommonUtils.js +3 -3
  8. package/src/sap/fe/core/CommonUtils.ts +2 -2
  9. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +4 -4
  10. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +5 -2
  11. package/src/sap/fe/core/controllerextensions/InternalRouting.js +4 -4
  12. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +3 -3
  13. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  14. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
  15. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +20 -10
  16. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +29 -13
  17. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +12 -2
  18. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +14 -7
  19. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +5 -2
  20. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +4 -1
  21. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  22. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  23. package/src/sap/fe/core/fpm/manifest.json +1 -1
  24. package/src/sap/fe/core/helpers/ModelHelper.js +5 -2
  25. package/src/sap/fe/core/helpers/ModelHelper.ts +7 -3
  26. package/src/sap/fe/core/library.js +1 -1
  27. package/src/sap/fe/core/messagebundle_ar.properties +1 -1
  28. package/src/sap/fe/core/messagebundle_bg.properties +3 -3
  29. package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -2
  30. package/src/sap/fe/core/rootView/RootViewBaseController.ts +2 -1
@@ -376,7 +376,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
376
376
  }
377
377
  const oMetaModel = this.getAppComponent().getMetaModel();
378
378
  const sEntityPath = oMetaModel.getMetaPath(sPath);
379
- const sTypeName = oMetaModel.getObject(`${sEntityPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/TypeName`);
379
+ let sTypeName = oMetaModel.getObject(`${sEntityPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/TypeName`);
380
+ sTypeName = CommonUtils.getTranslatedTextFromExpBindingString(sTypeName, this.getView()) || sTypeName;
380
381
  const sAppSpecificHash = this.getAppSpecificHash();
381
382
  const sIntent = sAppSpecificHash + sPath.slice(1);
382
383
  return this._fetchTitleValue(sPath).then(sTitle => {
@@ -644,4 +645,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/BaseCont
644
645
  }), _class2)) || _class);
645
646
  return RootViewBaseController;
646
647
  }, false);
647
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJWaWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiU2l6ZUhlbHBlciIsImluaXQiLCJfYUhlbHBlck1vZGVscyIsImdldFBsYWNlaG9sZGVyIiwib1BsYWNlaG9sZGVyIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkFmdGVyUm91dGVNYXRjaGVkIiwib25FeGl0IiwiZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvUm91dGVyIiwidW5kZWZpbmVkIiwiZXhpdCIsImZvckVhY2giLCJvTW9kZWwiLCJkZXN0cm95IiwiZ2V0Vmlld0Zyb21Db250YWluZXIiLCJjb250YWluZXIiLCJyZXN1bHQiLCJpc0EiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsImdldFJvb3RDb250cm9sIiwiZ2V0Vmlld3NGcm9tUGFnZXMiLCJwYWdlcyIsInZpZXdzIiwicGFnZSIsInZpZXciLCJwdXNoIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJnZXRPd25lckNvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0Um91dGVyIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiSlNPTk1vZGVsIiwicm91dGluZ0lzQ29tcGxldGUiLCJfb1JvdXRlTWF0Y2hlZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkiLCJvRXZlbnQiLCJhQ29udGFpbmVycyIsImdldFBhcmFtZXRlciIsImFGRUNvbnRhaW5lcnMiLCJvQ29udGFpbmVyIiwib1ZpZXciLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwib1JpZ2h0TW9zdEZFVmlldyIsImlzUGFnZVJlYWR5IiwiYXR0YWNoRXZlbnRPbmNlIiwicmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkiLCJoaXN0b3J5Iiwic3RhdGUiLCJmb2N1c0luZm8iLCJ0eXBlIiwidGFibGUiLCJFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJ0YWJsZUlkIiwicG9zIiwiZ2V0Um93QmluZGluZyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZpbmRJbmRleCIsImNvbnRleHQiLCJnZXRQYXRoIiwiY29udGV4dFBhdGhGb2N1cyIsImZvY3VzUm93IiwiY29udHJvbElkIiwiZm9jdXMiLCJyZXBsYWNlU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJldmVudCIsImdldFZpc2libGVWaWV3cyIsImluY2x1ZGVzIiwicm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5IiwiYXBwQ29tcG9uZW50IiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJVU2hlbGwiLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJmb3JjZUZvY3VzIiwiZ2V0Um91dGVyUHJveHkiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJnZXRQYXJlbnQiLCJvblBhZ2VSZWFkeSIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwib25Db250YWluZXJSZWFkeSIsImVycm9yIiwiTG9nIiwiX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvVGl0bGVIaWVyYXJjaHlDYWNoZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsInBhdGgiLCJfY29tcHV0ZVRpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJzSW50ZW50IiwiZGVzY3JpcHRpb24iLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbnRlbnQiLCJfZm9ybWF0VGl0bGUiLCJkaXNwbGF5TW9kZSIsInRpdGxlVmFsdWUiLCJ0aXRsZURlc2NyaXB0aW9uIiwiZm9ybWF0dGVkVGl0bGUiLCJfZmV0Y2hUaXRsZVZhbHVlIiwibW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiYmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24iLCJnZXRPYmplY3QiLCJ2YWx1ZUV4cHJlc3Npb24iLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwiJEZ1bmN0aW9uIiwiYW55T2JqZWN0IiwiQW55IiwiYW55Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsInRleHRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFsbCIsImdldEJpbmRpbmdzIiwibWFwIiwiYmluZGluZyIsInJlcXVlc3RWYWx1ZSIsImluZm9UaXRsZSIsImdldEFueSIsInRleHRFeHByZXNzaW9uIiwicHJvcGVydHlDb250ZXh0IiwicHJvbWlzZXMiLCJwYXJzZWR2YWx1ZUV4cHJlc3Npb24iLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsInByb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwidmFsdWVQYXRoIiwicGFydHMiLCJmblZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0dGVyIiwidmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiJCRncm91cElkIiwiaW5pdGlhbGl6ZSIsInByb21pc2VGb3JUaXRsZVZhbHVlIiwiZm5DaGFuZ2UiLCJ0YXJnZXRWYWx1ZSIsImdldFNvdXJjZSIsImdldFZhbHVlIiwiZGV0YWNoQ2hhbmdlIiwiYXR0YWNoQ2hhbmdlIiwicGFyc2VkVGV4dEV4cHJlc3Npb24iLCJ0ZXh0UGF0aCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJmblRleHRGb3JtYXR0ZXIiLCJwcm9taXNlRm9yVGl0bGVUZXh0IiwidGFyZ2V0VGV4dCIsInRpdGxlSW5mbyIsImdldEFwcFNwZWNpZmljSGFzaCIsImhhc2hDaGFuZ2VyIiwiSGFzaENoYW5nZXIiLCJnZXRJbnN0YW5jZSIsImhyZWZGb3JBcHBTcGVjaWZpY0hhc2giLCJVUkkiLCJkZWNvZGUiLCJfZ2V0SGFzaCIsImdldEhhc2giLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInNQYXRoIiwib01ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwic1R5cGVOYW1lIiwic0FwcFNwZWNpZmljSGFzaCIsInRoZW4iLCJzVGl0bGUiLCJvVGl0bGVJbmZvIiwiX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyIsImFIaWVyYXJjaHkiLCJhSGllcmFyY2h5U2hlbGwiLCJsZXZlbCIsIm9IaWVyYXJjaHkiLCJvU2hlbGxIaWVyYXJjaHkiLCJrZXkiLCJTdHJpbmciLCJfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoIiwic0hhc2giLCJvQXBwQ29tcG9uZW50Iiwic1RhcmdldFR5cGUiLCJhUm91dGVzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsInJvdXRpbmciLCJyb3V0ZXMiLCJyb3V0ZSIsIm9Sb3V0ZSIsImdldFJvdXRlIiwibmFtZSIsIm1hdGNoIiwic1RhcmdldCIsImdldFJvdXRlVGFyZ2V0TmFtZXMiLCJ0YXJnZXQiLCJnZXRUYXJnZXQiLCJfb09wdGlvbnMiLCJfZ2V0QnJvd3NlclRpdGxlIiwidGl0bGVJbmZvSGllcmFyY2h5U2hlbGwiLCJwYWdlVGl0bGVJbmZvcm1hdGlvbiIsImJyZWFkY3J1bWJUZXh0cyIsImZpcnN0UGFydCIsInNlY29uZFBhcnQiLCJ0aXRsZUluZm9IaWVyYXJjaHkiLCJwb3AiLCJqb2luIiwiaGVhZGVyVGV4dCIsIl9zZXRUaXRsZXMiLCJhcHBUaXRsZSIsImJyb3dzZXJUaXRsZSIsIl9zZXRTaGVsbE1lbnVUaXRsZSIsImdldEJpbmRpbmdDb250ZXh0IiwiY3VycmVudFBhZ2UiLCJ0aXRsZUluZm9IaWVyYXJjaHlTZXEiLCJhcHBTcGVjaWZpY0hhc2giLCJtYW5pZmVzdEFwcFNldHRpbmdzIiwiYXBwU3ViVGl0bGUiLCJzdWJUaXRsZSIsImFwcEljb24iLCJuZXdQYXRoIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwiZ2V0Um9vdExldmVsVGl0bGVJbmZvcm1hdGlvbiIsInBhdGhQYXJ0cyIsInNoaWZ0IiwicGF0aFBhcnQiLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJwYXJhbWV0ZXJQYXRoIiwiaXNQYXJhbWV0ZXJpemVkIiwiRXJyb3IiLCJyZXZlcnNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEhpZXJhcmNoeSIsImVycm9yTWVzc2FnZSIsImNhbGN1bGF0ZUxheW91dCIsImlOZXh0RkNMTGV2ZWwiLCJzUHJvcG9zZWRMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIm9uQ29udGV4dEJvdW5kVG9WaWV3Iiwib0NvbnRleHQiLCJzRGVlcGVzdFBhdGgiLCJnZXRQcm9wZXJ0eSIsInNWaWV3Q29udGV4dFBhdGgiLCJpbmRleE9mIiwiZGlzcGxheUVycm9yUGFnZSIsIl9lcnJvck1lc3NhZ2UiLCJfcGFyYW1ldGVycyIsIl9GQ0xMZXZlbCIsInVwZGF0ZVVJU3RhdGVGb3JWaWV3IiwiRkNMTGV2ZWwiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImlzRmNsRW5hYmxlZCIsInNBcHBUaXRsZSIsImFkZGl0aW9uYWxJbmZvcm1hdGlvbiIsInNldFRpdGxlIiwiZ2V0QXBwQ29udGVudENvbnRhaW5lciIsImFwcENvbnRlbnRJZCIsImNvbmZpZyIsImJ5SWQiLCJCYXNlQ29udHJvbGxlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm9vdFZpZXdCYXNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB7IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NYW5pZmVzdEhlbHBlclwiO1xuaW1wb3J0IFNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2l6ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBBbm5vdGF0aW9uSGVscGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQW5ub3RhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgVVJJIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9VUklcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVBZGRpdGlvbmFsSW5mbyB9IGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcblxuZXhwb3J0IHR5cGUgVGl0bGVJbmZvcm1hdGlvbiA9IHtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YnRpdGxlPzogc3RyaW5nO1xuXHRpY29uPzogc3RyaW5nO1xuXHRpbnRlbnQ/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUucm9vdFZpZXcuUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiKVxuY2xhc3MgUm9vdFZpZXdCYXNlQ29udHJvbGxlciBleHRlbmRzIEJhc2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRvUGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0cHJpdmF0ZSBfYUhlbHBlck1vZGVscyE6IEpTT05Nb2RlbFtdO1xuXG5cdHByaXZhdGUgb1JvdXRlcj86IFJvdXRlcjtcblxuXHRwcml2YXRlIF9vUm91dGVNYXRjaGVkUHJvbWlzZT86IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBvVGl0bGVIaWVyYXJjaHlDYWNoZT86IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+O1xuXG5cdHByaXZhdGUgYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRTaXplSGVscGVyLmluaXQoKTtcblxuXHRcdHRoaXMuX2FIZWxwZXJNb2RlbHMgPSBbXTtcblx0fVxuXG5cdGdldFBsYWNlaG9sZGVyKCk6IFBsYWNlaG9sZGVyIHtcblx0XHRyZXR1cm4gdGhpcy5vUGxhY2Vob2xkZXI7XG5cdH1cblxuXHRhdHRhY2hSb3V0ZU1hdGNoZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMub1BsYWNlaG9sZGVyLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQoe30sIHRoaXMub25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaEFmdGVyUm91dGVNYXRjaGVkKHRoaXMub25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyID0gdW5kZWZpbmVkO1xuXG5cdFx0U2l6ZUhlbHBlci5leGl0KCk7XG5cblx0XHQvLyBEZXN0cm95IGFsbCBKU09OIG1vZGVscyBjcmVhdGVkIGR5bmFtaWNhbGx5IGZvciB0aGUgdmlld3Ncblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG9Nb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0XHRvTW9kZWwuZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0Vmlld0Zyb21Db250YWluZXIoY29udGFpbmVyOiBDb250cm9sKTogVmlldyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udGFpbmVyLmlzQTxDb21wb25lbnRDb250YWluZXI+KFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpXG5cdFx0XHQ/IGNvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpLmdldFJvb3RDb250cm9sKClcblx0XHRcdDogY29udGFpbmVyO1xuXG5cdFx0cmV0dXJuIHJlc3VsdD8uaXNBPFZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQW5hbHl6ZSB0aGUgcGFnZXMgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2aWV3cy5cblx0ICogQHBhcmFtIHBhZ2VzIFRoZSBwYWdlcyB0byBiZSBhbmFseXplZC5cblx0ICogQHJldHVybnMgVGhlIHZpZXdzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Vmlld3NGcm9tUGFnZXMocGFnZXM6IENvbnRyb2xbXSk6IFZpZXdbXSB7XG5cdFx0Y29uc3Qgdmlld3M6IFZpZXdbXSA9IFtdO1xuXG5cdFx0cGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIocGFnZSk7XG5cblx0XHRcdGlmICh2aWV3ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmlld3MucHVzaCh2aWV3KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgdGhlIHJlc291cmNlIGJ1bmRsZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2VNb2RlbCBvZiB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRnZXRSZXNvdXJjZUJ1bmRsZSgpOiBSZXNvdXJjZUJ1bmRsZSB8IFByb21pc2U8UmVzb3VyY2VCdW5kbGU+IHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcImkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTtcblx0fVxuXG5cdGdldFJvdXRlcigpOiBSb3V0ZXIge1xuXHRcdGlmICghdGhpcy5vUm91dGVyKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm9Sb3V0ZXI7XG5cdH1cblxuXHRfY3JlYXRlSGVscGVyTW9kZWwoKTogSlNPTk1vZGVsIHtcblx0XHQvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIG9uIHRoZSBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSwgYXMgdGhleSBkb24ndCBnZXQgZGVzdHJveWVkXG5cdFx0Ly8gYXV0b21hdGljYWxseSB3aGVuIHRoZSB2aWV3IGlzIGRlc3Ryb3llZC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgZHVyaW5nIG9uRXhpdFxuXHRcdGNvbnN0IG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLnB1c2gob01vZGVsKTtcblxuXHRcdHJldHVybiBvTW9kZWw7XG5cdH1cblxuXHRhc3luYyByb3V0aW5nSXNDb21wbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCAodGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgfHwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHdhaXRpbmcgZm9yIHRoZSBSaWdodCBtb3N0IHZpZXcgdG8gYmUgcmVhZHkuXG5cdCAqIEBwYXJhbSBvRXZlbnQgUmVmZXJlbmNlIGFuIEV2ZW50IHBhcmFtZXRlciBjb21pbmcgZnJvbSByb3V0ZU1hdGNoZWQgZXZlbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgcmlnaHQgbW9zdCB2aWV3IGlzIHJlYWR5XG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5KG9FdmVudDogUm91dGUkTWF0Y2hlZEV2ZW50KTogUHJvbWlzZTxGRVZpZXc+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogRkVWaWV3KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBhQ29udGFpbmVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKSA/PyBbXSxcblx0XHRcdFx0Ly8gVGhlcmUgY2FuIGFsc28gYmUgcmV1c2UgY29tcG9uZW50cyBpbiB0aGUgdmlldywgcmVtb3ZlIHRoZW0gYmVmb3JlIHByb2Nlc3NpbmcuXG5cdFx0XHRcdGFGRUNvbnRhaW5lcnM6IEZFVmlld1tdID0gW107XG5cdFx0XHRhQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGFpbmVyOiBWaWV3IHwgQ29tcG9uZW50Q29udGFpbmVyIHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGxldCBvVmlldyA9IG9Db250YWluZXIgYXMgRkVWaWV3IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob0NvbnRhaW5lciAmJiAob0NvbnRhaW5lciBhcyBDb21wb25lbnRDb250YWluZXIpLmdldENvbXBvbmVudEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbXBvbmVudEluc3RhbmNlID0gKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0XHRcdG9WaWV3ID0gb0NvbXBvbmVudEluc3RhbmNlLmdldFJvb3RDb250cm9sKCkgYXMgRkVWaWV3O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvVmlldyAmJiBvVmlldy5nZXRDb250cm9sbGVyKCkgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeSkge1xuXHRcdFx0XHRcdGFGRUNvbnRhaW5lcnMucHVzaChvVmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3Qgb1JpZ2h0TW9zdEZFVmlldyA9IGFGRUNvbnRhaW5lcnNbYUZFQ29udGFpbmVycy5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChvUmlnaHRNb3N0RkVWaWV3ICYmIG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5pc1BhZ2VSZWFkeSgpKSB7XG5cdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHR9IGVsc2UgaWYgKG9SaWdodE1vc3RGRVZpZXcpIHtcblx0XHRcdFx0b1JpZ2h0TW9zdEZFVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShvUmlnaHRNb3N0RkVWaWV3KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJlc3RvcmUgdGhlIGZvY3VzSW5mb3JtYXRpb24gZnJvbSB0aGUgaGlzdG9yeSBPYmplY3QuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkoKTogdm9pZCB7XG5cdFx0c3dpdGNoIChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby50eXBlKSB7XG5cdFx0XHRjYXNlIFwiUm93XCI6XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby50YWJsZUlkKSBhcyBUYWJsZTtcblx0XHRcdFx0Y29uc3QgcG9zID0gdGFibGVcblx0XHRcdFx0XHQuZ2V0Um93QmluZGluZygpXG5cdFx0XHRcdFx0LmdldEN1cnJlbnRDb250ZXh0cygpXG5cdFx0XHRcdFx0LmZpbmRJbmRleCgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQYXRoKCkgPT09IGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLmNvbnRleHRQYXRoRm9jdXMpO1xuXHRcdFx0XHRpZiAocG9zICE9PSAtMSkge1xuXHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KHBvcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRFbGVtZW50LmdldEVsZW1lbnRCeUlkKGhpc3Rvcnkuc3RhdGUuZm9jdXNJbmZvLmNvbnRyb2xJZCk/LmZvY3VzKCk7XG5cdFx0fVxuXHRcdC8vb25jZSBhcHBsaWVkLCB0aGUgZm9jdXMgaW5mbyBpcyByZW1vdmVkIHRvIHByZXZlbnQgZm9jdXNpbmcgb24gaXQgZWFjaCB0aW1lIHRoZSB1c2VyIGRvIGEgYmFjayBuYXZpZ2F0aW9uIHRvIHRoaXMgcGFnZVxuXHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oaGlzdG9yeS5zdGF0ZSwgeyBmb2N1c0luZm86IG51bGwgfSksIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZG9uZS5cblx0ICogLSB1cGRhdGUgdGhlIHNoZWxsIHRpdGxlLlxuXHQgKiAtIHVwZGF0ZSB0YWJsZSBzY3JvbGwuXG5cdCAqIC0gY2FsbCBvblBhZ2VSZWFkeSBvbiB0aGUgcmlnaHRNb3N0Vmlldy5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgdGhlIGN1cnJlbnQgbmF2aWdhdGlvblxuXHQgKi9cblx0YXN5bmMgb25BZnRlclJvdXRlTWF0Y2hlZChldmVudDogUm91dGUkTWF0Y2hlZEV2ZW50KTogUHJvbWlzZTxGRVZpZXcgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmlldyA9IGF3YWl0IHRoaXMud2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShldmVudCk7XG5cblx0XHRcdGlmICh0aGlzLmdldFZpc2libGVWaWV3cygpLmluY2x1ZGVzKHZpZXcpKSB7XG5cdFx0XHRcdC8vIFRoZSBhdXRvRm9jdXMgaXMgaW5pdGlhbGx5IGRpc2FibGVkIG9uIHRoZSBuYXZDb250YWluZXIgb3IgdGhlIEZDTCwgc28gdGhhdCB0aGUgZm9jdXMgc3RheXMgb24gdGhlIFNoZWxsIG1lbnVcblx0XHRcdFx0Ly8gZXZlbiBpZiB0aGUgYXBwIHRha2VzIGEgbG9uZyB0aW1lIHRvIGxhdW5jaFxuXHRcdFx0XHQvLyBUaGUgZmlyc3QgdGltZSB0aGUgdmlldyBpcyBkaXNwbGF5ZWQsIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBhdXRvZm9jdXMgc28gdGhhdCBpdCdzIG1hbmFnZWQgcHJvcGVybHkgZHVyaW5nIG5hdmlnYXRpb25cblx0XHRcdFx0Y29uc3Qgcm9vdENvbnRyb2wgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyb290Q29udHJvbCAmJlxuXHRcdFx0XHRcdChyb290Q29udHJvbCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCkuZ2V0QXV0b0ZvY3VzICYmXG5cdFx0XHRcdFx0IShyb290Q29udHJvbCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCkuZ2V0QXV0b0ZvY3VzKClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cm9vdENvbnRyb2wuc2V0UHJvcGVydHkoXCJhdXRvRm9jdXNcIiwgdHJ1ZSwgdHJ1ZSk7IC8vIERvIG5vdCBtYXJrIHRoZSBjb250YWluZXIgYXMgaW52YWxpZCwgb3RoZXJ3aXNlIGl0J3MgcmUtcmVuZGVyZWRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRcdHRoaXMuX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk7XG5cdFx0XHRcdGlmIChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5VU2hlbGwpIHtcblx0XHRcdFx0XHR0aGlzLmNvbXB1dGVUaXRsZUhpZXJhcmNoeSh2aWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JjZUZvY3VzID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuaXNGb2N1c0ZvcmNlZCgpO1xuXHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5zZXRGb2N1c0ZvcmNlZChmYWxzZSk7IC8vIHJlc2V0XG5cdFx0XHRcdGlmICh2aWV3LmdldENvbnRyb2xsZXIoKSAmJiAodmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHkpIHtcblx0XHRcdFx0XHQodmlldy5nZXRQYXJlbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkub25QYWdlUmVhZHkoeyBmb3JjZUZvY3VzOiBmb3JjZUZvY3VzIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mbykge1xuXHRcdFx0XHRcdHRoaXMucmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghZm9yY2VGb2N1cykge1xuXHRcdFx0XHRcdC8vIFRyeSB0byByZXN0b3JlIHRoZSBmb2N1cyBvbiB3aGVyZSBpdCB3YXMgd2hlbiB3ZSBsYXN0IHZpc2l0ZWQgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLnJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMub25Db250YWluZXJSZWFkeSkge1xuXHRcdFx0XHRcdHRoaXMub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmlldztcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJzIHdoaWxlIGNvbXB1dGluZyB0aGUgdGl0bGUgaGllcmFyY2h5IGFuZCBjYWxsaW5nIGZvY3VzIG1ldGhvZFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFRpdGxlSGllcmFyY2h5IGNhY2hlICggb3IgaW5pdGlhbGl6ZXMgaXQgaWYgdW5kZWZpbmVkKS5cblx0ICogQHJldHVybnMgIFRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZVxuXHQgKi9cblx0X2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKTogUmVjb3JkPHN0cmluZywgVGl0bGVJbmZvcm1hdGlvbj4ge1xuXHRcdGlmICghdGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZSkge1xuXHRcdFx0dGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZSA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNsZWFyIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSBmb3IgdGhlIGdpdmVuIGNvbnRleHQgcGF0aC5cblx0ICogQHBhcmFtICBwYXRoIFRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIGNsZWFyIHRoZSBjYWNoZSBmb3Jcblx0ICovXG5cdGNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRkZWxldGUgdGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW3BhdGhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHRpdGxlSW5mbyBvYmplY3QuXG5cdCAqIEBwYXJhbSB0aXRsZSBUaGUgYXBwbGljYXRpb24ncyB0aXRsZVxuXHQgKiBAcGFyYW0gc3VidGl0bGUgVGhlIGFwcGxpY2F0aW9uJ3Mgc3ViVGl0bGVcblx0ICogQHBhcmFtIHNJbnRlbnQgVGhlIGludGVudCBwYXRoIHRvIGJlIHJlZGlyZWN0ZWQgdG9cblx0ICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSBhcHBsaWNhdGlvbidzIGRlc2NyaXB0aW9uXG5cdCAqIEBwYXJhbSBpY29uIFRoZSBhcHBsaWNhdGlvbidzIGljb25cblx0ICogQHJldHVybnMgVGhlIHRpdGxlIGluZm9ybWF0aW9uXG5cdCAqL1xuXHRfY29tcHV0ZVRpdGxlSW5mbyh0aXRsZTogc3RyaW5nLCBzdWJ0aXRsZTogc3RyaW5nLCBzSW50ZW50OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBpY29uID0gXCJcIik6IFRpdGxlSW5mb3JtYXRpb24ge1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNJbnRlbnQuc3BsaXQoXCIvXCIpO1xuXHRcdGlmICghYVBhcnRzW2FQYXJ0cy5sZW5ndGggLSAxXS5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdHNJbnRlbnQgKz0gXCI/cmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiJnJlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdHN1YnRpdGxlOiBzdWJ0aXRsZSxcblx0XHRcdGludGVudDogc0ludGVudCxcblx0XHRcdGljb246IGljb24sXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cblx0XHR9O1xuXHR9XG5cblx0X2Zvcm1hdFRpdGxlKGRpc3BsYXlNb2RlOiBzdHJpbmcsIHRpdGxlVmFsdWU6IHN0cmluZywgdGl0bGVEZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgZm9ybWF0dGVkVGl0bGUgPSBcIlwiO1xuXHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9ICgke3RpdGxlRGVzY3JpcHRpb259KWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufSAoJHt0aXRsZVZhbHVlfSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlRGVzY3JpcHRpb259YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIEhlYWRlckluZm8gdGl0bGUgZm9yIGEgZ2l2ZW4gcGF0aC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGVudGl0eVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHRpdGxlLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gSGVhZGVySW5mbyB0aXRsZSBhbm5vdGF0aW9uIGlzIGF2YWlsYWJsZVxuXHQgKi9cblx0YXN5bmMgX2ZldGNoVGl0bGVWYWx1ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKSxcblx0XHRcdGJpbmRpbmdWaWV3Q29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHBhdGgpLFxuXHRcdFx0aGVhZGVySW5mb1RpdGxlVmFsdWVBbm5vdGF0aW9uID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHttZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVGl0bGUvVmFsdWVgKSxcblx0XHRcdHZhbHVlRXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiwgeyBjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH0pO1xuXHRcdGlmICghdmFsdWVFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHRcdH1cblx0XHRpZiAoaGVhZGVySW5mb1RpdGxlVmFsdWVBbm5vdGF0aW9uLiRGdW5jdGlvbiA9PT0gXCJvZGF0YS5jb25jYXRcIikge1xuXHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueTogdmFsdWVFeHByZXNzaW9uIH0pO1xuXHRcdFx0YW55T2JqZWN0LnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nVmlld0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgdGV4dEJpbmRpbmcgPSBhbnlPYmplY3QuZ2V0QmluZGluZyhcImFueVwiKTtcblx0XHRcdGlmICh0ZXh0QmluZGluZz8uaXNBPENvbXBvc2l0ZUJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIikpIHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwodGV4dEJpbmRpbmcuZ2V0QmluZGluZ3MoKS5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcucmVxdWVzdFZhbHVlPy4oKSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5mb1RpdGxlID0gYW55T2JqZWN0LmdldEFueSgpO1xuXHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoaW5mb1RpdGxlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdGNvbnN0IHRleHRFeHByZXNzaW9uID0gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQoXG5cdFx0XHRcdG1ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0YCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR7IGNvbnRleHQ6IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgfVxuXHRcdFx0KSxcblx0XHRcdHByb3BlcnR5Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGApLFxuXHRcdFx0cHJvbWlzZXM6IFByb21pc2U8c3RyaW5nPltdID0gW10sXG5cdFx0XHRwYXJzZWR2YWx1ZUV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIodmFsdWVFeHByZXNzaW9uKSxcblx0XHRcdHByb21pc2VGb3JEaXNwbGF5TW9kZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShwcm9wZXJ0eUNvbnRleHQpO1xuXHRcdFx0XHRyZXNvbHZlKGRpc3BsYXlNb2RlKTtcblx0XHRcdH0pO1xuXHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvckRpc3BsYXlNb2RlKTtcblx0XHRjb25zdCB2YWx1ZVBhdGggPSBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGFydHMgPyBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGFydHNbMF0ucGF0aCA6IHBhcnNlZHZhbHVlRXhwcmVzc2lvbi5wYXRoLFxuXHRcdFx0Zm5WYWx1ZUZvcm1hdHRlciA9IHBhcnNlZHZhbHVlRXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHR2YWx1ZUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkodmFsdWVQYXRoLCBiaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdHZhbHVlQmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0Y29uc3QgcHJvbWlzZUZvclRpdGxlVmFsdWUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50OiBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZuVmFsdWVGb3JtYXR0ZXIgPyBmblZhbHVlRm9ybWF0dGVyKGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHR2YWx1ZUJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0cmVzb2x2ZSh0YXJnZXRWYWx1ZSk7XG5cdFx0XHR9O1xuXHRcdFx0dmFsdWVCaW5kaW5nLmF0dGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0fSk7XG5cdFx0cHJvbWlzZXMucHVzaChwcm9taXNlRm9yVGl0bGVWYWx1ZSk7XG5cblx0XHRpZiAodGV4dEV4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IHBhcnNlZFRleHRFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHRleHRFeHByZXNzaW9uKTtcblx0XHRcdGxldCB0ZXh0UGF0aCA9IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhcnRzID8gcGFyc2VkVGV4dEV4cHJlc3Npb24ucGFydHNbMF0ucGF0aCA6IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhdGg7XG5cdFx0XHR0ZXh0UGF0aCA9IHZhbHVlUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPiAtMSA/IGAke3ZhbHVlUGF0aC5zbGljZSgwLCB2YWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKX0vJHt0ZXh0UGF0aH1gIDogdGV4dFBhdGg7XG5cblx0XHRcdGNvbnN0IGZuVGV4dEZvcm1hdHRlciA9IHBhcnNlZFRleHRFeHByZXNzaW9uLmZvcm1hdHRlcixcblx0XHRcdFx0dGV4dEJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkodGV4dFBhdGgsIGJpbmRpbmdWaWV3Q29udGV4dCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSk7XG5cdFx0XHR0ZXh0QmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0XHRjb25zdCBwcm9taXNlRm9yVGl0bGVUZXh0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChkZXNjcmlwdGlvbjogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKGV2ZW50OiBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdGNvbnN0IHRhcmdldFRleHQgPSBmblRleHRGb3JtYXR0ZXIgPyBmblRleHRGb3JtYXR0ZXIoZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSkgOiBldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdFx0dGV4dEJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0XHRyZXNvbHZlKHRhcmdldFRleHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRleHRCaW5kaW5nLmF0dGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHR9KTtcblx0XHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvclRpdGxlVGV4dCk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0aXRsZUluZm86IHN0cmluZ1tdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRcdGlmICh0eXBlb2YgdGl0bGVJbmZvICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gdGhpcy5fZm9ybWF0VGl0bGUodGl0bGVJbmZvWzBdLCB0aXRsZUluZm9bMV0sIHRpdGxlSW5mb1syXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGZldGNoaW5nIHRoZSB0aXRsZSBmcm9tIHRoZSBoZWFkZXIgaW5mbyA6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHJldHVybmluZyB0aGUgZGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoLlxuXHQgKiBAcmV0dXJucyBEZWNvZGVkIGFwcGxpY2F0aW9uLXNwZWNpZmljIGhhc2hcblx0ICovXG5cdGdldEFwcFNwZWNpZmljSGFzaCgpOiBzdHJpbmcge1xuXHRcdC8vIEhhc2hDaGFuZ2VkIGlzU2hlbGxOYXZpZ2F0aW9uSGFzaENoYW5nZXJcblx0XHRjb25zdCBoYXNoQ2hhbmdlciA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0cmV0dXJuIGhhc2hDaGFuZ2VyLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBVUkkuZGVjb2RlKGhhc2hDaGFuZ2VyLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIikpIDogXCIjL1wiO1xuXHR9XG5cblx0X2dldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRpdGxlSW5mb3JtYXRpb24gZnJvbSBhIHBhdGguXG5cdCAqIEl0IHVwZGF0ZXMgdGhlIGNhY2hlIHRvIHN0b3JlIHRpdGxlIGluZm9ybWF0aW9uIGlmIG5lY2Vzc2FyeVxuXHQgKiBAcGFyYW0geyp9IHNQYXRoIHBhdGggb2YgdGhlIGNvbnRleHQgdG8gcmV0cmlldmUgdGl0bGUgaW5mb3JtYXRpb24gZnJvbSBNZXRhTW9kZWxcblx0ICogQHJldHVybnMge1Byb21pc2V9ICBvVGl0bGVpbmZvcm1hdGlvbiByZXR1cm5lZCBhcyBwcm9taXNlXG5cdCAqL1xuXG5cdGFzeW5jIGdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRjb25zdCBvVGl0bGVIaWVyYXJjaHlDYWNoZSA9IHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKTtcblxuXHRcdGlmIChvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0pIHtcblx0XHRcdC8vIFRoZSB0aXRsZSBpbmZvIGlzIGFscmVhZHkgc3RvcmVkIGluIHRoZSBjYWNoZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0Y29uc3Qgc1R5cGVOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1R5cGVOYW1lYCk7XG5cdFx0Y29uc3Qgc0FwcFNwZWNpZmljSGFzaCA9IHRoaXMuZ2V0QXBwU3BlY2lmaWNIYXNoKCk7XG5cdFx0Y29uc3Qgc0ludGVudCA9IHNBcHBTcGVjaWZpY0hhc2ggKyBzUGF0aC5zbGljZSgxKTtcblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hUaXRsZVZhbHVlKHNQYXRoKS50aGVuKChzVGl0bGU6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3Qgb1RpdGxlSW5mbyA9IHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oc1R5cGVOYW1lLCBzVGl0bGUsIHNJbnRlbnQpO1xuXHRcdFx0b1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdID0gb1RpdGxlSW5mbztcblx0XHRcdHJldHVybiBvVGl0bGVJbmZvO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZSB0aGF0IHRoZSB1c2hlbGwgc2VydmljZSByZWNlaXZlcyBhbGwgZWxlbWVudHNcblx0ICogKHRpdGxlLCBzdWJ0aXRsZSwgaW50ZW50LCBpY29uKSBhcyBzdHJpbmdzLlxuXHQgKlxuXHQgKiBBbm5vdGF0aW9uIEhlYWRlckluZm8gYWxsb3dzIGZvciBiaW5kaW5nIG9mIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuXHQgKiAod2hpY2ggYXJlIHVzZWQgaGVyZSBhcyB0aXRsZSBhbmQgc3VidGl0bGUpIHRvIGFueSBlbGVtZW50IGluIHRoZSBlbnRpdHlcblx0ICogKHN1Y2ggdHlwZXMgYXMgQm9vbGVhbiwgdGltZXN0YW1wLCBkb3VibGUsIGFuZCBvdGhlcnMgYXJlIHBvc3NpYmxlKVxuXHQgKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGhpZXJhcmNoeSBhbmQgY29udmVydHMgbm9uLXN0cmluZyB0eXBlcyB0byBzdHJpbmcuXG5cdCAqIEBwYXJhbSBhSGllcmFyY2h5IFNoZWxsIHRpdGxlIGhpZXJhcmNoeVxuXHQgKiBAcmV0dXJucyBDb3B5IG9mIHNoZWxsIHRpdGxlIGhpZXJhcmNoeSBjb250YWluaW5nIGFsbCBlbGVtZW50cyBhcyBzdHJpbmdzXG5cdCAqL1xuXHRfZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKGFIaWVyYXJjaHk6IFRpdGxlSW5mb3JtYXRpb25bXSk6IG9iamVjdFtdIHtcblx0XHRjb25zdCBhSGllcmFyY2h5U2hlbGwgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGxldmVsIGluIGFIaWVyYXJjaHkpIHtcblx0XHRcdGNvbnN0IG9IaWVyYXJjaHkgPSBhSGllcmFyY2h5W2xldmVsXTtcblx0XHRcdGNvbnN0IG9TaGVsbEhpZXJhcmNoeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0hpZXJhcmNoeSkge1xuXHRcdFx0XHRvU2hlbGxIaWVyYXJjaHlba2V5XSA9IChcblx0XHRcdFx0XHR0eXBlb2Ygb0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl0gIT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdD8gU3RyaW5nKG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dKVxuXHRcdFx0XHRcdFx0OiBvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXVxuXHRcdFx0XHQpIGFzIHN0cmluZztcblx0XHRcdH1cblx0XHRcdGFIaWVyYXJjaHlTaGVsbC5wdXNoKG9TaGVsbEhpZXJhcmNoeSk7XG5cdFx0fVxuXHRcdHJldHVybiBhSGllcmFyY2h5U2hlbGw7XG5cdH1cblxuXHRfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoKHNIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGxldCBzVGFyZ2V0VHlwZSA9IFwiXCI7XG5cblx0XHRjb25zdCBhUm91dGVzID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nPy5yb3V0ZXMgPz8gW107XG5cdFx0Zm9yIChjb25zdCByb3V0ZSBvZiBhUm91dGVzKSB7XG5cdFx0XHRjb25zdCBvUm91dGUgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFJvdXRlKHJvdXRlLm5hbWUpO1xuXHRcdFx0aWYgKG9Sb3V0ZT8ubWF0Y2goc0hhc2gpKSB7XG5cdFx0XHRcdGNvbnN0IHNUYXJnZXQgPSBnZXRSb3V0ZVRhcmdldE5hbWVzKHJvdXRlLnRhcmdldClbMF07XG5cdFx0XHRcdHNUYXJnZXRUeXBlID0gKG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KHNUYXJnZXQpIGFzIHVua25vd24gYXMgeyBfb09wdGlvbnM6IHsgbmFtZTogc3RyaW5nIH0gfSkuX29PcHRpb25zLm5hbWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzVGFyZ2V0VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgZm9ybWF0IG9mIHRoZSBicm93c2VyIHRpdGxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXcuXG5cdCAqIEBwYXJhbSB0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCBUaXRsZUluZm9ybWF0aW9uIGFycmF5XG5cdCAqIEBwYXJhbSBwYWdlVGl0bGVJbmZvcm1hdGlvbiBUaXRsZUluZm9ybWF0aW9uIG9iamVjdFxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBhIGhlYWRlciB0ZXh0IGFuZCBhbiBhZGRpdGlvbmFsIGNvbnRleHRcblx0ICovXG5cdF9nZXRCcm93c2VyVGl0bGUodGl0bGVJbmZvSGllcmFyY2h5U2hlbGw6IFRpdGxlSW5mb3JtYXRpb25bXSwgcGFnZVRpdGxlSW5mb3JtYXRpb246IFRpdGxlSW5mb3JtYXRpb24pOiB7IGhlYWRlclRleHQ6IHN0cmluZyB9IHtcblx0XHRjb25zdCBicmVhZGNydW1iVGV4dHMgPSBbXTtcblx0XHRsZXQgZmlyc3RQYXJ0ID0gXCJcIixcblx0XHRcdHNlY29uZFBhcnQgPSBcIlwiO1xuXG5cdFx0Y29uc3QgdGl0bGVJbmZvSGllcmFyY2h5ID0gWy4uLnRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsXTtcblx0XHRpZiAodGl0bGVJbmZvSGllcmFyY2h5Lmxlbmd0aCA+IDEpIHtcblx0XHRcdHRpdGxlSW5mb0hpZXJhcmNoeS5wb3AoKTtcblx0XHRcdHRpdGxlSW5mb0hpZXJhcmNoeS5mb3JFYWNoKCh0aXRsZUluZm8pID0+IHtcblx0XHRcdFx0aWYgKHRpdGxlSW5mby5zdWJ0aXRsZSkge1xuXHRcdFx0XHRcdGJyZWFkY3J1bWJUZXh0cy5wdXNoKHRpdGxlSW5mby5zdWJ0aXRsZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAocGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUpIHtcblx0XHRcdGJyZWFkY3J1bWJUZXh0cy5wdXNoKHBhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlKTtcblx0XHR9XG5cdFx0aWYgKHBhZ2VUaXRsZUluZm9ybWF0aW9uLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRmaXJzdFBhcnQgPSBgJHtwYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZX0oJHtwYWdlVGl0bGVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbn0pYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zmlyc3RQYXJ0ID0gYCR7cGFnZVRpdGxlSW5mb3JtYXRpb24uc3VidGl0bGV9YDtcblx0XHR9XG5cdFx0c2Vjb25kUGFydCA9IGJyZWFkY3J1bWJUZXh0cy5qb2luKFwiIC0gXCIpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGhlYWRlclRleHQ6IHNlY29uZFBhcnQgPyBgJHtmaXJzdFBhcnR9IC0gJHtzZWNvbmRQYXJ0fWAgOiBmaXJzdFBhcnRcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZSB0aGUgYnJvd3NlciB0aXRsZSBhbmQgbWVudSB0aXRsZSwgdGhlbiB0cmlnZ2VyIHRoZSBzZXQgQVBJIG9mIHRoZSBzaGVsbC5cblx0ICogQHBhcmFtIGFwcFRpdGxlIEFwcGxpY2F0aW9uIHRpdGxlXG5cdCAqIEBwYXJhbSB0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCBBbiBvYmplY3QgZm9yIHRpdGxlIGluZm9ybWF0aW9uXG5cdCAqIEBwYXJhbSBwYWdlVGl0bGVJbmZvcm1hdGlvbiBUaXRsZUluZm9ybWF0aW9uIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgX3NldFRpdGxlcyhhcHBUaXRsZTogc3RyaW5nLCB0aXRsZUluZm9IaWVyYXJjaHlTaGVsbDogVGl0bGVJbmZvcm1hdGlvbltdLCBwYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEdldCB0aGUgdGl0bGUgb2YgdGhlIGJyb3dzZXJcblx0XHRsZXQgYnJvd3NlclRpdGxlO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHR0aXRsZSA9IHBhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlID8/IFwiXCI7XG5cdFx0aWYgKHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsLmxlbmd0aCkge1xuXHRcdFx0YnJvd3NlclRpdGxlID0gdGhpcy5fZ2V0QnJvd3NlclRpdGxlKHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsLCBwYWdlVGl0bGVJbmZvcm1hdGlvbik7XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuX3NldFNoZWxsTWVudVRpdGxlKGFwcENvbXBvbmVudCwgdGl0bGUsIGFwcFRpdGxlLCBicm93c2VyVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgc2hlbGwgdGl0bGUgYWZ0ZXIgZWFjaCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG1lbnUgaXMgZmlsbGVkIHByb3Blcmx5XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBjb21wdXRlVGl0bGVIaWVyYXJjaHkodmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0Y3VycmVudFBhZ2UgPSB2aWV3LmdldFBhcmVudCgpLFxuXHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5U2VxOiBUaXRsZUluZm9ybWF0aW9uW10gPSBbXSxcblx0XHRcdGFwcFNwZWNpZmljSGFzaCA9IHRoaXMuZ2V0QXBwU3BlY2lmaWNIYXNoKCksXG5cdFx0XHRtYW5pZmVzdEFwcFNldHRpbmdzID0gYXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpLFxuXHRcdFx0YXBwVGl0bGUgPSBtYW5pZmVzdEFwcFNldHRpbmdzLnRpdGxlIHx8IFwiXCIsXG5cdFx0XHRhcHBTdWJUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3Muc3ViVGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcEljb24gPSBtYW5pZmVzdEFwcFNldHRpbmdzLmljb24gfHwgXCJcIjtcblx0XHRsZXQgcGFnZVRpdGxlSW5mb3JtYXRpb246IFRpdGxlSW5mb3JtYXRpb24sIG5ld1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChjdXJyZW50UGFnZSAmJiAoY3VycmVudFBhZ2UgYXMgVGVtcGxhdGVDb21wb25lbnQpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbikge1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcGxpY2F0aW9uIGlzIGEgTFIsIHVzZSB0aGUgdGl0bGUgYW5kIHN1YnRpdGxlIGZyb20gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdGlmICh0aGlzLl9nZXRUYXJnZXRUeXBlRnJvbUhhc2goXCJcIikgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0XHR0aXRsZUluZm9IaWVyYXJjaHlTZXEucHVzaChhd2FpdCB0aGlzLmdldFJvb3RMZXZlbFRpdGxlSW5mb3JtYXRpb24oYXBwU3BlY2lmaWNIYXNoLCBhcHBUaXRsZSwgYXBwU3ViVGl0bGUsIGFwcEljb24pKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRoZW4gbWFuYWdlIG90aGVyIHBhZ2VzXG5cdFx0XHRcdG5ld1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3QgcGF0aFBhcnRzID0gbmV3UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGxldCBwYXRoID0gXCJcIjtcblxuXHRcdFx0XHRwYXRoUGFydHMuc2hpZnQoKTsgLy8gUmVtb3ZlIHRoZSBmaXJzdCBzZWdtZW50IChlbXB0eSBzdHJpbmcpIGFzIGl0IGhhcyBiZWVuIG1hbmFnZWQgYWJvdmVcblx0XHRcdFx0cGF0aFBhcnRzLnBvcCgpOyAvLyBSZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBwYWdlIGFuZCBzaG91bGRuJ3QgYXBwZWFyIGluIHRoZSBtZW51XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXRoUGFydCBvZiBwYXRoUGFydHMpIHtcblx0XHRcdFx0XHRwYXRoICs9IGAvJHtwYXRoUGFydH1gO1xuXHRcdFx0XHRcdC8vaWYgdGhlIGFzc29jaWF0ZWQgdGFyZ2V0IGlzIG5vdCBkZWNsYXJlZCBpbiB0aGUgcm91dGVzLCB3ZSBza2lwIGl0XG5cdFx0XHRcdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGVJbmZvQnlIYXNoKHBhdGgpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKSxcblx0XHRcdFx0XHRcdGlzUGFyYW1ldGVyaXplZCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdFx0aWYgKCFpc1BhcmFtZXRlcml6ZWQpIHtcblx0XHRcdFx0XHRcdHRpdGxlSW5mb0hpZXJhcmNoeVNlcS5wdXNoKGF3YWl0IHRoaXMuZ2V0VGl0bGVJbmZvRnJvbVBhdGgocGF0aCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDdXJyZW50IHBhZ2Vcblx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uID0gYXdhaXQgKGN1cnJlbnRQYWdlIGFzIFRlbXBsYXRlQ29tcG9uZW50KS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTtcblx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhcblx0XHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUgPz8gXCJcIixcblx0XHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24uc3VidGl0bGUgPz8gXCJcIixcblx0XHRcdFx0YXBwU3BlY2lmaWNIYXNoICsgdGhpcy5fZ2V0SGFzaCgpLFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvblxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNvbnRleHQgJiYgbmV3UGF0aCkge1xuXHRcdFx0XHR0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKClbbmV3UGF0aF0gPSBwYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVthcHBTcGVjaWZpY0hhc2hdID0gcGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRpdGxlIGluZm9ybWF0aW9uIG1pc3NpbmcgaW4gSGVhZGVySW5mb1wiKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdC8vV2Ugbm93IHVzZSBkaXJlY3RseSB0aGUgaGllcmFyY2h5IGFscmVhZHkgc2VxdWVudGlhbGx5IHJlc29sdmVkXG5cdFx0XHRjb25zdCB0aXRsZUluZm9IaWVyYXJjaHkgPSB0aXRsZUluZm9IaWVyYXJjaHlTZXE7XG5cdFx0XHQvLyB3b3JrYXJvdW5kIGZvciBzaGVsbCB3aGljaCBpcyBleHBlY3RpbmcgYWxsIGVsZW1lbnRzIGJlaW5nIG9mIHR5cGUgc3RyaW5nXG5cdFx0XHRjb25zdCB0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCA9IHRoaXMuX2Vuc3VyZUhpZXJhcmNoeUVsZW1lbnRzQXJlU3RyaW5ncyh0aXRsZUluZm9IaWVyYXJjaHkpO1xuXHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5U2hlbGwucmV2ZXJzZSgpO1xuXHRcdFx0YXdhaXQgYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRIaWVyYXJjaHkodGl0bGVJbmZvSGllcmFyY2h5U2hlbGwpO1xuXG5cdFx0XHRhd2FpdCB0aGlzLl9zZXRUaXRsZXMoYXBwVGl0bGUsIHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIGFzIHVua25vd24gYXMgVGl0bGVJbmZvcm1hdGlvbltdLCBwYWdlVGl0bGVJbmZvcm1hdGlvbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBjYXRjaCAoZXJyb3JNZXNzYWdlOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3JNZXNzYWdlIGFzIHN0cmluZyk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdGl0bGUgaW5mb3JtYXRpb24gZm9yIHRoZSByb290IGxldmVsLlxuXHQgKiBAcGFyYW0gYXBwU3BlY2lmaWNIYXNoIFRoZSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoXG5cdCAqIEBwYXJhbSBhcHBUaXRsZSBUaGUgYXBwbGljYXRpb24gdGl0bGVcblx0ICogQHBhcmFtIGFwcFN1YlRpdGxlIFRoZSBhcHBsaWNhdGlvbiBzdWJ0aXRsZVxuXHQgKiBAcGFyYW0gYXBwSWNvbiBUaGUgYXBwbGljYXRpb24gaWNvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgY29udGFpbmluZyB0aGUgdGl0bGUgaW5mb3JtYXRpb25cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Um9vdExldmVsVGl0bGVJbmZvcm1hdGlvbihcblx0XHRhcHBTcGVjaWZpY0hhc2g6IHN0cmluZyxcblx0XHRhcHBUaXRsZTogc3RyaW5nLFxuXHRcdGFwcFN1YlRpdGxlOiBzdHJpbmcsXG5cdFx0YXBwSWNvbjogc3RyaW5nXG5cdCk6IFByb21pc2U8VGl0bGVJbmZvcm1hdGlvbj4ge1xuXHRcdGNvbnN0IG9UaXRsZUhpZXJhcmNoeUNhY2hlID0gdGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpO1xuXG5cdFx0aWYgKG9UaXRsZUhpZXJhcmNoeUNhY2hlW2FwcFNwZWNpZmljSGFzaF0pIHtcblx0XHRcdC8vIFRoZSB0aXRsZSBpbmZvIGlzIGFscmVhZHkgc3RvcmVkIGluIHRoZSBjYWNoZVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShvVGl0bGVIaWVyYXJjaHlDYWNoZVthcHBTcGVjaWZpY0hhc2hdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb21wdXRlVGl0bGVJbmZvKGFwcFRpdGxlLCBhcHBTdWJUaXRsZSwgYXBwU3BlY2lmaWNIYXNoLCB1bmRlZmluZWQsIGFwcEljb24pKTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZWVwQ3VycmVudExheW91dCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBhZnRlciBhIHZpZXcgaGFzIGJlZW4gYm91bmQgdG8gYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBib3VuZCB0byBhIHZpZXdcblx0ICovXG5cdG9uQ29udGV4dEJvdW5kVG9WaWV3KG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkIHwgbnVsbCk6IHZvaWQge1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0Y29uc3Qgc0RlZXBlc3RQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5nZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiKSxcblx0XHRcdFx0c1ZpZXdDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKCFzRGVlcGVzdFBhdGggfHwgc0RlZXBlc3RQYXRoLmluZGV4T2Yoc1ZpZXdDb250ZXh0UGF0aCkgIT09IDApIHtcblx0XHRcdFx0Ly8gVGhlcmUgd2FzIG5vIHByZXZpb3VzIHZhbHVlIGZvciB0aGUgZGVlcGVzdCByZWFjaGVkIHBhdGgsIG9yIHRoZSBwYXRoXG5cdFx0XHRcdC8vIGZvciB0aGUgdmlldyBpc24ndCBhIHN1YnBhdGggb2YgdGhlIHByZXZpb3VzIGRlZXBlc3QgcGF0aCAtLT4gdXBkYXRlXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvZGVlcGVzdFBhdGhcIiwgc1ZpZXdDb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBkaXNwbGF5RXJyb3JQYWdlKF9lcnJvck1lc3NhZ2U6IHN0cmluZywgX3BhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCwgX0ZDTExldmVsID0gMCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRkZW5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHR1cGRhdGVVSVN0YXRlRm9yVmlldyhvVmlldzogRkVWaWV3LCBGQ0xMZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRnZXRJbnN0YW5jZWRWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gYWxsIHZpc2libGUgdmlld3MuXG5cdCAqIEByZXR1cm5zIFRoZSB2aXNpYmxlIHZpZXdzXG5cdCAqL1xuXHRnZXRWaXNpYmxlVmlld3MoKTogVmlld1tdIHtcblx0XHRyZXR1cm4gW107XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRfc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKTogdm9pZCB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRpc0ZjbEVuYWJsZWQoKTogdGhpcyBpcyBGY2xDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFzeW5jIF9zZXRTaGVsbE1lbnVUaXRsZShcblx0XHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0c1RpdGxlOiBzdHJpbmcsXG5cdFx0c0FwcFRpdGxlOiBzdHJpbmcsXG5cdFx0YWRkaXRpb25hbEluZm9ybWF0aW9uPzogVGl0bGVBZGRpdGlvbmFsSW5mb1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW4gYnkgRmNsQ29udHJvbGxlclxuXHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSwgYWRkaXRpb25hbEluZm9ybWF0aW9uKTtcblx0fVxuXG5cdGdldEFwcENvbnRlbnRDb250YWluZXIoKTogTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGFwcENvbnRlbnRJZCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZz8uY29uZmlnPy5jb250cm9sSWQgPz8gXCJhcHBDb250ZW50XCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoYXBwQ29udGVudElkKSBhcyBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxufVxuaW50ZXJmYWNlIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRvbkNvbnRhaW5lclJlYWR5PygpOiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O01BNENNQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQzQkMsY0FBYyxDQUFDLDZDQUE2QyxDQUFDLEVBQUFDLEtBQUEsR0FFNURDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLEVBQUFDLEtBQUEsR0FHM0JGLGNBQWMsQ0FBQ0csU0FBUyxDQUFDLEVBQUFOLElBQUEsQ0FBQU8sTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxlQUFBO0lBQUEsU0FBQVYsdUJBQUE7TUFBQSxJQUFBVyxLQUFBO01BQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtRQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJ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
648
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJWaWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25Jbml0IiwiU2l6ZUhlbHBlciIsImluaXQiLCJfYUhlbHBlck1vZGVscyIsImdldFBsYWNlaG9sZGVyIiwib1BsYWNlaG9sZGVyIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldEFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkFmdGVyUm91dGVNYXRjaGVkIiwib25FeGl0IiwiZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvUm91dGVyIiwidW5kZWZpbmVkIiwiZXhpdCIsImZvckVhY2giLCJvTW9kZWwiLCJkZXN0cm95IiwiZ2V0Vmlld0Zyb21Db250YWluZXIiLCJjb250YWluZXIiLCJyZXN1bHQiLCJpc0EiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsImdldFJvb3RDb250cm9sIiwiZ2V0Vmlld3NGcm9tUGFnZXMiLCJwYWdlcyIsInZpZXdzIiwicGFnZSIsInZpZXciLCJwdXNoIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJnZXRPd25lckNvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0Um91dGVyIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiSlNPTk1vZGVsIiwicm91dGluZ0lzQ29tcGxldGUiLCJfb1JvdXRlTWF0Y2hlZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkiLCJvRXZlbnQiLCJhQ29udGFpbmVycyIsImdldFBhcmFtZXRlciIsImFGRUNvbnRhaW5lcnMiLCJvQ29udGFpbmVyIiwib1ZpZXciLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJnZXRDb250cm9sbGVyIiwicGFnZVJlYWR5Iiwib1JpZ2h0TW9zdEZFVmlldyIsImlzUGFnZVJlYWR5IiwiYXR0YWNoRXZlbnRPbmNlIiwicmVzdG9yZUZvY3VzRnJvbUhpc3RvcnkiLCJoaXN0b3J5Iiwic3RhdGUiLCJmb2N1c0luZm8iLCJ0eXBlIiwidGFibGUiLCJFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJ0YWJsZUlkIiwicG9zIiwiZ2V0Um93QmluZGluZyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZpbmRJbmRleCIsImNvbnRleHQiLCJnZXRQYXRoIiwiY29udGV4dFBhdGhGb2N1cyIsImZvY3VzUm93IiwiY29udHJvbElkIiwiZm9jdXMiLCJyZXBsYWNlU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJldmVudCIsImdldFZpc2libGVWaWV3cyIsImluY2x1ZGVzIiwicm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5IiwiYXBwQ29tcG9uZW50IiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJVU2hlbGwiLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJmb3JjZUZvY3VzIiwiZ2V0Um91dGVyUHJveHkiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJnZXRQYXJlbnQiLCJvblBhZ2VSZWFkeSIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwib25Db250YWluZXJSZWFkeSIsImVycm9yIiwiTG9nIiwiX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvVGl0bGVIaWVyYXJjaHlDYWNoZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsInBhdGgiLCJfY29tcHV0ZVRpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJzSW50ZW50IiwiZGVzY3JpcHRpb24iLCJpY29uIiwiYVBhcnRzIiwic3BsaXQiLCJpbnRlbnQiLCJfZm9ybWF0VGl0bGUiLCJkaXNwbGF5TW9kZSIsInRpdGxlVmFsdWUiLCJ0aXRsZURlc2NyaXB0aW9uIiwiZm9ybWF0dGVkVGl0bGUiLCJfZmV0Y2hUaXRsZVZhbHVlIiwibW9kZWwiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiYmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24iLCJnZXRPYmplY3QiLCJ2YWx1ZUV4cHJlc3Npb24iLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwiJEZ1bmN0aW9uIiwiYW55T2JqZWN0IiwiQW55IiwiYW55Iiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsInRleHRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFsbCIsImdldEJpbmRpbmdzIiwibWFwIiwiYmluZGluZyIsInJlcXVlc3RWYWx1ZSIsImluZm9UaXRsZSIsImdldEFueSIsInRleHRFeHByZXNzaW9uIiwicHJvcGVydHlDb250ZXh0IiwicHJvbWlzZXMiLCJwYXJzZWR2YWx1ZUV4cHJlc3Npb24iLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsInByb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwidmFsdWVQYXRoIiwicGFydHMiLCJmblZhbHVlRm9ybWF0dGVyIiwiZm9ybWF0dGVyIiwidmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiJCRncm91cElkIiwiaW5pdGlhbGl6ZSIsInByb21pc2VGb3JUaXRsZVZhbHVlIiwiZm5DaGFuZ2UiLCJ0YXJnZXRWYWx1ZSIsImdldFNvdXJjZSIsImdldFZhbHVlIiwiZGV0YWNoQ2hhbmdlIiwiYXR0YWNoQ2hhbmdlIiwicGFyc2VkVGV4dEV4cHJlc3Npb24iLCJ0ZXh0UGF0aCIsImxhc3RJbmRleE9mIiwic2xpY2UiLCJmblRleHRGb3JtYXR0ZXIiLCJwcm9taXNlRm9yVGl0bGVUZXh0IiwidGFyZ2V0VGV4dCIsInRpdGxlSW5mbyIsImdldEFwcFNwZWNpZmljSGFzaCIsImhhc2hDaGFuZ2VyIiwiSGFzaENoYW5nZXIiLCJnZXRJbnN0YW5jZSIsImhyZWZGb3JBcHBTcGVjaWZpY0hhc2giLCJVUkkiLCJkZWNvZGUiLCJfZ2V0SGFzaCIsImdldEhhc2giLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInNQYXRoIiwib01ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwic1R5cGVOYW1lIiwiZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyIsInNBcHBTcGVjaWZpY0hhc2giLCJ0aGVuIiwic1RpdGxlIiwib1RpdGxlSW5mbyIsIl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MiLCJhSGllcmFyY2h5IiwiYUhpZXJhcmNoeVNoZWxsIiwibGV2ZWwiLCJvSGllcmFyY2h5Iiwib1NoZWxsSGllcmFyY2h5Iiwia2V5IiwiU3RyaW5nIiwiX2dldFRhcmdldFR5cGVGcm9tSGFzaCIsInNIYXNoIiwib0FwcENvbXBvbmVudCIsInNUYXJnZXRUeXBlIiwiYVJvdXRlcyIsImdldE1hbmlmZXN0RW50cnkiLCJyb3V0aW5nIiwicm91dGVzIiwicm91dGUiLCJvUm91dGUiLCJnZXRSb3V0ZSIsIm5hbWUiLCJtYXRjaCIsInNUYXJnZXQiLCJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0IiwiZ2V0VGFyZ2V0IiwiX29PcHRpb25zIiwiX2dldEJyb3dzZXJUaXRsZSIsInRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIiwicGFnZVRpdGxlSW5mb3JtYXRpb24iLCJicmVhZGNydW1iVGV4dHMiLCJmaXJzdFBhcnQiLCJzZWNvbmRQYXJ0IiwidGl0bGVJbmZvSGllcmFyY2h5IiwicG9wIiwiam9pbiIsImhlYWRlclRleHQiLCJfc2V0VGl0bGVzIiwiYXBwVGl0bGUiLCJicm93c2VyVGl0bGUiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJnZXRCaW5kaW5nQ29udGV4dCIsImN1cnJlbnRQYWdlIiwidGl0bGVJbmZvSGllcmFyY2h5U2VxIiwiYXBwU3BlY2lmaWNIYXNoIiwibWFuaWZlc3RBcHBTZXR0aW5ncyIsImFwcFN1YlRpdGxlIiwic3ViVGl0bGUiLCJhcHBJY29uIiwibmV3UGF0aCIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsImdldFJvb3RMZXZlbFRpdGxlSW5mb3JtYXRpb24iLCJwYXRoUGFydHMiLCJzaGlmdCIsInBhdGhQYXJ0IiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwicGFyYW1ldGVyUGF0aCIsImlzUGFyYW1ldGVyaXplZCIsIkVycm9yIiwicmV2ZXJzZSIsImdldFNoZWxsU2VydmljZXMiLCJzZXRIaWVyYXJjaHkiLCJlcnJvck1lc3NhZ2UiLCJjYWxjdWxhdGVMYXlvdXQiLCJpTmV4dEZDTExldmVsIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvbkNvbnRleHRCb3VuZFRvVmlldyIsIm9Db250ZXh0Iiwic0RlZXBlc3RQYXRoIiwiZ2V0UHJvcGVydHkiLCJzVmlld0NvbnRleHRQYXRoIiwiaW5kZXhPZiIsImRpc3BsYXlFcnJvclBhZ2UiLCJfZXJyb3JNZXNzYWdlIiwiX3BhcmFtZXRlcnMiLCJfRkNMTGV2ZWwiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIkZDTExldmVsIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJpc0ZjbEVuYWJsZWQiLCJzQXBwVGl0bGUiLCJhZGRpdGlvbmFsSW5mb3JtYXRpb24iLCJzZXRUaXRsZSIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJhcHBDb250ZW50SWQiLCJjb25maWciLCJieUlkIiwiQmFzZUNvbnRyb2xsZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvb3RWaWV3QmFzZUNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgeyB0eXBlIE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBnZXRSb3V0ZVRhcmdldE5hbWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSRNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IFVSSSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvVVJJXCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlQWRkaXRpb25hbEluZm8gfSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IEFueSBmcm9tIFwiLi4vY29udHJvbHMvQW55XCI7XG5cbmV4cG9ydCB0eXBlIFRpdGxlSW5mb3JtYXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJ0aXRsZT86IHN0cmluZztcblx0aWNvbj86IHN0cmluZztcblx0aW50ZW50Pzogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LlJvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIilcbmNsYXNzIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0b1BsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdHByaXZhdGUgX2FIZWxwZXJNb2RlbHMhOiBKU09OTW9kZWxbXTtcblxuXHRwcml2YXRlIG9Sb3V0ZXI/OiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRlTWF0Y2hlZFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgb1RpdGxlSGllcmFyY2h5Q2FjaGU/OiBSZWNvcmQ8c3RyaW5nLCBUaXRsZUluZm9ybWF0aW9uPjtcblxuXHRwcml2YXRlIGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0U2l6ZUhlbHBlci5pbml0KCk7XG5cblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzID0gW107XG5cdH1cblxuXHRnZXRQbGFjZWhvbGRlcigpOiBQbGFjZWhvbGRlciB7XG5cdFx0cmV0dXJuIHRoaXMub1BsYWNlaG9sZGVyO1xuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVycygpOiB2b2lkIHtcblx0XHR0aGlzLm9QbGFjZWhvbGRlci5hdHRhY2hSb3V0ZU1hdGNoZXJzKCk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKHt9LCB0aGlzLm9uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5kZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCh0aGlzLm9uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMub1JvdXRlciA9IHVuZGVmaW5lZDtcblxuXHRcdFNpemVIZWxwZXIuZXhpdCgpO1xuXG5cdFx0Ly8gRGVzdHJveSBhbGwgSlNPTiBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSBmb3IgdGhlIHZpZXdzXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5mb3JFYWNoKGZ1bmN0aW9uIChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdFx0b01vZGVsLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdGdldFZpZXdGcm9tQ29udGFpbmVyKGNvbnRhaW5lcjogQ29udHJvbCk6IFZpZXcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnRhaW5lci5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKVxuXHRcdFx0PyBjb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKS5nZXRSb290Q29udHJvbCgpXG5cdFx0XHQ6IGNvbnRhaW5lcjtcblxuXHRcdHJldHVybiByZXN1bHQ/LmlzQTxWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuYWx5emUgdGhlIHBhZ2VzIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdmlld3MuXG5cdCAqIEBwYXJhbSBwYWdlcyBUaGUgcGFnZXMgdG8gYmUgYW5hbHl6ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3c1xuXHQgKi9cblx0cHJvdGVjdGVkIGdldFZpZXdzRnJvbVBhZ2VzKHBhZ2VzOiBDb250cm9sW10pOiBWaWV3W10ge1xuXHRcdGNvbnN0IHZpZXdzOiBWaWV3W10gPSBbXTtcblxuXHRcdHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXG5cdFx0XHRpZiAodmlldyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZpZXdzLnB1c2godmlldyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdmlld3M7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSByZXNvdXJjZSBidW5kbGUuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIHJlc291cmNlTW9kZWwgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0Z2V0UmVzb3VyY2VCdW5kbGUoKTogUmVzb3VyY2VCdW5kbGUgfCBQcm9taXNlPFJlc291cmNlQnVuZGxlPiB7XG5cdFx0cmV0dXJuICh0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdH1cblxuXHRnZXRSb3V0ZXIoKTogUm91dGVyIHtcblx0XHRpZiAoIXRoaXMub1JvdXRlcikge1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXIoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyO1xuXHR9XG5cblx0X2NyZWF0ZUhlbHBlck1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Ly8gV2Uga2VlcCBhIHJlZmVyZW5jZSBvbiB0aGUgbW9kZWxzIGNyZWF0ZWQgZHluYW1pY2FsbHksIGFzIHRoZXkgZG9uJ3QgZ2V0IGRlc3Ryb3llZFxuXHRcdC8vIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlldyBpcyBkZXN0cm95ZWQuXG5cdFx0Ly8gVGhpcyBpcyBkb25lIGR1cmluZyBvbkV4aXRcblx0XHRjb25zdCBvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5wdXNoKG9Nb2RlbCk7XG5cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0YXN5bmMgcm91dGluZ0lzQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgKHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB3YWl0aW5nIGZvciB0aGUgUmlnaHQgbW9zdCB2aWV3IHRvIGJlIHJlYWR5LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFJlZmVyZW5jZSBhbiBFdmVudCBwYXJhbWV0ZXIgY29taW5nIGZyb20gcm91dGVNYXRjaGVkIGV2ZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHJpZ2h0IG1vc3QgdmlldyBpcyByZWFkeVxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IFByb21pc2U8RkVWaWV3PiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IEZFVmlldykgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgYUNvbnRhaW5lcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIikgPz8gW10sXG5cdFx0XHRcdC8vIFRoZXJlIGNhbiBhbHNvIGJlIHJldXNlIGNvbXBvbmVudHMgaW4gdGhlIHZpZXcsIHJlbW92ZSB0aGVtIGJlZm9yZSBwcm9jZXNzaW5nLlxuXHRcdFx0XHRhRkVDb250YWluZXJzOiBGRVZpZXdbXSA9IFtdO1xuXHRcdFx0YUNvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRhaW5lcjogVmlldyB8IENvbXBvbmVudENvbnRhaW5lciB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRsZXQgb1ZpZXcgPSBvQ29udGFpbmVyIGFzIEZFVmlldyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9Db250YWluZXIgJiYgKG9Db250YWluZXIgYXMgQ29tcG9uZW50Q29udGFpbmVyKS5nZXRDb21wb25lbnRJbnN0YW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9Db21wb25lbnRJbnN0YW5jZSA9IChvQ29udGFpbmVyIGFzIENvbXBvbmVudENvbnRhaW5lcikuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdFx0XHRvVmlldyA9IG9Db21wb25lbnRJbnN0YW5jZS5nZXRSb290Q29udHJvbCgpIGFzIEZFVmlldztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkpIHtcblx0XHRcdFx0XHRhRkVDb250YWluZXJzLnB1c2gob1ZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9SaWdodE1vc3RGRVZpZXcgPSBhRkVDb250YWluZXJzW2FGRUNvbnRhaW5lcnMubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAob1JpZ2h0TW9zdEZFVmlldyAmJiBvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuaXNQYWdlUmVhZHkoKSkge1xuXHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0fSBlbHNlIGlmIChvUmlnaHRNb3N0RkVWaWV3KSB7XG5cdFx0XHRcdG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIGZyb20gdGhlIGhpc3RvcnkgT2JqZWN0LlxuXHQgKi9cblx0cHJvdGVjdGVkIHJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk6IHZvaWQge1xuXHRcdHN3aXRjaCAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udHlwZSkge1xuXHRcdFx0Y2FzZSBcIlJvd1wiOlxuXHRcdFx0XHRjb25zdCB0YWJsZSA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8udGFibGVJZCkgYXMgVGFibGU7XG5cdFx0XHRcdGNvbnN0IHBvcyA9IHRhYmxlXG5cdFx0XHRcdFx0LmdldFJvd0JpbmRpbmcoKVxuXHRcdFx0XHRcdC5nZXRDdXJyZW50Q29udGV4dHMoKVxuXHRcdFx0XHRcdC5maW5kSW5kZXgoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UGF0aCgpID09PSBoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250ZXh0UGF0aEZvY3VzKTtcblx0XHRcdFx0aWYgKHBvcyAhPT0gLTEpIHtcblx0XHRcdFx0XHR0YWJsZS5mb2N1c1Jvdyhwb3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0RWxlbWVudC5nZXRFbGVtZW50QnlJZChoaXN0b3J5LnN0YXRlLmZvY3VzSW5mby5jb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdH1cblx0XHQvL29uY2UgYXBwbGllZCwgdGhlIGZvY3VzIGluZm8gaXMgcmVtb3ZlZCB0byBwcmV2ZW50IGZvY3VzaW5nIG9uIGl0IGVhY2ggdGltZSB0aGUgdXNlciBkbyBhIGJhY2sgbmF2aWdhdGlvbiB0byB0aGlzIHBhZ2Vcblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKGhpc3Rvcnkuc3RhdGUsIHsgZm9jdXNJbmZvOiBudWxsIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUuXG5cdCAqIC0gdXBkYXRlIHRoZSBzaGVsbCB0aXRsZS5cblx0ICogLSB1cGRhdGUgdGFibGUgc2Nyb2xsLlxuXHQgKiAtIGNhbGwgb25QYWdlUmVhZHkgb24gdGhlIHJpZ2h0TW9zdFZpZXcuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb25cblx0ICovXG5cdGFzeW5jIG9uQWZ0ZXJSb3V0ZU1hdGNoZWQoZXZlbnQ6IFJvdXRlJE1hdGNoZWRFdmVudCk6IFByb21pc2U8RkVWaWV3IHwgdW5kZWZpbmVkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZpZXcgPSBhd2FpdCB0aGlzLndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkoZXZlbnQpO1xuXG5cdFx0XHRpZiAodGhpcy5nZXRWaXNpYmxlVmlld3MoKS5pbmNsdWRlcyh2aWV3KSkge1xuXHRcdFx0XHQvLyBUaGUgYXV0b0ZvY3VzIGlzIGluaXRpYWxseSBkaXNhYmxlZCBvbiB0aGUgbmF2Q29udGFpbmVyIG9yIHRoZSBGQ0wsIHNvIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBTaGVsbCBtZW51XG5cdFx0XHRcdC8vIGV2ZW4gaWYgdGhlIGFwcCB0YWtlcyBhIGxvbmcgdGltZSB0byBsYXVuY2hcblx0XHRcdFx0Ly8gVGhlIGZpcnN0IHRpbWUgdGhlIHZpZXcgaXMgZGlzcGxheWVkLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYXV0b2ZvY3VzIHNvIHRoYXQgaXQncyBtYW5hZ2VkIHByb3Blcmx5IGR1cmluZyBuYXZpZ2F0aW9uXG5cdFx0XHRcdGNvbnN0IHJvb3RDb250cm9sID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cm9vdENvbnRyb2wgJiZcblx0XHRcdFx0XHQocm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cyAmJlxuXHRcdFx0XHRcdCEocm9vdENvbnRyb2wgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQpLmdldEF1dG9Gb2N1cygpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJvb3RDb250cm9sLnNldFByb3BlcnR5KFwiYXV0b0ZvY3VzXCIsIHRydWUsIHRydWUpOyAvLyBEbyBub3QgbWFyayB0aGUgY29udGFpbmVyIGFzIGludmFsaWQsIG90aGVyd2lzZSBpdCdzIHJlLXJlbmRlcmVkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0XHR0aGlzLl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpO1xuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuVVNoZWxsKSB7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlVGl0bGVIaWVyYXJjaHkodmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZm9yY2VGb2N1cyA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmlzRm9jdXNGb3JjZWQoKTtcblx0XHRcdFx0YXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0Rm9jdXNGb3JjZWQoZmFsc2UpOyAvLyByZXNldFxuXHRcdFx0XHRpZiAodmlldy5nZXRDb250cm9sbGVyKCkgJiYgKHZpZXcuZ2V0UGFyZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQpLm9uUGFnZVJlYWR5KSB7XG5cdFx0XHRcdFx0KHZpZXcuZ2V0UGFyZW50KCkgYXMgVGVtcGxhdGVDb21wb25lbnQpLm9uUGFnZVJlYWR5KHsgZm9yY2VGb2N1czogZm9yY2VGb2N1cyB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGlzdG9yeS5zdGF0ZS5mb2N1c0luZm8pIHtcblx0XHRcdFx0XHR0aGlzLnJlc3RvcmVGb2N1c0Zyb21IaXN0b3J5KCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHQvLyBUcnkgdG8gcmVzdG9yZSB0aGUgZm9jdXMgb24gd2hlcmUgaXQgd2FzIHdoZW4gd2UgbGFzdCB2aXNpdGVkIHRoZSBjdXJyZW50IGhhc2hcblx0XHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5yZXN0b3JlRm9jdXNGb3JDdXJyZW50SGFzaCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLm9uQ29udGFpbmVyUmVhZHkpIHtcblx0XHRcdFx0XHR0aGlzLm9uQ29udGFpbmVyUmVhZHkoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21wdXRpbmcgdGhlIHRpdGxlIGhpZXJhcmNoeSBhbmQgY2FsbGluZyBmb2N1cyBtZXRob2RcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZSAoIG9yIGluaXRpYWxpemVzIGl0IGlmIHVuZGVmaW5lZCkuXG5cdCAqIEByZXR1cm5zICBUaGUgVGl0bGVIaWVyYXJjaHkgY2FjaGVcblx0ICovXG5cdF9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk6IFJlY29yZDxzdHJpbmcsIFRpdGxlSW5mb3JtYXRpb24+IHtcblx0XHRpZiAoIXRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUpIHtcblx0XHRcdHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub1RpdGxlSGllcmFyY2h5Q2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBjbGVhciB0aGUgVGl0bGVIaWVyYXJjaHkgY2FjaGUgZm9yIHRoZSBnaXZlbiBjb250ZXh0IHBhdGguXG5cdCAqIEBwYXJhbSAgcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBjbGVhciB0aGUgY2FjaGUgZm9yXG5cdCAqL1xuXHRjbGVhclRpdGxlSGllcmFyY2h5Q2FjaGUocGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtwYXRoXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0aXRsZUluZm8gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdGl0bGUgVGhlIGFwcGxpY2F0aW9uJ3MgdGl0bGVcblx0ICogQHBhcmFtIHN1YnRpdGxlIFRoZSBhcHBsaWNhdGlvbidzIHN1YlRpdGxlXG5cdCAqIEBwYXJhbSBzSW50ZW50IFRoZSBpbnRlbnQgcGF0aCB0byBiZSByZWRpcmVjdGVkIHRvXG5cdCAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgYXBwbGljYXRpb24ncyBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gaWNvbiBUaGUgYXBwbGljYXRpb24ncyBpY29uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0X2NvbXB1dGVUaXRsZUluZm8odGl0bGU6IHN0cmluZywgc3VidGl0bGU6IHN0cmluZywgc0ludGVudDogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZywgaWNvbiA9IFwiXCIpOiBUaXRsZUluZm9ybWF0aW9uIHtcblx0XHRjb25zdCBhUGFydHMgPSBzSW50ZW50LnNwbGl0KFwiL1wiKTtcblx0XHRpZiAoIWFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiP3Jlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0ludGVudCArPSBcIiZyZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogc3VidGl0bGUsXG5cdFx0XHRpbnRlbnQ6IHNJbnRlbnQsXG5cdFx0XHRpY29uOiBpY29uLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG5cdFx0fTtcblx0fVxuXG5cdF9mb3JtYXRUaXRsZShkaXNwbGF5TW9kZTogc3RyaW5nLCB0aXRsZVZhbHVlOiBzdHJpbmcsIHRpdGxlRGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZVZhbHVlfSAoJHt0aXRsZURlc2NyaXB0aW9ufSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVEZXNjcmlwdGlvbn0gKCR7dGl0bGVWYWx1ZX0pYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBIZWFkZXJJbmZvIHRpdGxlIGZvciBhIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCB0aXRsZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vIEhlYWRlckluZm8gdGl0bGUgYW5ub3RhdGlvbiBpcyBhdmFpbGFibGVcblx0ICovXG5cdGFzeW5jIF9mZXRjaFRpdGxlVmFsdWUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0bW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLFxuXHRcdFx0bWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCksXG5cdFx0XHRiaW5kaW5nVmlld0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChwYXRoKSxcblx0XHRcdGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbiA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlYCksXG5cdFx0XHR2YWx1ZUV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChoZWFkZXJJbmZvVGl0bGVWYWx1ZUFubm90YXRpb24sIHsgY29udGV4dDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSB9KTtcblx0XHRpZiAoIXZhbHVlRXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0aWYgKGhlYWRlckluZm9UaXRsZVZhbHVlQW5ub3RhdGlvbi4kRnVuY3Rpb24gPT09IFwib2RhdGEuY29uY2F0XCIpIHtcblx0XHRcdGNvbnN0IGFueU9iamVjdCA9IG5ldyBBbnkoeyBhbnk6IHZhbHVlRXhwcmVzc2lvbiB9KTtcblx0XHRcdGFueU9iamVjdC5zZXRNb2RlbChtb2RlbCk7XG5cdFx0XHRhbnlPYmplY3Quc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ1ZpZXdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHRleHRCaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlcIik7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmc/LmlzQTxDb21wb3NpdGVCaW5kaW5nPihcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRleHRCaW5kaW5nLmdldEJpbmRpbmdzKCkubWFwKChiaW5kaW5nKSA9PiBiaW5kaW5nLnJlcXVlc3RWYWx1ZT8uKCkpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluZm9UaXRsZSA9IGFueU9iamVjdC5nZXRBbnkoKTtcblx0XHRcdGFueU9iamVjdC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGluZm9UaXRsZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0KSxcblx0XHRcdFx0eyBjb250ZXh0OiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIH1cblx0XHRcdCksXG5cdFx0XHRwcm9wZXJ0eUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAke21ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZS8kUGF0aEBgKSxcblx0XHRcdHByb21pc2VzOiBQcm9taXNlPHN0cmluZz5bXSA9IFtdLFxuXHRcdFx0cGFyc2VkdmFsdWVFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHZhbHVlRXhwcmVzc2lvbiksXG5cdFx0XHRwcm9taXNlRm9yRGlzcGxheU1vZGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUocHJvcGVydHlDb250ZXh0KTtcblx0XHRcdFx0cmVzb2x2ZShkaXNwbGF5TW9kZSk7XG5cdFx0XHR9KTtcblx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JEaXNwbGF5TW9kZSk7XG5cdFx0Y29uc3QgdmFsdWVQYXRoID0gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzID8gcGFyc2VkdmFsdWVFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWR2YWx1ZUV4cHJlc3Npb24ucGF0aCxcblx0XHRcdGZuVmFsdWVGb3JtYXR0ZXIgPSBwYXJzZWR2YWx1ZUV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0dmFsdWVCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHZhbHVlUGF0aCwgYmluZGluZ1ZpZXdDb250ZXh0LCB7ICQkZ3JvdXBJZDogXCIkYXV0by5IZXJvZXNcIiB9KTtcblx0XHR2YWx1ZUJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdGNvbnN0IHByb21pc2VGb3JUaXRsZVZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmblZhbHVlRm9ybWF0dGVyID8gZm5WYWx1ZUZvcm1hdHRlcihldmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCk7XG5cblx0XHRcdFx0dmFsdWVCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdHJlc29sdmUodGFyZ2V0VmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdHZhbHVlQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdH0pO1xuXHRcdHByb21pc2VzLnB1c2gocHJvbWlzZUZvclRpdGxlVmFsdWUpO1xuXG5cdFx0aWYgKHRleHRFeHByZXNzaW9uKSB7XG5cdFx0XHRjb25zdCBwYXJzZWRUZXh0RXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcih0ZXh0RXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgdGV4dFBhdGggPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXJ0cyA/IHBhcnNlZFRleHRFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBwYXJzZWRUZXh0RXhwcmVzc2lvbi5wYXRoO1xuXHRcdFx0dGV4dFBhdGggPSB2YWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gLTEgPyBgJHt2YWx1ZVBhdGguc2xpY2UoMCwgdmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSl9LyR7dGV4dFBhdGh9YCA6IHRleHRQYXRoO1xuXG5cdFx0XHRjb25zdCBmblRleHRGb3JtYXR0ZXIgPSBwYXJzZWRUZXh0RXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHRcdHRleHRCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHRleHRQYXRoLCBiaW5kaW5nVmlld0NvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pO1xuXHRcdFx0dGV4dEJpbmRpbmcuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0Y29uc3QgcHJvbWlzZUZvclRpdGxlVGV4dCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChldmVudDogT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRUZXh0ID0gZm5UZXh0Rm9ybWF0dGVyID8gZm5UZXh0Rm9ybWF0dGVyKGV2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogZXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHRcdHRleHRCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0YXJnZXRUZXh0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0ZXh0QmluZGluZy5hdHRhY2hDaGFuZ2UoZm5DaGFuZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHByb21pc2VGb3JUaXRsZVRleHQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGl0bGVJbmZvOiBzdHJpbmdbXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0XHRpZiAodHlwZW9mIHRpdGxlSW5mbyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IHRoaXMuX2Zvcm1hdFRpdGxlKHRpdGxlSW5mb1swXSwgdGl0bGVJbmZvWzFdLCB0aXRsZUluZm9bMl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZvcm1hdHRlZFRpdGxlO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgdGl0bGUgZnJvbSB0aGUgaGVhZGVyIGluZm8gOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIGRlY29kZWQgYXBwbGljYXRpb24tc3BlY2lmaWMgaGFzaC5cblx0ICogQHJldHVybnMgRGVjb2RlZCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBoYXNoXG5cdCAqL1xuXHRnZXRBcHBTcGVjaWZpY0hhc2goKTogc3RyaW5nIHtcblx0XHQvLyBIYXNoQ2hhbmdlZCBpc1NoZWxsTmF2aWdhdGlvbkhhc2hDaGFuZ2VyXG5cdFx0Y29uc3QgaGFzaENoYW5nZXIgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdHJldHVybiBoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gVVJJLmRlY29kZShoYXNoQ2hhbmdlci5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpKSA6IFwiIy9cIjtcblx0fVxuXG5cdF9nZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aXRsZUluZm9ybWF0aW9uIGZyb20gYSBwYXRoLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBjYWNoZSB0byBzdG9yZSB0aXRsZSBpbmZvcm1hdGlvbiBpZiBuZWNlc3Nhcnlcblx0ICogQHBhcmFtIHsqfSBzUGF0aCBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIHJldHJpZXZlIHRpdGxlIGluZm9ybWF0aW9uIGZyb20gTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSAgb1RpdGxlaW5mb3JtYXRpb24gcmV0dXJuZWQgYXMgcHJvbWlzZVxuXHQgKi9cblxuXHRhc3luYyBnZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aDogc3RyaW5nKTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKSB7XG5cdFx0XHQvLyBUaGUgdGl0bGUgaW5mbyBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgY2FjaGVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGxldCBzVHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVHlwZU5hbWVgKTtcblx0XHRzVHlwZU5hbWUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKHNUeXBlTmFtZSwgdGhpcy5nZXRWaWV3KCkpIHx8IHNUeXBlTmFtZTtcblx0XHRjb25zdCBzQXBwU3BlY2lmaWNIYXNoID0gdGhpcy5nZXRBcHBTcGVjaWZpY0hhc2goKTtcblx0XHRjb25zdCBzSW50ZW50ID0gc0FwcFNwZWNpZmljSGFzaCArIHNQYXRoLnNsaWNlKDEpO1xuXHRcdHJldHVybiB0aGlzLl9mZXRjaFRpdGxlVmFsdWUoc1BhdGgpLnRoZW4oKHNUaXRsZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRjb25zdCBvVGl0bGVJbmZvID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhzVHlwZU5hbWUsIHNUaXRsZSwgc0ludGVudCk7XG5cdFx0XHRvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0gPSBvVGl0bGVJbmZvO1xuXHRcdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRW5zdXJlIHRoYXQgdGhlIHVzaGVsbCBzZXJ2aWNlIHJlY2VpdmVzIGFsbCBlbGVtZW50c1xuXHQgKiAodGl0bGUsIHN1YnRpdGxlLCBpbnRlbnQsIGljb24pIGFzIHN0cmluZ3MuXG5cdCAqXG5cdCAqIEFubm90YXRpb24gSGVhZGVySW5mbyBhbGxvd3MgZm9yIGJpbmRpbmcgb2YgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG5cdCAqICh3aGljaCBhcmUgdXNlZCBoZXJlIGFzIHRpdGxlIGFuZCBzdWJ0aXRsZSkgdG8gYW55IGVsZW1lbnQgaW4gdGhlIGVudGl0eVxuXHQgKiAoc3VjaCB0eXBlcyBhcyBCb29sZWFuLCB0aW1lc3RhbXAsIGRvdWJsZSwgYW5kIG90aGVycyBhcmUgcG9zc2libGUpXG5cdCAqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaGllcmFyY2h5IGFuZCBjb252ZXJ0cyBub24tc3RyaW5nIHR5cGVzIHRvIHN0cmluZy5cblx0ICogQHBhcmFtIGFIaWVyYXJjaHkgU2hlbGwgdGl0bGUgaGllcmFyY2h5XG5cdCAqIEByZXR1cm5zIENvcHkgb2Ygc2hlbGwgdGl0bGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIGFzIHN0cmluZ3Ncblx0ICovXG5cdF9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MoYUhpZXJhcmNoeTogVGl0bGVJbmZvcm1hdGlvbltdKTogb2JqZWN0W10ge1xuXHRcdGNvbnN0IGFIaWVyYXJjaHlTaGVsbCA9IFtdO1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgaW4gYUhpZXJhcmNoeSkge1xuXHRcdFx0Y29uc3Qgb0hpZXJhcmNoeSA9IGFIaWVyYXJjaHlbbGV2ZWxdO1xuXHRcdFx0Y29uc3Qgb1NoZWxsSGllcmFyY2h5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvSGllcmFyY2h5KSB7XG5cdFx0XHRcdG9TaGVsbEhpZXJhcmNoeVtrZXldID0gKFxuXHRcdFx0XHRcdHR5cGVvZiBvSGllcmFyY2h5W2tleSBhcyBrZXlvZiBUaXRsZUluZm9ybWF0aW9uXSAhPT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0PyBTdHJpbmcob0hpZXJhcmNoeVtrZXkgYXMga2V5b2YgVGl0bGVJbmZvcm1hdGlvbl0pXG5cdFx0XHRcdFx0XHQ6IG9IaWVyYXJjaHlba2V5IGFzIGtleW9mIFRpdGxlSW5mb3JtYXRpb25dXG5cdFx0XHRcdCkgYXMgc3RyaW5nO1xuXHRcdFx0fVxuXHRcdFx0YUhpZXJhcmNoeVNoZWxsLnB1c2gob1NoZWxsSGllcmFyY2h5KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFIaWVyYXJjaHlTaGVsbDtcblx0fVxuXG5cdF9nZXRUYXJnZXRUeXBlRnJvbUhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0bGV0IHNUYXJnZXRUeXBlID0gXCJcIjtcblxuXHRcdGNvbnN0IGFSb3V0ZXMgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc/LnJvdXRlcyA/PyBbXTtcblx0XHRmb3IgKGNvbnN0IHJvdXRlIG9mIGFSb3V0ZXMpIHtcblx0XHRcdGNvbnN0IG9Sb3V0ZSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGUocm91dGUubmFtZSk7XG5cdFx0XHRpZiAob1JvdXRlPy5tYXRjaChzSGFzaCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RhcmdldCA9IGdldFJvdXRlVGFyZ2V0TmFtZXMocm91dGUudGFyZ2V0KVswXTtcblx0XHRcdFx0c1RhcmdldFR5cGUgPSAob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRUYXJnZXQoc1RhcmdldCkgYXMgdW5rbm93biBhcyB7IF9vT3B0aW9uczogeyBuYW1lOiBzdHJpbmcgfSB9KS5fb09wdGlvbnMubmFtZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNUYXJnZXRUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBmb3JtYXQgb2YgdGhlIGJyb3dzZXIgdGl0bGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlldy5cblx0ICogQHBhcmFtIHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIFRpdGxlSW5mb3JtYXRpb24gYXJyYXlcblx0ICogQHBhcmFtIHBhZ2VUaXRsZUluZm9ybWF0aW9uIFRpdGxlSW5mb3JtYXRpb24gb2JqZWN0XG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGEgaGVhZGVyIHRleHQgYW5kIGFuIGFkZGl0aW9uYWwgY29udGV4dFxuXHQgKi9cblx0X2dldEJyb3dzZXJUaXRsZSh0aXRsZUluZm9IaWVyYXJjaHlTaGVsbDogVGl0bGVJbmZvcm1hdGlvbltdLCBwYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbik6IHsgaGVhZGVyVGV4dDogc3RyaW5nIH0ge1xuXHRcdGNvbnN0IGJyZWFkY3J1bWJUZXh0cyA9IFtdO1xuXHRcdGxldCBmaXJzdFBhcnQgPSBcIlwiLFxuXHRcdFx0c2Vjb25kUGFydCA9IFwiXCI7XG5cblx0XHRjb25zdCB0aXRsZUluZm9IaWVyYXJjaHkgPSBbLi4udGl0bGVJbmZvSGllcmFyY2h5U2hlbGxdO1xuXHRcdGlmICh0aXRsZUluZm9IaWVyYXJjaHkubGVuZ3RoID4gMSkge1xuXHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5LnBvcCgpO1xuXHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5LmZvckVhY2goKHRpdGxlSW5mbykgPT4ge1xuXHRcdFx0XHRpZiAodGl0bGVJbmZvLnN1YnRpdGxlKSB7XG5cdFx0XHRcdFx0YnJlYWRjcnVtYlRleHRzLnB1c2godGl0bGVJbmZvLnN1YnRpdGxlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSkge1xuXHRcdFx0YnJlYWRjcnVtYlRleHRzLnB1c2gocGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUpO1xuXHRcdH1cblx0XHRpZiAocGFnZVRpdGxlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24pIHtcblx0XHRcdGZpcnN0UGFydCA9IGAke3BhZ2VUaXRsZUluZm9ybWF0aW9uLnN1YnRpdGxlfSgke3BhZ2VUaXRsZUluZm9ybWF0aW9uLmRlc2NyaXB0aW9ufSlgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaXJzdFBhcnQgPSBgJHtwYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZX1gO1xuXHRcdH1cblx0XHRzZWNvbmRQYXJ0ID0gYnJlYWRjcnVtYlRleHRzLmpvaW4oXCIgLSBcIik7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aGVhZGVyVGV4dDogc2Vjb25kUGFydCA/IGAke2ZpcnN0UGFydH0gLSAke3NlY29uZFBhcnR9YCA6IGZpcnN0UGFydFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIHRoZSBicm93c2VyIHRpdGxlIGFuZCBtZW51IHRpdGxlLCB0aGVuIHRyaWdnZXIgdGhlIHNldCBBUEkgb2YgdGhlIHNoZWxsLlxuXHQgKiBAcGFyYW0gYXBwVGl0bGUgQXBwbGljYXRpb24gdGl0bGVcblx0ICogQHBhcmFtIHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsIEFuIG9iamVjdCBmb3IgdGl0bGUgaW5mb3JtYXRpb25cblx0ICogQHBhcmFtIHBhZ2VUaXRsZUluZm9ybWF0aW9uIFRpdGxlSW5mb3JtYXRpb24gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBfc2V0VGl0bGVzKGFwcFRpdGxlOiBzdHJpbmcsIHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsOiBUaXRsZUluZm9ybWF0aW9uW10sIHBhZ2VUaXRsZUluZm9ybWF0aW9uOiBUaXRsZUluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gR2V0IHRoZSB0aXRsZSBvZiB0aGUgYnJvd3NlclxuXHRcdGxldCBicm93c2VyVGl0bGU7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdHRpdGxlID0gcGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUgPz8gXCJcIjtcblx0XHRpZiAodGl0bGVJbmZvSGllcmFyY2h5U2hlbGwubGVuZ3RoKSB7XG5cdFx0XHRicm93c2VyVGl0bGUgPSB0aGlzLl9nZXRCcm93c2VyVGl0bGUodGl0bGVJbmZvSGllcmFyY2h5U2hlbGwsIHBhZ2VUaXRsZUluZm9ybWF0aW9uKTtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5fc2V0U2hlbGxNZW51VGl0bGUoYXBwQ29tcG9uZW50LCB0aXRsZSwgYXBwVGl0bGUsIGJyb3dzZXJUaXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBzaGVsbCB0aXRsZSBhZnRlciBlYWNoIG5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbWVudSBpcyBmaWxsZWQgcHJvcGVybHlcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGFzeW5jIGNvbXB1dGVUaXRsZUhpZXJhcmNoeSh2aWV3OiBWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRjdXJyZW50UGFnZSA9IHZpZXcuZ2V0UGFyZW50KCksXG5cdFx0XHR0aXRsZUluZm9IaWVyYXJjaHlTZXE6IFRpdGxlSW5mb3JtYXRpb25bXSA9IFtdLFxuXHRcdFx0YXBwU3BlY2lmaWNIYXNoID0gdGhpcy5nZXRBcHBTcGVjaWZpY0hhc2goKSxcblx0XHRcdG1hbmlmZXN0QXBwU2V0dGluZ3MgPSBhcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIiksXG5cdFx0XHRhcHBUaXRsZSA9IG1hbmlmZXN0QXBwU2V0dGluZ3MudGl0bGUgfHwgXCJcIixcblx0XHRcdGFwcFN1YlRpdGxlID0gbWFuaWZlc3RBcHBTZXR0aW5ncy5zdWJUaXRsZSB8fCBcIlwiLFxuXHRcdFx0YXBwSWNvbiA9IG1hbmlmZXN0QXBwU2V0dGluZ3MuaWNvbiB8fCBcIlwiO1xuXHRcdGxldCBwYWdlVGl0bGVJbmZvcm1hdGlvbjogVGl0bGVJbmZvcm1hdGlvbiwgbmV3UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGN1cnJlbnRQYWdlICYmIChjdXJyZW50UGFnZSBhcyBUZW1wbGF0ZUNvbXBvbmVudCkuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKSB7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgYSBMUiwgdXNlIHRoZSB0aXRsZSBhbmQgc3VidGl0bGUgZnJvbSB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0aWYgKHRoaXMuX2dldFRhcmdldFR5cGVGcm9tSGFzaChcIlwiKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdHRpdGxlSW5mb0hpZXJhcmNoeVNlcS5wdXNoKGF3YWl0IHRoaXMuZ2V0Um9vdExldmVsVGl0bGVJbmZvcm1hdGlvbihhcHBTcGVjaWZpY0hhc2gsIGFwcFRpdGxlLCBhcHBTdWJUaXRsZSwgYXBwSWNvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGhlbiBtYW5hZ2Ugb3RoZXIgcGFnZXNcblx0XHRcdFx0bmV3UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBwYXRoUGFydHMgPSBuZXdQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0bGV0IHBhdGggPSBcIlwiO1xuXG5cdFx0XHRcdHBhdGhQYXJ0cy5zaGlmdCgpOyAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnQgKGVtcHR5IHN0cmluZykgYXMgaXQgaGFzIGJlZW4gbWFuYWdlZCBhYm92ZVxuXHRcdFx0XHRwYXRoUGFydHMucG9wKCk7IC8vIFJlbW92ZSB0aGUgbGFzdCBzZWdtZW50IGFzIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2UgYW5kIHNob3VsZG4ndCBhcHBlYXIgaW4gdGhlIG1lbnVcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIHBhdGhQYXJ0cykge1xuXHRcdFx0XHRcdHBhdGggKz0gYC8ke3BhdGhQYXJ0fWA7XG5cdFx0XHRcdFx0Ly9pZiB0aGUgYXNzb2NpYXRlZCB0YXJnZXQgaXMgbm90IGRlY2xhcmVkIGluIHRoZSByb3V0ZXMsIHdlIHNraXAgaXRcblx0XHRcdFx0XHRpZiAoIWFwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZUluZm9CeUhhc2gocGF0aCkpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpLFxuXHRcdFx0XHRcdFx0aXNQYXJhbWV0ZXJpemVkID0gbWV0YU1vZGVsLmdldE9iamVjdChgJHtwYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdFx0XHRpZiAoIWlzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0XHRcdFx0dGl0bGVJbmZvSGllcmFyY2h5U2VxLnB1c2goYXdhaXQgdGhpcy5nZXRUaXRsZUluZm9Gcm9tUGF0aChwYXRoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEN1cnJlbnQgcGFnZVxuXHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24gPSBhd2FpdCAoY3VycmVudFBhZ2UgYXMgVGVtcGxhdGVDb21wb25lbnQpLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpO1xuXHRcdFx0cGFnZVRpdGxlSW5mb3JtYXRpb24gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRwYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZSA/PyBcIlwiLFxuXHRcdFx0XHRhcHBTcGVjaWZpY0hhc2ggKyB0aGlzLl9nZXRIYXNoKCksXG5cdFx0XHRcdHBhZ2VUaXRsZUluZm9ybWF0aW9uLmRlc2NyaXB0aW9uXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY29udGV4dCAmJiBuZXdQYXRoKSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtuZXdQYXRoXSA9IHBhZ2VUaXRsZUluZm9ybWF0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW2FwcFNwZWNpZmljSGFzaF0gPSBwYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGl0bGUgaW5mb3JtYXRpb24gbWlzc2luZyBpbiBIZWFkZXJJbmZvXCIpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Ly9XZSBub3cgdXNlIGRpcmVjdGx5IHRoZSBoaWVyYXJjaHkgYWxyZWFkeSBzZXF1ZW50aWFsbHkgcmVzb2x2ZWRcblx0XHRcdGNvbnN0IHRpdGxlSW5mb0hpZXJhcmNoeSA9IHRpdGxlSW5mb0hpZXJhcmNoeVNlcTtcblx0XHRcdC8vIHdvcmthcm91bmQgZm9yIHNoZWxsIHdoaWNoIGlzIGV4cGVjdGluZyBhbGwgZWxlbWVudHMgYmVpbmcgb2YgdHlwZSBzdHJpbmdcblx0XHRcdGNvbnN0IHRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsID0gdGhpcy5fZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKHRpdGxlSW5mb0hpZXJhcmNoeSk7XG5cdFx0XHR0aXRsZUluZm9IaWVyYXJjaHlTaGVsbC5yZXZlcnNlKCk7XG5cdFx0XHRhd2FpdCBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEhpZXJhcmNoeSh0aXRsZUluZm9IaWVyYXJjaHlTaGVsbCk7XG5cblx0XHRcdGF3YWl0IHRoaXMuX3NldFRpdGxlcyhhcHBUaXRsZSwgdGl0bGVJbmZvSGllcmFyY2h5U2hlbGwgYXMgdW5rbm93biBhcyBUaXRsZUluZm9ybWF0aW9uW10sIHBhZ2VUaXRsZUluZm9ybWF0aW9uKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIChlcnJvck1lc3NhZ2U6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlcnJvck1lc3NhZ2UgYXMgc3RyaW5nKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5iSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB0aXRsZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJvb3QgbGV2ZWwuXG5cdCAqIEBwYXJhbSBhcHBTcGVjaWZpY0hhc2ggVGhlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGhhc2hcblx0ICogQHBhcmFtIGFwcFRpdGxlIFRoZSBhcHBsaWNhdGlvbiB0aXRsZVxuXHQgKiBAcGFyYW0gYXBwU3ViVGl0bGUgVGhlIGFwcGxpY2F0aW9uIHN1YnRpdGxlXG5cdCAqIEBwYXJhbSBhcHBJY29uIFRoZSBhcHBsaWNhdGlvbiBpY29uXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBjb250YWluaW5nIHRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRSb290TGV2ZWxUaXRsZUluZm9ybWF0aW9uKFxuXHRcdGFwcFNwZWNpZmljSGFzaDogc3RyaW5nLFxuXHRcdGFwcFRpdGxlOiBzdHJpbmcsXG5cdFx0YXBwU3ViVGl0bGU6IHN0cmluZyxcblx0XHRhcHBJY29uOiBzdHJpbmdcblx0KTogUHJvbWlzZTxUaXRsZUluZm9ybWF0aW9uPiB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbYXBwU3BlY2lmaWNIYXNoXSkge1xuXHRcdFx0Ly8gVGhlIHRpdGxlIGluZm8gaXMgYWxyZWFkeSBzdG9yZWQgaW4gdGhlIGNhY2hlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9UaXRsZUhpZXJhcmNoeUNhY2hlW2FwcFNwZWNpZmljSGFzaF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oYXBwVGl0bGUsIGFwcFN1YlRpdGxlLCBhcHBTcGVjaWZpY0hhc2gsIHVuZGVmaW5lZCwgYXBwSWNvbikpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Y2FsY3VsYXRlTGF5b3V0KGlOZXh0RkNMTGV2ZWw6IG51bWJlciwgc0hhc2g6IHN0cmluZywgc1Byb3Bvc2VkTGF5b3V0OiBzdHJpbmcgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIGFmdGVyIGEgdmlldyBoYXMgYmVlbiBib3VuZCB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIGJvdW5kIHRvIGEgdmlld1xuXHQgKi9cblx0b25Db250ZXh0Qm91bmRUb1ZpZXcob0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBzRGVlcGVzdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLmdldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIpLFxuXHRcdFx0XHRzVmlld0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAoIXNEZWVwZXN0UGF0aCB8fCBzRGVlcGVzdFBhdGguaW5kZXhPZihzVmlld0NvbnRleHRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHQvLyBUaGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUgZm9yIHRoZSBkZWVwZXN0IHJlYWNoZWQgcGF0aCwgb3IgdGhlIHBhdGhcblx0XHRcdFx0Ly8gZm9yIHRoZSB2aWV3IGlzbid0IGEgc3VicGF0aCBvZiB0aGUgcHJldmlvdXMgZGVlcGVzdCBwYXRoIC0tPiB1cGRhdGVcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiLCBzVmlld0NvbnRleHRQYXRoLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGRpc3BsYXlFcnJvclBhZ2UoX2Vycm9yTWVzc2FnZTogc3RyaW5nLCBfcGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCBfRkNMTGV2ZWwgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBGRVZpZXcsIEZDTExldmVsOiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIFtdO1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiBhbGwgdmlzaWJsZSB2aWV3cy5cblx0ICogQHJldHVybnMgVGhlIHZpc2libGUgdmlld3Ncblx0ICovXG5cdGdldFZpc2libGVWaWV3cygpOiBWaWV3W10ge1xuXHRcdHJldHVybiBbXTtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGlzRmNsRW5hYmxlZCgpOiB0aGlzIGlzIEZjbENvbnRyb2xsZXIge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXN5bmMgX3NldFNoZWxsTWVudVRpdGxlKFxuXHRcdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRzVGl0bGU6IHN0cmluZyxcblx0XHRzQXBwVGl0bGU6IHN0cmluZyxcblx0XHRhZGRpdGlvbmFsSW5mb3JtYXRpb24/OiBUaXRsZUFkZGl0aW9uYWxJbmZvXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlbiBieSBGY2xDb250cm9sbGVyXG5cdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc1RpdGxlLCBhZGRpdGlvbmFsSW5mb3JtYXRpb24pO1xuXHR9XG5cblx0Z2V0QXBwQ29udGVudENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgYXBwQ29udGVudElkID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nPy5jb25maWc/LmNvbnRyb2xJZCA/PyBcImFwcENvbnRlbnRcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZChhcHBDb250ZW50SWQpIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG59XG5pbnRlcmZhY2UgUm9vdFZpZXdCYXNlQ29udHJvbGxlciB7XG5cdG9uQ29udGFpbmVyUmVhZHk/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7TUE0Q01BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUU1REMsY0FBYyxDQUFDQyxXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQkYsY0FBYyxDQUFDRyxTQUFTLENBQUMsRUFBQU4sSUFBQSxDQUFBTyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGVBQUE7SUFBQSxTQUFBVix1QkFBQTtNQUFBLElBQUFXLEtBQUE7TUFBQSxTQUFB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
@@ -433,7 +433,8 @@ class RootViewBaseController extends BaseController {
433
433
 
434
434
  const oMetaModel = this.getAppComponent().getMetaModel();
435
435
  const sEntityPath = oMetaModel.getMetaPath(sPath);
436
- const sTypeName = oMetaModel.getObject(`${sEntityPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/TypeName`);
436
+ let sTypeName = oMetaModel.getObject(`${sEntityPath}/@com.sap.vocabularies.UI.v1.HeaderInfo/TypeName`);
437
+ sTypeName = CommonUtils.getTranslatedTextFromExpBindingString(sTypeName, this.getView()) || sTypeName;
437
438
  const sAppSpecificHash = this.getAppSpecificHash();
438
439
  const sIntent = sAppSpecificHash + sPath.slice(1);
439
440
  return this._fetchTitleValue(sPath).then((sTitle: string) => {