@sapui5/sap.fe.core 1.120.32 → 1.120.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.120.32",
3
+ "version": "1.120.34",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.120.32</version>
9
+ <version>1.120.34</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -167,7 +167,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
167
167
  }
168
168
  }
169
169
  parameters.FCLLevel = this._getFCLLevel();
170
- this.removeTransitionMessagesForPreviousContext();
170
+ if (parameters.reason !== NavigationReason.EditFlowAction) {
171
+ this.removeTransitionMessagesForPreviousContext();
172
+ }
171
173
  return this._oRoutingService.navigateToContext(context, parameters, this._oView.getViewData(), this._oTargetInformation);
172
174
  }
173
175
 
@@ -1118,4 +1120,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
1118
1120
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatched", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatched"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRouteMatchedFinished", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "onRouteMatchedFinished"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeBinding", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterBinding", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToTarget", [_dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToTarget"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToRoute", [_dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToRoute"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateBackFromTransientState", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateBackFromTransientState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateToMessagePage", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateToMessagePage"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "isCurrentStateImpactedBy", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "isCurrentStateImpactedBy"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDataReceived", [_dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "onDataReceived"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "switchFullScreen", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "switchFullScreen"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "closeColumn", [_dec23, _dec24], Object.getOwnPropertyDescriptor(_class2.prototype, "closeColumn"), _class2.prototype)), _class2)) || _class);
1119
1121
  return InternalRouting;
1120
1122
  }, false);
1121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbFJvdXRpbmciLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJmaW5hbEV4dGVuc2lvbiIsIkJlZm9yZSIsIm9uRXhpdCIsIl9vUm91dGluZ1NlcnZpY2UiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfZm5Sb3V0ZU1hdGNoZWRCb3VuZCIsIm9uSW5pdCIsIl9vVmlldyIsImJhc2UiLCJnZXRWaWV3IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIl9vUGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiX29Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJfb1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJFcnJvciIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1JvdXRpbmdTZXJ2aWNlIiwiX29uUm91dGVNYXRjaGVkIiwiYmluZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIl9vVGFyZ2V0SW5mb3JtYXRpb24iLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNhdGNoIiwib25Sb3V0ZU1hdGNoZWQiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25CZWZvcmVCaW5kaW5nIiwiX2JpbmRpbmdDb250ZXh0IiwiX21QYXJhbWV0ZXJzIiwiYmVmb3JlU2V0QmluZGluZ0NvbnRleHQiLCJiaW5kaW5nQ29udGV4dCIsIm9Sb3V0aW5nIiwiZ2V0Q29udHJvbGxlciIsInJvdXRpbmciLCJvbkFmdGVyQmluZGluZyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIm9uQ29udGV4dEJvdW5kVG9WaWV3IiwiYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJvQ29udGV4dCIsInNOYXZpZ2F0aW9uVGFyZ2V0TmFtZSIsImJQcmVzZXJ2ZUhpc3RvcnkiLCJvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm9EZXRhaWxSb3V0ZSIsImRldGFpbCIsInNSb3V0ZU5hbWUiLCJyb3V0ZSIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwicGFyYW1ldGVycyIsIm5hdmlnYXRlVG8iLCJnZXRWaWV3RGF0YSIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm5hdmlnYXRlVG9Db250ZXh0IiwiY29udGV4dCIsImlzQSIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwibW9kZSIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsImNyZWF0ZUNvbnRleHRQcm9taXNlIiwiY3JlYXRlZENvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsImVkaXRhYmxlIiwicGVyc2lzdE9QU2Nyb2xsIiwidXBkYXRlRkNMTGV2ZWwiLCJmb3JjZUZvY3VzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJjYWxsRXh0ZW5zaW9uIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJvdmVycmlkZU5hdiIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiRkNMTGV2ZWwiLCJfZ2V0RkNMTGV2ZWwiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQiLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJuYXZpZ2F0ZUJhY2tGcm9tVHJhbnNpZW50U3RhdGUiLCJzSGFzaCIsImdldEhhc2giLCJpbmNsdWRlcyIsIm5hdkJhY2siLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJzRXJyb3JNZXNzYWdlIiwibVBhcmFtZXRlcnMiLCJuYXZUb0hhc2giLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsImRpc3BsYXlFcnJvclBhZ2UiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJfaXNWaWV3UGFydE9mUm91dGUiLCJyb3V0ZUluZm9ybWF0aW9uIiwiYVRhcmdldHMiLCJ0YXJnZXRzIiwiaW5kZXhPZiIsInRhcmdldE5hbWUiLCJ2aWV3TGV2ZWwiLCJyb3V0ZUxldmVsIiwic2V0VGltZW91dCIsIkFjdGl2aXR5U3luYyIsImlzQ29ubmVjdGVkIiwiZGlzY29ubmVjdCIsIl9zZXRCaW5kaW5nQ29udGV4dCIsIl9idWlsZEJpbmRpbmdQYXRoIiwicm91dGVBcmd1bWVudHMiLCJiaW5kaW5nUGF0dGVybiIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwicGF0aCIsInJlcGxhY2UiLCJkZWZlcnJlZCIsInNLZXkiLCJzVmFsdWUiLCJiVGFyZ2V0RWRpdGFibGUiLCJiQWN0aW9uQ3JlYXRlIiwib0V2ZW50IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJtQXJndW1lbnRzIiwiZ2V0UGFyYW1ldGVycyIsImFyZ3VtZW50cyIsIm9OYXZpZ2F0aW9uUGFyYW1ldGVycyIsImJpbmRQcm9taXNlIiwib01vZGVsIiwiX2JpbmREZWZlcnJlZCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJFZGl0Rmxvd0FjdGlvbiIsIl9iaW5kUGFnZUZvckVkaXQiLCJfYmluZFBhZ2UiLCJmaW5hbGx5IiwidG9TdHJpbmciLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsInRhcmdldFBhdGgiLCJjcmVhdGVEZWZlcnJlZENvbnRleHQiLCJsaXN0QmluZGluZyIsInBhcmVudENvbnRleHQiLCJkYXRhIiwiY3VycmVudEJpbmRpbmdDb250ZXh0IiwiX2dldEJpbmRpbmdDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwibW9kZWwiLCJ0ZWNobmljYWxQYXRoIiwicmVzb2x2ZVBhdGgiLCJhY3RpdmVDb250ZXh0IiwiX2NyZWF0ZUNvbnRleHQiLCJfYmluZFBhZ2VUb0NvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJlZGl0RmxvdyIsImVkaXREb2N1bWVudCIsIl9iaW5kUGFnZVRvUGF0aCIsInJlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsImNyZWF0ZUZpbHRlckZyb21QYXRoIiwic2VtYW50aWNQYXRoIiwic2VtYW50aWNLZXlzIiwibWV0YU1vZGVsIiwidW5xdW90ZUFuZERlY29kZSIsInZhbHVlIiwibGFzdEluZGV4T2YiLCJsZW5ndGgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzdWJzdHJpbmciLCJrZXlWYWx1ZXMiLCJzcGxpdCIsImZpbmFsS2V5cyIsImZpbmFsS2V5VmFsdWVzIiwiZmlsdGVyIiwic2luZ2xlS2V5IiwiZWxlbWVudCIsInN0YXJ0c1dpdGgiLCJmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJmaWx0ZXJzIiwia2V5UGFydCIsImtleVZhbHVlIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiY2FzZVNlbnNpdGl2ZSIsIm1LZXlWYWx1ZXMiLCJmb3JFYWNoIiwic0tleUFzc2lnbm1lbnQiLCJhUGFydHMiLCJmYWlsZWQiLCJtYXAiLCJzZW1hbnRpY0tleSIsImtleSIsImRyYWZ0RmlsdGVyIiwiYW5kIiwicHVzaCIsImdldFRlY2huaWNhbFBhdGhGcm9tUGF0aCIsInBhdGhXaXRoUGFyYW1ldGVycyIsImtleXMiLCJnZXRNZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRQYXRoIiwiYmluZExpc3QiLCIkJGdyb3VwSWQiLCJjb250ZXh0cyIsInJlcXVlc3RDb250ZXh0cyIsInJlZnJlc2hDb250ZXh0IiwicGF0aFRvUmVwbGFjZVdpdGgiLCJjb250ZXh0VG9SZW1vdmUiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJjb250ZXh0VG9SZXBsYWNlV2l0aCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJyZXBsYWNlV2l0aCIsIkVkaXRTdGF0ZSIsInNldEVkaXRTdGF0ZURpcnR5IiwiY2hlY2tEcmFmdEF2YWlsYWJpbGl0eSIsIm1hdGNoZXMiLCJleGVjIiwiZHJhZnRSb290IiwiZ2V0T2JqZWN0IiwicGF0aFRvUmVzb2x2ZSIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJsYXN0U2VtYW50aWNNYXBwaW5nIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsImN1cnJlbnRIYXNoTm9QYXJhbXMiLCJnZXRIYXNoQ2hhbmdlciIsInJvb3RFbnRpdHlOYW1lIiwiaXNSb290RHJhZnQiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIlJvd1ByZXNzIiwiaXNBY3RpdmVFbnRpdHkiLCJ1c2VDb250ZXh0IiwicmVzb2x2ZUNvbGxhYm9yYXRpb25QYXRoIiwiZm9ybWF0dGVkU2VtYW50aWNLZXlzIiwiJFByb3BlcnR5UGF0aCIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJmb3JtYXR0ZWRLZXlzIiwiY29tcGFyYXRpdmVQYXRoIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJUeXBlTmFtZSIsInNUYXJnZXRQYXRoIiwib0N1cnJlbnRDb250ZXh0Iiwic0N1cnJlbnRQYXRoIiwib1VzZUNvbnRleHQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic2hvdWxkUmVmcmVzaENvbnRleHQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicmVmcmVzaCIsImJQZXJzaXN0T1BTY3JvbGwiLCJzaG93UGxhY2Vob2xkZXIiLCJiU2hvd1BsYWNlaG9sZGVyIiwiQXBwU3RhdGVDaGFuZ2VkIiwiUmVzdG9yZUhpc3RvcnkiLCJpc0VkaXRTdGF0ZURpcnR5IiwiX3JlZnJlc2hCaW5kaW5nQ29udGV4dCIsIm9QYXJlbnRMaXN0QmluZGluZyIsIl9zZXRLZWVwQWxpdmUiLCJpc0NvbnRleHRVc2VkSW5QYWdlcyIsInNQYXRoIiwib1BhZ2VDb21wb25lbnQiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJvTWV0YU1vZGVsIiwiJCR1cGRhdGVHcm91cElkIiwiJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyIsIm9EcmFmdFJvb3QiLCJvRHJhZnROb2RlIiwiX2dldEtlZXBBbGl2ZUNvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwic01lc3NhZ2VzUGF0aCIsIiRzZWxlY3QiLCJvUHJldmlvdXNCaW5kaW5nIiwiZ2V0VXBkYXRlR3JvdXBJZCIsImRlc3Ryb3kiLCJvSGlkZGVuQmluZGluZyIsImJpbmRDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiQnVzeUxvY2tlciIsImxvY2siLCJvbkRhdGFSZWNlaXZlZCIsImdldEJvdW5kQ29udGV4dCIsInNFcnJvckRlc2NyaXB0aW9uIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJvUmVzb3VyY2VCdW5kbGUiLCJtZXNzYWdlSGFuZGxlciIsIm1QYXJhbXMiLCJzdGF0dXMiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJzaGVsbEJhY2siLCJpc0RhdGFSZWNlaXZlZEVycm9yIiwic2hvd01lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInNSb290Q29udGV4dFBhdGgiLCJhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMiLCJhUHJvcGVydHlQYXRocyIsIm9TaWRlRWZmZWN0cyIsInRhcmdldFByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdGllcyIsImdldEJpbmRpbmdQYXRocyIsIm9CaW5kaW5nIiwiYURlcGVuZGVudEJpbmRpbmdzIiwic1JlbGF0aXZlUGF0aCIsImdldENvbnRleHQiLCJzbGljZSIsImdldERlcGVuZGVudEJpbmRpbmdzIiwiaSIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwicmVkdWNlIiwidGFyZ2V0UHJvcGVydHkiLCJpbmRleCIsIm9QcmV2aW91c0NvbnRleHQiLCJvVGFyZ2V0Q29udHJvbCIsInNldEJpbmRpbmdDb250ZXh0IiwiaXNLZWVwQWxpdmUiLCJiS2VlcEFsaXZlIiwiZm5CZWZvcmVEZXN0cm95IiwiYlJlcXVlc3RNZXNzYWdlcyIsImVuZHNXaXRoIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzZXRLZWVwQWxpdmUiLCJrZXB0QWxpdmVTZWdtZW50cyIsImFkZGl0aW9ubmFsU2VnbWVudHMiLCJwb3AiLCJrZXB0QWxpdmVQYXRoIiwiam9pbiIsIm9LZWVwQWxpdmVDb250ZXh0IiwicmV2ZXJzZSIsImFkZGl0aW9ubmFsUGF0aCIsInN3aXRjaEZ1bGxTY3JlZW4iLCJvU291cmNlIiwib0ZDTEhlbHBlck1vZGVsIiwiYklzRnVsbFNjcmVlbiIsInNOZXh0TGF5b3V0IiwiZ2V0UmlnaHRtb3N0Q29udGV4dCIsIl9yb3V0aW5nIiwibGF5b3V0Iiwid2FybmluZyIsImNsb3NlQ29sdW1uIiwib1ZpZXdEYXRhIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsInNMYXlvdXQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwicHJldmlvdXNDb250ZXh0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgQWN0aXZpdHlTeW5jIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbywgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzLCBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuXG4vKipcbiAqIHtAbGluayBzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvbiBDb250cm9sbGVyIGV4dGVuc2lvbn1cbiAqXG4gKiBAc2luY2UgMS43NC4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsUm91dGluZ1wiKVxuY2xhc3MgSW50ZXJuYWxSb3V0aW5nIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX29WaWV3ITogRkVWaWV3O1xuXG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0cHJpdmF0ZSBfb1BhZ2VDb21wb25lbnQhOiBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4gfCBudWxsO1xuXG5cdHByaXZhdGUgX29Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRpbmdTZXJ2aWNlITogUm91dGluZ1NlcnZpY2U7XG5cblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBfZm5Sb3V0ZU1hdGNoZWRCb3VuZCE6IEZ1bmN0aW9uO1xuXG5cdHByb3RlY3RlZCBfb1RhcmdldEluZm9ybWF0aW9uOiBhbnk7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLl9vUm91dGluZ1NlcnZpY2UpIHtcblx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZS5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCkge1xuXHRcdHRoaXMuX29WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl9vVmlldykgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+O1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9ICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um91dGVyUHJveHkoKTtcblxuXHRcdGlmICghdGhpcy5fb0FwcENvbXBvbmVudCB8fCAhdGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRyb2xlciBleHRlbnNpb24gJ3NhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlc2lvbnMuSW50ZXJuYWxSb3V0aW5nXCIpO1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHRoaXMuX29BcHBDb21wb25lbnQgPT09IHRoaXMuX29QYWdlQ29tcG9uZW50KSB7XG5cdFx0XHQvLyBUaGUgdmlldyBpc24ndCBob3N0ZWQgaW4gYSBkZWRpY2F0ZWQgVUlDb21wb25lbnQsIGJ1dCBkaXJlY3RseSBpbiB0aGUgYXBwXG5cdFx0XHQvLyAtLT4ganVzdCBrZWVwIHRoZSB2aWV3XG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKVxuXHRcdFx0LnRoZW4oKG9Sb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlID0gb1JvdXRpbmdTZXJ2aWNlO1xuXHRcdFx0XHR0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kKTtcblx0XHRcdFx0dGhpcy5fb1RhcmdldEluZm9ybWF0aW9uID0gb1JvdXRpbmdTZXJ2aWNlLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKHRoaXMuX29QYWdlQ29tcG9uZW50IHx8IHRoaXMuX29WaWV3KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGNhbm5vdCB3b3JrIHdpdGhvdXQgYSAncm91dGluZ1NlcnZpY2UnIG9uIHRoZSBtYWluIEFwcENvbXBvbmVudFwiKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJlZCBldmVyeSB0aW1lIHRoaXMgY29udHJvbGxlciBpcyBhIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJvdXRlTWF0Y2hlZCgpIHtcblx0XHQvKiovXG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKSB7XG5cdFx0LyoqL1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkJlZm9yZUJpbmRpbmcoX2JpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge31cblxuXHRiZWZvcmVTZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLm9uQmVmb3JlQmluZGluZyhiaW5kaW5nQ29udGV4dCwgX21QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQmVmb3JlQmluZGluZykge1xuXHRcdFx0b1JvdXRpbmcub25CZWZvcmVCaW5kaW5nKGJpbmRpbmdDb250ZXh0IGFzIG9iamVjdCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLm9uQ29udGV4dEJvdW5kVG9WaWV3KGJpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdGFmdGVyU2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBfbVBhcmFtZXRlcnM/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5vbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dCwgX21QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQWZ0ZXJCaW5kaW5nKSB7XG5cdFx0XHRvUm91dGluZy5vbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dCBhcyBvYmplY3QpO1xuXHRcdH1cblx0fVxuXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIE1ldGhvZHMgdHJpZ2dlcmluZyBhIG5hdmlnYXRpb24gYWZ0ZXIgYSB1c2VyIGFjdGlvblxuXHQvLyAoZS5nLiBjbGljayBvbiBhIHRhYmxlIHJvdywgYnV0dG9uLCBldGMuLi4pXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc05hdmlnYXRpb25UYXJnZXROYW1lIE5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdGFyZ2V0XG5cdCAqIEBwYXJhbSBiUHJlc2VydmVIaXN0b3J5IFRydWUgdG8gZm9yY2UgdGhlIG5ldyBVUkwgdG8gYmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgYnJvd3NlciBoaXN0b3J5IChubyByZXBsYWNlKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdG5hdmlnYXRlVG9UYXJnZXQob0NvbnRleHQ6IGFueSwgc05hdmlnYXRpb25UYXJnZXROYW1lOiBzdHJpbmcsIGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25Db25maWd1cmF0aW9uID1cblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ICYmXG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiAmJlxuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oc05hdmlnYXRpb25UYXJnZXROYW1lKTtcblx0XHRpZiAob05hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsUm91dGUgPSBvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24uZGV0YWlsO1xuXHRcdFx0Y29uc3Qgc1JvdXRlTmFtZSA9IG9EZXRhaWxSb3V0ZS5yb3V0ZTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJNYXBwaW5nID0gb0RldGFpbFJvdXRlLnBhcmFtZXRlcnM7XG5cdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUbyhvQ29udGV4dCwgc1JvdXRlTmFtZSwgbVBhcmFtZXRlck1hcHBpbmcsIGJQcmVzZXJ2ZUhpc3RvcnkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUbyhvQ29udGV4dCwgbnVsbCwgbnVsbCwgYlByZXNlcnZlSGlzdG9yeSk7XG5cdFx0fVxuXHRcdHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgbmF2aWdhdGlvbiB0YXJnZXQgcm91dGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gW29QYXJhbWV0ZXJzXSBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZSwgb1BhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB0byAndHJ1ZScgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRpZiAocGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubW9kZSA9PT0gXCJBc3luY1wiKSB7XG5cdFx0XHRcdC8vIHRoZSBjb250ZXh0IGlzIGVpdGhlciBjcmVhdGVkIGFzeW5jIChQcm9taXNlKVxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGFjdGl2YXRlIHRoZSByb3V0ZU1hdGNoU3luY2hybyBvbiB0aGUgUm91dGVyUHJveHkgdG8gYXZvaWQgdGhhdFxuXHRcdFx0XHQvLyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIG5hdmlnYXRlVG9Db250ZXh0IGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0XHR0aGlzLl9vUm91dGVyUHJveHkuYWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKCk7XG5cblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycy5jcmVhdGVDb250ZXh0UHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKGFzeW5jIChjcmVhdGVkQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gb25jZSB0aGUgY29udGV4dCBpcyByZXR1cm5lZCB3ZSBuYXZpZ2F0ZSBpbnRvIGl0XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjcmVhdGVkQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRjaGVja05vSGFzaENoYW5nZTogcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZSxcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU6IHBhcmFtZXRlcnMuZWRpdGFibGUsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUZDTExldmVsOiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsLFxuXHRcdFx0XHRcdFx0XHRmb3JjZUZvY3VzOiBwYXJhbWV0ZXJzLmZvcmNlRm9jdXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2l0aCB0aGUgYXN5bmMgY29udGV4dFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPy5tb2RlICE9PSBcIkRlZmVycmVkXCIpIHtcblx0XHRcdFx0Ly8gTmF2aWdhdGUgdG8gYSBsaXN0IGJpbmRpbmcgbm90IHlldCBzdXBwb3J0ZWRcblx0XHRcdFx0dGhyb3cgXCJuYXZpZ2F0aW9uIHRvIGEgbGlzdCBiaW5kaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNhbGxFeHRlbnNpb24pIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblxuXHRcdFx0Ly8gU3RvcmluZyB0aGUgc2VsZWN0ZWQgY29udGV4dCB0byB1c2UgaXQgaW4gaW50ZXJuYWwgcm91dGUgbmF2aWdhdGlvbiBpZiBuZWNjZXNzYXJ5LlxuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVOYXYgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5yb3V0aW5nLm9uQmVmb3JlTmF2aWdhdGlvbih7IGJpbmRpbmdDb250ZXh0OiBjb250ZXh0IH0pO1xuXHRcdFx0aWYgKG92ZXJyaWRlTmF2KSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cGFyYW1ldGVycy5GQ0xMZXZlbCA9IHRoaXMuX2dldEZDTExldmVsKCk7XG5cblx0XHR0aGlzLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlc0ZvclByZXZpb3VzQ29udGV4dCgpO1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycywgdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKSwgdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFja3dhcmRzIGZyb20gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCBmcm9tXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPSAtMTtcblxuXHRcdHJldHVybiB0aGlzLm5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBmb3J3YXJkcyB0byBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdH1cblxuXHRcdHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGJhY2sgaW4gaGlzdG9yeSBpZiB0aGUgY3VycmVudCBoYXNoIGNvcnJlc3BvbmRzIHRvIGEgdHJhbnNpZW50IHN0YXRlLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlQmFja0Zyb21UcmFuc2llbnRTdGF0ZSgpIHtcblx0XHRjb25zdCBzSGFzaCA9IHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cblx0XHQvLyBpZiB0cmlnZ2VyZWQgd2hpbGUgbmF2aWdhdGluZyB0byAoLi4uKSwgd2UgbmVlZCB0byBuYXZpZ2F0ZSBiYWNrXG5cdFx0aWYgKHNIYXNoLmluY2x1ZGVzKFwiKC4uLilcIikpIHtcblx0XHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5uYXZCYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlVG9NZXNzYWdlUGFnZShzRXJyb3JNZXNzYWdlOiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdGlmICh0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwiaS1hY3Rpb249Y3JlYXRlXCIpIHx8IHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJpLWFjdGlvbj1hdXRvQ3JlYXRlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5Lm5hdlRvSGFzaCh0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0RGVmYXVsdENyZWF0ZUhhc2goKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1QYXJhbWV0ZXJzLkZDTExldmVsID0gdGhpcy5fZ2V0RkNMTGV2ZWwoKTtcblxuXHRcdFx0cmV0dXJuICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuZGlzcGxheUVycm9yUGFnZShzRXJyb3JNZXNzYWdlLCBtUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0YXRlIGlzIGltcGFjdGVkIGJ5IHRoZSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dCk7XG5cdH1cblxuXHRfaXNWaWV3UGFydE9mUm91dGUocm91dGVJbmZvcm1hdGlvbjogYW55KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYVRhcmdldHMgPSByb3V0ZUluZm9ybWF0aW9uPy50YXJnZXRzO1xuXHRcdGlmICghYVRhcmdldHMgfHwgYVRhcmdldHMuaW5kZXhPZih0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24udGFyZ2V0TmFtZSkgPT09IC0xKSB7XG5cdFx0XHQvLyBJZiB0aGUgdGFyZ2V0IGZvciB0aGlzIHZpZXcgaGFzIGEgdmlldyBsZXZlbCBncmVhdGVyIHRoYW4gdGhlIHJvdXRlIGxldmVsLCBpdCBtZWFucyB0aGlzIHZpZXcgY29tZXMgXCJhZnRlclwiIHRoZSByb3V0ZVxuXHRcdFx0Ly8gaW4gdGVybXMgb2YgbmF2aWdhdGlvbi5cblx0XHRcdC8vIEluIHN1Y2ggY2FzZSwgd2UgcmVtb3ZlIGl0cyBiaW5kaW5nIGNvbnRleHQsIHRvIGF2b2lkIHRoaXMgdmlldyB0byBoYXZlIGRhdGEgaWYgd2UgbmF2aWdhdGUgdG8gaXQgbGF0ZXIgb25cblx0XHRcdC8vIFRoaXMgaXMgZG9uZSBpbiBhIHRpbWVvdXQgdG8gYWxsb3cgZm9yIGZvY3Vzb3V0IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQgYmVmb3JlIHByb3Blcmx5IGluIGNvbGxhYm9yYXRpdmUgZHJhZnRcblx0XHRcdGlmICgodGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLnZpZXdMZXZlbCA/PyAwKSA+PSAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA/PyAwKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRpZiAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA9PT0gMCAmJiBBY3Rpdml0eVN5bmMuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgcm91dGUgaGFzIGxldmVsIDAgLS0+IHdlIG5lZWQgdG8gbGVhdmUgdGhlIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBhcyBubyBPUCBpcyBkaXNwbGF5ZWRcblx0XHRcdFx0XHRcdEFjdGl2aXR5U3luYy5kaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTtcblx0XHRcdFx0XHR0aGlzLl9zZXRCaW5kaW5nQ29udGV4dChudWxsKTsgLy8gVGhpcyBhbHNvIGNhbGwgc2V0S2VlcEFsaXZlKGZhbHNlKSBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0X2J1aWxkQmluZGluZ1BhdGgoXG5cdFx0cm91dGVBcmd1bWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG9iamVjdD4sXG5cdFx0YmluZGluZ1BhdHRlcm46IHN0cmluZyxcblx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvXG5cdCk6IHsgcGF0aDogc3RyaW5nOyBkZWZlcnJlZDogYm9vbGVhbiB9IHtcblx0XHRsZXQgcGF0aCA9IGJpbmRpbmdQYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRsZXQgZGVmZXJyZWQgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBpbiByb3V0ZUFyZ3VtZW50cykge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gcm91dGVBcmd1bWVudHNbc0tleV07XG5cblx0XHRcdGlmICh0eXBlb2Ygc1ZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1ZhbHVlID09PSBcIi4uLlwiICYmIGJpbmRpbmdQYXR0ZXJuLmluY2x1ZGVzKGB7JHtzS2V5fX1gKSkge1xuXHRcdFx0XHRkZWZlcnJlZCA9IHRydWU7XG5cdFx0XHRcdC8vIFNvbWV0aW1lcyBpbiBwcmVmZXJyZWRNb2RlID0gY3JlYXRlLCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24gaW4gYmFja2dyb3VuZCB3aGVuIHRoZVxuXHRcdFx0XHQvLyBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZyBzaG93cyB1cCwgc2V0dGluZyBiVGFyZ2V0RWRpdGFibGUgcGFzc2VzIGVkaXRhYmxlIGFzIHRydWVcblx0XHRcdFx0Ly8gdG8gb25CZWZvcmVCaW5kaW5nIGluIF9iaW5kVGFyZ2V0UGFnZSBmdW5jdGlvblxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iVGFyZ2V0RWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZShgeyR7c0tleX19YCwgc1ZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChyb3V0ZUFyZ3VtZW50c1tcIj9xdWVyeVwiXSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KT8uW1wiaS1hY3Rpb25cIl0/LmluY2x1ZGVzKFwiY3JlYXRlXCIpKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGUgYmluZGluZyBwYXRoIGlzIGFsd2F5cyBhYnNvbHV0ZVxuXHRcdGlmIChwYXRoICYmIHBhdGhbMF0gIT09IFwiL1wiKSB7XG5cdFx0XHRwYXRoID0gYC8ke3BhdGh9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBwYXRoLCBkZWZlcnJlZCB9O1xuXHR9XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gTWV0aG9kcyB0byBiaW5kIHRoZSBwYWdlIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogQnVpbGRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZnJvbSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLCBhbmQgYmluZCB0aGUgcGFnZSBhY2NvcmRpbmdseS5cblx0ICpcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogRXZlbnQ8eyByb3V0ZUluZm9ybWF0aW9uOiB1bmtub3duOyByb3V0ZVBhdHRlcm46IHN0cmluZzsgbmF2aWdhdGlvbkluZm86IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyB9Pik6IHZvaWQge1xuXHRcdC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgZm9yIHRoaXMgdmlldyBpcyBwYXJ0IG9mIHRoZSBldmVudCB0YXJnZXRzIChpLmUuIGlzIGEgdGFyZ2V0IGZvciB0aGUgY3VycmVudCByb3V0ZSkuXG5cdFx0Ly8gSWYgbm90LCB3ZSBkb24ndCBuZWVkIHRvIGJpbmQgaXQgLS0+IHJldHVyblxuXHRcdGlmICghdGhpcy5faXNWaWV3UGFydE9mUm91dGUob0V2ZW50LmdldFBhcmFtZXRlcihcInJvdXRlSW5mb3JtYXRpb25cIikpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0cmlldmUgdGhlIGJpbmRpbmcgY29udGV4dCBwYXR0ZXJuXG5cdFx0bGV0IGJpbmRpbmdQYXR0ZXJuO1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCAmJiB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dFBhdHRlcm4pIHtcblx0XHRcdGJpbmRpbmdQYXR0ZXJuID0gdGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuKCk7XG5cdFx0fVxuXHRcdGJpbmRpbmdQYXR0ZXJuID0gYmluZGluZ1BhdHRlcm4gfHwgdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLmNvbnRleHRQYXR0ZXJuO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXR0ZXJuID09PSBudWxsIHx8IGJpbmRpbmdQYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIERvbid0IGRvIHRoaXMgaWYgd2UgYWxyZWFkeSBnb3Qgc1RhcmdldCA9PSAnJywgd2hpY2ggaXMgYSB2YWxpZCB0YXJnZXQgcGF0dGVyblxuXHRcdFx0YmluZGluZ1BhdHRlcm4gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicm91dGVQYXR0ZXJuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgdGhlIHBhcmFtZXRlcnMgYnkgdGhlaXIgdmFsdWVzIGluIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0dGVyblxuXHRcdGNvbnN0IG1Bcmd1bWVudHMgPSAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyBhbnkpLmFyZ3VtZW50cztcblx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmF2aWdhdGlvbkluZm9cIik7XG5cdFx0Y29uc3QgeyBwYXRoLCBkZWZlcnJlZCB9ID0gdGhpcy5fYnVpbGRCaW5kaW5nUGF0aChtQXJndW1lbnRzLCBiaW5kaW5nUGF0dGVybiwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblxuXHRcdHRoaXMub25Sb3V0ZU1hdGNoZWQoKTtcblxuXHRcdGxldCBiaW5kUHJvbWlzZTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbCgpO1xuXHRcdGlmIChkZWZlcnJlZCkge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kRGVmZXJyZWQocGF0aCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbiAmJlxuXHRcdFx0dGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWVkaXRcIilcblx0XHQpIHtcblx0XHRcdGJpbmRQcm9taXNlID0gdGhpcy5fYmluZFBhZ2VGb3JFZGl0KHBhdGgsIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kUGFnZShwYXRoLCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXG5cdFx0YmluZFByb21pc2Vcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5vblJvdXRlTWF0Y2hlZEZpbmlzaGVkKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBkdXJpbmcgcGFnZSBiaW5kaW5nIFwiICsgZXJyb3IudG9TdHJpbmcoKSk7XG5cdFx0XHR9KTtcblxuXHRcdCh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudXBkYXRlVUlTdGF0ZUZvclZpZXcodGhpcy5fb1ZpZXcsIHRoaXMuX2dldEZDTExldmVsKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmVycmVkIGJpbmRpbmcgKGR1cmluZyBvYmplY3QgY3JlYXRpb24pLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgZGVmZmVyZWQgY29udGV4dFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX2JpbmREZWZlcnJlZCh0YXJnZXRQYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG51bGwsIHsgZWRpdGFibGU6IG5hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSB9KTtcblxuXHRcdGlmICghbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgfHwgbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMubW9kZSA9PT0gXCJEZWZlcnJlZFwiKSB7XG5cdFx0XHQvLyBlaXRoZXIgdGhlIGNvbnRleHQgc2hhbGwgYmUgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHBhZ2UgKGRlZmVycmVkIENvbnRleHQpIG9yIGl0IHNoYWxsXG5cdFx0XHQvLyBiZSBjcmVhdGVkIGFzeW5jIGJ1dCB0aGUgdXNlciByZWZyZXNoZWQgdGhlIHBhZ2UgLyBib29rbWFya2VkIHRoaXMgVVJMXG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHkgdGhlIHRhcmdldCBjb21wb25lbnQgY3JlYXRlcyB0aGlzIGRvY3VtZW50IGJ1dCB3ZSBzaGFsbCBtb3ZlIHRoaXMgdG9cblx0XHRcdC8vIGEgY2VudHJhbCBwbGFjZVxuXHRcdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50ICYmIHRoaXMuX29QYWdlQ29tcG9uZW50LmNyZWF0ZURlZmVycmVkQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5jcmVhdGVEZWZlcnJlZENvbnRleHQoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LnBhcmVudENvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LmRhdGEsXG5cdFx0XHRcdFx0ISFuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3VycmVudEJpbmRpbmdDb250ZXh0ID0gdGhpcy5fZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoY3VycmVudEJpbmRpbmdDb250ZXh0Py5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHQvLyBGb3Igbm93IHJlbW92ZSB0aGUgcGVuZGluZyBjaGFuZ2VzIHRvIGF2b2lkIHRoZSBtb2RlbCByYWlzZXMgZXJyb3JzIGFuZCB0aGUgb2JqZWN0IHBhZ2UgaXMgYXQgbGVhc3QgYm91bmRcblx0XHRcdC8vIElkZWFsbHkgdGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvclxuXHRcdFx0Y3VycmVudEJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyByZW1vdmUgdGhlIGNvbnRleHQgdG8gYXZvaWQgc2hvd2luZyBvbGQgZGF0YVxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXG5cdFx0dGhpcy5hZnRlclNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBmcm9tIGEgcGF0aCBpbiBjYXNlIHRoZSBhcHAgaXMgc3RhcnRlZCBpbiB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdC5cblx0ICpcblx0ICogSWYgdGhlIGNvbnRleHQgcG9pbnRzIHRvIGFuIGFjdGl2ZSBlbnRpdHksIGl0IGlzIGRpcmVjdGx5IHB1dCBpbnRvIGRyYWZ0IHVzaW5nIHRoZSBFZGl0Rmxvdy5cblx0ICpcblx0ICogQHBhcmFtIHRhcmdldFBhdGhcblx0ICogQHBhcmFtIG1vZGVsXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgb25jZSB0aGUgYmluZGluZyBoYXMgYmVlbiBzZXQgb24gdGhlIHBhZ2Vcblx0ICovXG5cdGFzeW5jIF9iaW5kUGFnZUZvckVkaXQodGFyZ2V0UGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8dm9pZCB8IENvbnRleHQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsUGF0aDogc3RyaW5nID0gYXdhaXQgdGhpcy5yZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdFx0aWYgKHRlY2huaWNhbFBhdGguaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpKSB7XG5cdFx0XHRcdC8vIGNyZWF0ZSBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB0aGlzLl9jcmVhdGVDb250ZXh0KHRlY2huaWNhbFBhdGgsIG1vZGVsKTtcblx0XHRcdFx0dGhpcy5fYmluZFBhZ2VUb0NvbnRleHQoYWN0aXZlQ29udGV4dCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0Ly8gSXNBY3RpdmVFbnRpdHkgbmVlZHMgdG8gYmUgYXZhaWxhYmxlIGZvciB0aGUgZWRpdGluZyB0byB3b3JrXG5cdFx0XHRcdGF3YWl0IGFjdGl2ZUNvbnRleHQucmVxdWVzdFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRcdC8vIGVkaXQgZG9jdW1lbnRcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQoYWN0aXZlQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fYmluZFBhZ2VUb1BhdGgodGVjaG5pY2FsUGF0aCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXG5cdFx0XHR0aGlzLm5hdmlnYXRlVG9NZXNzYWdlUGFnZShyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUlwiKSwge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgY29udGV4dFxuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVycyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIG9uY2UgdGhlIGJpbmRpbmcgaGFzIGJlZW4gc2V0IG9uIHRoZSBwYWdlXG5cdCAqL1xuXHRfYmluZFBhZ2UodGFyZ2V0UGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbykge1xuXHRcdGlmICh0YXJnZXRQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG51bGwsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycykpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVQYXRoKHRhcmdldFBhdGgsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycylcblx0XHRcdC50aGVuKCh0ZWNobmljYWxQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpcy5fYmluZFBhZ2VUb1BhdGgodGVjaG5pY2FsUGF0aCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gRXJyb3IgaGFuZGxpbmcgZm9yIGVycm9uZW91cyBtZXRhZGF0YSByZXF1ZXN0XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9NZXNzYWdlUGFnZShyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUlwiKSwge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmaWx0ZXIgdG8gcmV0cmlldmUgYSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8gYSBzZW1hbnRpYyBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2VtYW50aWNQYXRoIFRoZSBzZW1hbnRpYyBvciB0ZWNobmljYWwgcGF0aFxuXHQgKiBAcGFyYW0gc2VtYW50aWNLZXlzIFRoZSBzZW1hbnRpYyBvciB0ZWNobmljYWwga2V5cyBmb3IgdGhlIHBhdGhcblx0ICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgaW5zdGFuY2Ugb2YgdGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyXG5cdCAqL1xuXHRjcmVhdGVGaWx0ZXJGcm9tUGF0aChzZW1hbnRpY1BhdGg6IHN0cmluZywgc2VtYW50aWNLZXlzOiBzdHJpbmdbXSwgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpbHRlciB8IG51bGwge1xuXHRcdGNvbnN0IHVucXVvdGVBbmREZWNvZGUgPSBmdW5jdGlvbiAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRpZiAodmFsdWUuaW5kZXhPZihcIidcIikgPT09IDAgJiYgdmFsdWUubGFzdEluZGV4T2YoXCInXCIpID09PSB2YWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSB0aGUgcXVvdGVzIGZyb20gdGhlIHZhbHVlIGFuZCBkZWNvZGUgc3BlY2lhbCBjaGFyc1xuXHRcdFx0XHR2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH07XG5cdFx0Y29uc3Qga2V5VmFsdWVzID0gc2VtYW50aWNQYXRoLnN1YnN0cmluZyhzZW1hbnRpY1BhdGguaW5kZXhPZihcIihcIikgKyAxLCBzZW1hbnRpY1BhdGgubGVuZ3RoIC0gMSkuc3BsaXQoXCIsXCIpO1xuXG5cdFx0bGV0IGZpbmFsS2V5cyA9IHNlbWFudGljS2V5cztcblx0XHRsZXQgZmluYWxLZXlWYWx1ZXMgPSBrZXlWYWx1ZXM7XG5cdFx0Ly8gSWYgd2UgaGF2ZSB0ZWNobmljYWwga2V5cywgSXNBY3RpdmVFbnRpdHkgd2lsbCBiZSBwcmVzZW50LiBXZSBuZWVkIHRvIHJlbW92ZSBpdCBhcyB3ZSdyZSBhbHJlYWR5IGFkZGluZyB0aGVtIGF0IHRoZSBlbmQuXG5cdFx0aWYgKHNlbWFudGljS2V5cy5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0XHRmaW5hbEtleXMgPSBzZW1hbnRpY0tleXMuZmlsdGVyKChzaW5nbGVLZXkpID0+ICFzaW5nbGVLZXkuaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eVwiKSk7XG5cdFx0XHRmaW5hbEtleVZhbHVlcyA9IGtleVZhbHVlcy5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnN0YXJ0c1dpdGgoXCJJc0FjdGl2ZUVudGl0eVwiKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpbmFsS2V5cy5sZW5ndGggIT0gZmluYWxLZXlWYWx1ZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCk7XG5cdFx0bGV0IGZpbHRlcnM6IEZpbHRlcltdO1xuXHRcdGlmIChmaW5hbEtleXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgdGVjaG5pY2FsIGtleSwgdGhlIGVxdWFsIGlzIHByZXNlbnQgYmVjYXVzZSB0aGVyZSdzIGF0IGxlYXN0IDIgcGFyYW1ldGVycywgYSB0ZWNobmljYWwga2V5IGFuZCBJc0FjdGl2ZUVudGl0eVxuXHRcdFx0aWYgKGZpbmFsS2V5VmFsdWVzWzBdLmluZGV4T2YoXCI9XCIpID4gMCkge1xuXHRcdFx0XHRjb25zdCBrZXlQYXJ0ID0gZmluYWxLZXlWYWx1ZXNbMF0uc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRmaW5hbEtleVZhbHVlc1swXSA9IGtleVBhcnRbMV07XG5cdFx0XHR9XG5cdFx0XHQvLyBUYWtlIHRoZSBmaXJzdCBrZXkgdmFsdWVcblx0XHRcdGNvbnN0IGtleVZhbHVlID0gdW5xdW90ZUFuZERlY29kZShmaW5hbEtleVZhbHVlc1swXSk7XG5cdFx0XHRmaWx0ZXJzID0gW1xuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRwYXRoOiBmaW5hbEtleXNbMF0sXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMToga2V5VmFsdWUsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbUtleVZhbHVlczogYW55ID0ge307XG5cdFx0XHQvLyBDcmVhdGUgYSBtYXAgb2YgYWxsIGtleSB2YWx1ZXNcblx0XHRcdGZpbmFsS2V5VmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXlBc3NpZ25tZW50OiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3QgYVBhcnRzID0gc0tleUFzc2lnbm1lbnQuc3BsaXQoXCI9XCIpLFxuXHRcdFx0XHRcdGtleVZhbHVlID0gdW5xdW90ZUFuZERlY29kZShhUGFydHNbMV0pO1xuXG5cdFx0XHRcdG1LZXlWYWx1ZXNbYVBhcnRzWzBdXSA9IGtleVZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmYWlsZWQgPSBmYWxzZTtcblx0XHRcdGZpbHRlcnMgPSBmaW5hbEtleXMubWFwKGZ1bmN0aW9uIChzZW1hbnRpY0tleSkge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBzZW1hbnRpY0tleSxcblx0XHRcdFx0XHR2YWx1ZSA9IG1LZXlWYWx1ZXNba2V5XTtcblxuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdHBhdGg6IGtleSxcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdHZhbHVlMTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFpbGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlhYXCJcblx0XHRcdFx0XHR9KTsgLy8gd2lsbCBiZSBpZ25vcmVkIGFueXdheSBzaW5jZSB3ZSByZXR1cm4gYWZ0ZXJcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChmYWlsZWQpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGEgZHJhZnQgZmlsdGVyIHRvIG1ha2Ugc3VyZSB3ZSB0YWtlIHRoZSBkcmFmdCBlbnRpdHkgaWYgdGhlcmUgaXMgb25lXG5cdFx0Ly8gT3IgdGhlIGFjdGl2ZSBlbnRpdHkgb3RoZXJ3aXNlXG5cdFx0Y29uc3QgZHJhZnRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBmYWxzZSksIG5ldyBGaWx0ZXIoXCJTaWJsaW5nRW50aXR5L0lzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgbnVsbCldLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHRcdGZpbHRlcnMucHVzaChkcmFmdEZpbHRlcik7XG5cblx0XHRyZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJzLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHBhdGggd2l0aCBzZW1hbnRpYyBrZXlzIHRvIGEgcGF0aCB3aXRoIHRlY2huaWNhbCBrZXlzLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aFdpdGhQYXJhbWV0ZXJzIFRoZSBwYXRoIHdpdGggc2VtYW50aWMga2V5c1xuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIGZvciB0aGUgcGF0aFxuXHQgKiBAcGFyYW0ga2V5cyBUaGUgc2VtYW50aWMgb3IgdGVjaG5pY2FsIGtleXMgZm9yIHRoZSBwYXRoXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBjb250YWluaW5nIHRoZSBwYXRoIHdpdGggdGVjaG5pY2FsIGtleXMgaWYgcGF0aFdpdGhQYXJhbWV0ZXJzIGNvdWxkIGJlIGludGVycHJldGVkIGFzIGEgdGVjaG5pY2FsIHBhdGgsIG51bGwgb3RoZXJ3aXNlXG5cdCAqL1xuXHRhc3luYyBnZXRUZWNobmljYWxQYXRoRnJvbVBhdGgocGF0aFdpdGhQYXJhbWV0ZXJzOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBrZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBlbnRpdHlTZXRQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHBhdGhXaXRoUGFyYW1ldGVycykuZ2V0UGF0aCgpO1xuXG5cdFx0aWYgKCFrZXlzIHx8IGtleXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBObyBzZW1hbnRpYy90ZWNobmljYWwga2V5c1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gQ3JlYXRlIGEgc2V0IG9mIGZpbHRlcnMgY29ycmVzcG9uZGluZyB0byBhbGwga2V5c1xuXHRcdGNvbnN0IGZpbHRlciA9IHRoaXMuY3JlYXRlRmlsdGVyRnJvbVBhdGgocGF0aFdpdGhQYXJhbWV0ZXJzLCBrZXlzLCBtZXRhTW9kZWwpO1xuXHRcdGlmIChmaWx0ZXIgPT09IG51bGwpIHtcblx0XHRcdC8vIENvdWxkbid0IGludGVycHJldCB0aGUgcGF0aCBhcyBhIHNlbWFudGljIG9uZVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCB0aGUgY29ycmVzcG9uZGluZyBvYmplY3Rcblx0XHRpZiAoIWVudGl0eVNldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke2VudGl0eVNldFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBtb2RlbC5iaW5kTGlzdChlbnRpdHlTZXRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVyLCB7XG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCJcblx0XHR9KTtcblxuXHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdGlmIChjb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIGRhdGEgY291bGQgYmUgbG9hZGVkXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gcGF0aFRvUmVwbGFjZVdpdGggVGhlIHBhdGggdG8gdGhlIG5ldyBjb250ZXh0XG5cdCAqIEBwYXJhbSBjb250ZXh0VG9SZW1vdmUgVGhlIGluaXRpYWwgY29udGV4dCB0aGF0IGlzIGdvaW5nIHRvIGJlIHJlcGxhY2VkXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoQ29udGV4dChtb2RlbDogT0RhdGFNb2RlbCwgcGF0aFRvUmVwbGFjZVdpdGg6IHN0cmluZywgY29udGV4dFRvUmVtb3ZlOiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAocm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0VG9SZXBsYWNlV2l0aCA9IG1vZGVsLmdldEtlZXBBbGl2ZUNvbnRleHQocGF0aFRvUmVwbGFjZVdpdGgpO1xuXHRcdFx0Y29udGV4dFRvUmVtb3ZlLnJlcGxhY2VXaXRoKGNvbnRleHRUb1JlcGxhY2VXaXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHBhdGggaXMgYSByb290IGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0ZXN0XG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgbW9kZWxcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGEgcm9vdCBwYXRoXG5cdCAqL1xuXHRjaGVja0RyYWZ0QXZhaWxhYmlsaXR5KHBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hdGNoZXMgPSAvXlsvXT8oXFx3KylcXChbXi9dK1xcKSQvLmV4ZWMocGF0aCk7XG5cdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIEdldCB0aGUgZW50aXR5U2V0IG5hbWVcblx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gYC8ke21hdGNoZXNbMV19YDtcblx0XHQvLyBDaGVjayB0aGUgZW50aXR5IHNldCBzdXBwb3J0cyBkcmFmdFxuXHRcdGNvbnN0IGRyYWZ0Um9vdCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApO1xuXHRcdHJldHVybiBkcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGEgcGF0aCB0byBuYXZpZ2F0ZSB0byBmcm9tIGEgcGF0aCB3aXRoIFNlbWFudGljS2V5cyBvciB0ZWNobmljYWwga2V5cy5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhUb1Jlc29sdmUgVGhlIHBhdGggdG8gYmUgdHJhbnNmb3JtZWRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgcGFyYW1ldGVyIG9mIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEByZXR1cm5zIFN0cmluZyBwcm9taXNlIGZvciB0aGUgbmV3IHBhdGguIElmIHBhdGhUb1Jlc29sdmUgY291bGRuJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzZW1hbnRpYyBwYXRoLCBpdCBpcyByZXR1cm5lZCBhcyBpcy5cblx0ICovXG5cdGFzeW5jIHJlc29sdmVQYXRoKHBhdGhUb1Jlc29sdmU6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXI6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbGFzdFNlbWFudGljTWFwcGluZyA9IHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk7XG5cdFx0bGV0IGN1cnJlbnRIYXNoTm9QYXJhbXMgPSB0aGlzLl9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdGlmIChjdXJyZW50SGFzaE5vUGFyYW1zPy5sYXN0SW5kZXhPZihcIi9cIikgPT09IGN1cnJlbnRIYXNoTm9QYXJhbXM/Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vIFJlbW92ZSB0cmFpbGluZyAnLydcblx0XHRcdGN1cnJlbnRIYXNoTm9QYXJhbXMgPSBjdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBjdXJyZW50SGFzaE5vUGFyYW1zLmxlbmd0aCAtIDEpO1xuXHRcdH1cblxuXHRcdGxldCByb290RW50aXR5TmFtZSA9IGN1cnJlbnRIYXNoTm9QYXJhbXM/LnN1YnN0cmluZygwLCBjdXJyZW50SGFzaE5vUGFyYW1zLmluZGV4T2YoXCIoXCIpKTtcblx0XHRpZiAocm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdHJvb3RFbnRpdHlOYW1lID0gcm9vdEVudGl0eU5hbWUuc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRjb25zdCBpc1Jvb3REcmFmdCA9IHRoaXMuY2hlY2tEcmFmdEF2YWlsYWJpbGl0eShjdXJyZW50SGFzaE5vUGFyYW1zLCBtZXRhTW9kZWwpLFxuXHRcdFx0c2VtYW50aWNLZXlzID0gaXNSb290RHJhZnRcblx0XHRcdFx0PyAoU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgcm9vdEVudGl0eU5hbWUpIGFzIHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSlcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKTtcblxuXHRcdC8qKlxuXHRcdCAqIElmIHRoZSBlbnRpdHkgaXMgZHJhZnQgZW5hYmxlZCwgd2UncmUgaW4gYSBjb2xsYWJvcmF0aW9uIGFwcGxpY2F0aW9uLCBhbmQgd2UncmUgbmF2aWdhdGluZyB0byBhIGRyYWZ0IGZyb20gYSBsaXN0LCB3ZSdyZSB0cmVhdGluZyBpdCBhcyBhIG5ldyBwYXRoLlxuXHRcdCAqIFdlIHdhbnQgdG8gY2hlY2sgaWYgdGhlIGRyYWZ0IGV4aXN0cyBmaXJzdCwgdGhlbiB3ZSBuYXZpZ2F0ZSBvbiBpdCBpZiBpdCBkb2VzIGV4aXN0LCBvdGhlcndpc2Ugd2UgbmF2aWdhdGUgdG8gdGhlIHNhdmVkIHZlcnNpb24uXG5cdFx0ICovXG5cdFx0aWYgKGlzUm9vdERyYWZ0ICYmIGlzQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgbmF2aWdhdGlvblBhcmFtZXRlci5yZWFzb24gPT09IE5hdmlnYXRpb25SZWFzb24uUm93UHJlc3MpIHtcblx0XHRcdGNvbnN0IGlzQWN0aXZlRW50aXR5ID0gbmF2aWdhdGlvblBhcmFtZXRlci51c2VDb250ZXh0Py5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID8/IHRydWU7XG5cdFx0XHRpZiAoIWlzQWN0aXZlRW50aXR5KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDb2xsYWJvcmF0aW9uUGF0aChwYXRoVG9SZXNvbHZlLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlciwgc2VtYW50aWNLZXlzLCByb290RW50aXR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgaXMgdGhlICdub3JtYWwnIHByb2Nlc3MuXG5cdFx0ICogSWYgd2UgZG9uJ3QgaGF2ZSBzZW1hbnRpYyBrZXlzLCB0aGUgcGF0aCB3ZSBoYXZlIGlzIHRlY2huaWNhbCBhbmQgY2FuIGJlIHVzZWQgYXMgaXMuXG5cdFx0ICogSWYgdGhlIHBhdGggdG8gcmVzb2x2ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2VtYW50aWMgcGF0aCwgdGhlbiB3ZSBrbm93IGlzIGhhcyBiZWVuIHJlc29sdmVkIHByZXZpb3VzbHkgYW5kIHdlIGNhbiByZXR1cm4gdGhlIHRlY2huaWNhbCBwYXRoXG5cdFx0ICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSB0ZWNobmljYWwgcGF0aCwgdG8gc2V0IHVwIHRoZSBzZW1hbnRpYyBtYXBwaW5nIChpZiBpdCdzIGJlZW4gcmVzb2x2ZWQpLlxuXHRcdCAqL1xuXHRcdGlmIChzZW1hbnRpY0tleXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHBhdGhUb1Jlc29sdmU7XG5cdFx0fVxuXHRcdGlmIChsYXN0U2VtYW50aWNNYXBwaW5nPy5zZW1hbnRpY1BhdGggPT09IHBhdGhUb1Jlc29sdmUpIHtcblx0XHRcdC8vIFRoaXMgc2VtYW50aWMgcGF0aCBoYXMgYmVlbiByZXNvbHZlZCBwcmV2aW91c2x5XG5cdFx0XHRyZXR1cm4gbGFzdFNlbWFudGljTWFwcGluZy50ZWNobmljYWxQYXRoO1xuXHRcdH1cblx0XHRjb25zdCBmb3JtYXR0ZWRTZW1hbnRpY0tleXMgPSBzZW1hbnRpY0tleXMubWFwKChzaW5nbGVLZXkpID0+IHNpbmdsZUtleS4kUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIFdlIG5lZWQgcmVzb2x2ZSB0aGUgc2VtYW50aWMgcGF0aCB0byBnZXQgdGhlIHRlY2huaWNhbCBrZXlzXG5cdFx0Y29uc3QgdGVjaG5pY2FsUGF0aCA9IGF3YWl0IHRoaXMuZ2V0VGVjaG5pY2FsUGF0aEZyb21QYXRoKGN1cnJlbnRIYXNoTm9QYXJhbXMsIG1vZGVsLCBmb3JtYXR0ZWRTZW1hbnRpY0tleXMpO1xuXG5cdFx0aWYgKHRlY2huaWNhbFBhdGggJiYgdGVjaG5pY2FsUGF0aCAhPT0gcGF0aFRvUmVzb2x2ZSkge1xuXHRcdFx0Ly8gVGhlIHNlbWFudGljIHBhdGggd2FzIHJlc29sdmVkIChvdGhlcndpc2Uga2VlcCB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRhcmdldClcblx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZS5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHtcblx0XHRcdFx0dGVjaG5pY2FsUGF0aDogdGVjaG5pY2FsUGF0aCxcblx0XHRcdFx0c2VtYW50aWNQYXRoOiBwYXRoVG9SZXNvbHZlXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0ZWNobmljYWxQYXRoO1xuXHRcdH1cblx0XHRyZXR1cm4gcGF0aFRvUmVzb2x2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmFsdWF0ZSB0aGUgcGF0aCB0byBuYXZpZ2F0ZSB3aGVuIHdlJ3JlIGluIGEgY29sbGFib3JhdGlvbiBhcHBsaWNhdGlvbiBhbmQgbmF2aWdhdGluZyB0byBhIGRyYWZ0LlxuXHQgKiBJZiB0aGUgZHJhZnQgaGFzIGJlZW4gZGlzY2FyZGVkLCB3ZSBjaGFuZ2UgdGhlIHBhdGggdG8gdGhlIHNpYmxpbmcgZWxlbWVudCBhc3NvY2lhdGVkLCBvdGhlcndpc2Ugd2Uga2VlcCB0aGUgc2FtZSBwYXRoLlxuXHQgKiBXZSdyZSBub3QgZG9pbmcgaXQgb3V0c2lkZSBvZiBjb2xsYWJvcmF0aW9uIGFzIGl0J3MgYWRkaW5nIGEgcmVxdWVzdCBkdXJpbmcgbmF2aWdhdGlvbiFcblx0ICpcblx0ICogQHBhcmFtIHBhdGhUb1Jlc29sdmUgVGhlIHBhdGggd2UncmUgY2hlY2tpbmcuIElmIHRoZSBkcmFmdCBleGlzdHMsIHdlIHJldHVybiBpdCBhcyBpcywgb3RoZXJ3aXNlIHdlIHJldHVybiB0aGUgc2libGluZyBlbGVtZW50IGFzc29jaWF0ZWRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBvRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgcGFyYW1ldGVyIG9mIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBzZW1hbnRpY0tleXMgVGhlIHNlbWFudGljIGtleXMgaWYgd2UgaGF2ZSBzZW1hbnRpYyBuYXZpZ2F0aW9uLCBvdGhlcndpc2UgZmFsc2Vcblx0ICogQHBhcmFtIHJvb3RFbnRpdHlOYW1lIE5hbWUgb2YgdGhlIHJvb3QgZW50aXR5XG5cdCAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIG5hdmlnYXRlIHRvXG5cdCAqL1xuXHRhc3luYyByZXNvbHZlQ29sbGFib3JhdGlvblBhdGgoXG5cdFx0cGF0aFRvUmVzb2x2ZTogc3RyaW5nLFxuXHRcdG1vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG5hdmlnYXRpb25QYXJhbWV0ZXI6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyxcblx0XHRzZW1hbnRpY0tleXM6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSB8IHVuZGVmaW5lZCxcblx0XHRyb290RW50aXR5TmFtZTogc3RyaW5nXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgbGFzdFNlbWFudGljTWFwcGluZyA9IHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgY3VycmVudEhhc2hOb1BhcmFtcyA9IHRoaXMuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGxldCBmb3JtYXR0ZWRLZXlzOiBzdHJpbmdbXTtcblx0XHRjb25zdCBjb21wYXJhdGl2ZVBhdGggPSBsYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID8/IHBhdGhUb1Jlc29sdmU7XG5cdFx0aWYgKHNlbWFudGljS2V5cykge1xuXHRcdFx0Zm9ybWF0dGVkS2V5cyA9IHNlbWFudGljS2V5cy5tYXAoKHNpbmdsZUtleSkgPT4gc2luZ2xlS2V5LiRQcm9wZXJ0eVBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXR0ZWRLZXlzID0gbWV0YU1vZGVsLmdldE9iamVjdChgLyR7cm9vdEVudGl0eU5hbWV9LyRUeXBlLyRLZXlgKTtcblx0XHR9XG5cblx0XHRjb25zdCB0ZWNobmljYWxQYXRoID0gYXdhaXQgdGhpcy5nZXRUZWNobmljYWxQYXRoRnJvbVBhdGgoY3VycmVudEhhc2hOb1BhcmFtcywgbW9kZWwsIGZvcm1hdHRlZEtleXMpO1xuXHRcdGlmICh0ZWNobmljYWxQYXRoID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gcGF0aFRvUmVzb2x2ZTtcblx0XHR9XG5cdFx0Ly8gQ29tcGFyaW5nIHBhdGggdGhhdCB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHdpdGggdGhlIG9uZSB3ZSBoYXZlLiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIGl0IG1lYW5zIHRoZSBkcmFmdCBkb2Vzbid0IGV4aXN0LlxuXHRcdGlmICh0ZWNobmljYWxQYXRoICE9PSBjb21wYXJhdGl2ZVBhdGggJiYgbmF2aWdhdGlvblBhcmFtZXRlci51c2VDb250ZXh0KSB7XG5cdFx0XHRpZiAobGFzdFNlbWFudGljTWFwcGluZykge1xuXHRcdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2Uuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7XG5cdFx0XHRcdFx0dGVjaG5pY2FsUGF0aDogdGVjaG5pY2FsUGF0aCxcblx0XHRcdFx0XHRzZW1hbnRpY1BhdGg6IHBhdGhUb1Jlc29sdmVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyLnJlZGlyZWN0ZWRUb05vbkRyYWZ0ID1cblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChgLyR7cm9vdEVudGl0eU5hbWV9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvYCk/LlR5cGVOYW1lID8/IHJvb3RFbnRpdHlOYW1lO1xuXHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoQ29udGV4dChtb2RlbCwgdGVjaG5pY2FsUGF0aCwgbmF2aWdhdGlvblBhcmFtZXRlci51c2VDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRlY2huaWNhbFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1RhcmdldFBhdGggVGhlIHBhdGggdG8gYnVpbGQgdGhlIGNvbnRleHQgKHRoaXMgaXMgYSBwYXRoIGluIHRoZSBtb2RlbCwgc28gb25seSB0ZWNobmljYWwga2V5cyBhcmUgYWxsb3dlZCkuXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb1BhdGgoc1RhcmdldFBhdGg6IHN0cmluZywgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbykge1xuXHRcdGNvbnN0IG9DdXJyZW50Q29udGV4dCA9IHRoaXMuX2dldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRzQ3VycmVudFBhdGggPSBvQ3VycmVudENvbnRleHQgJiYgb0N1cnJlbnRDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Vc2VDb250ZXh0ID0gb05hdmlnYXRpb25QYXJhbWV0ZXJzLnVzZUNvbnRleHQgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblxuXHRcdC8vIFdlIHNldCB0aGUgYmluZGluZyBjb250ZXh0IG9ubHkgaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHQvLyBvciBpZiB3ZSBoYXZlIGEgY29udGV4dCBhbHJlYWR5IHNlbGVjdGVkXG5cdFx0aWYgKG9Vc2VDb250ZXh0ICYmIG9Vc2VDb250ZXh0LmdldFBhdGgoKSA9PT0gc1RhcmdldFBhdGgpIHtcblx0XHRcdGlmIChvVXNlQ29udGV4dCAhPT0gb0N1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGxldCBzaG91bGRSZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHQvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNvbnRleHQgdG8gYmUgdXNlZCwgYW5kIGl0J3Mgbm90IHRoZSBjdXJyZW50IG9uZVxuXG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSdyZSByZXVzaW5nIGEgY29udGV4dCBmcm9tIGEgdGFibGUgKHRocm91Z2ggbmF2aWdhdGlvbiksIHdlIHJlZnJlc2ggaXQgdG8gYXZvaWQgb3V0ZGF0ZWQgZGF0YVxuXHRcdFx0XHQvLyBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBiZSBjb21wbGV0ZWQgKHJlcXVlc3RSZWZyZXNoKSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBnb2VzIGludG8gdGhlIHNhbWVcblx0XHRcdFx0Ly8gYmF0Y2ggYXMgdGhlIG9uZXMgZnJvbSBjb250cm9scyBpbiB0aGUgcGFnZS5cblx0XHRcdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiYgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG9Vc2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdFx0aWYgKCFvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRBY3Rpdml0eVN5bmMuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpIHx8XG5cdFx0XHRcdFx0XHQoTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIG9Vc2VDb250ZXh0LmdldFBhdGgoKSkgJiZcblx0XHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgYnV0IHdlJ3JlIGluIGNvbGxhYm9yYXRpb24gZHJhZnQsIHdlIGZvcmNlIHRoZSByZWZyZXNoIChkaXNjYXJkaW5nIHBlbmRpbmcgY2hhbmdlcykgYXMgd2UgbmVlZCB0byBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbi5cblx0XHRcdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBmcm9tIExSIHRvIE9QLCB0aGUgdmlldyBpcyBub3QgY29ubmVjdGVkIHlldCAtLT4gY2hlY2sgaWYgd2UncmUgaW4gZHJhZnQgd2l0aCBjb2xsYWJvcmF0aW9uIGZyb20gdGhlIG1ldGFtb2RlbFxuXHRcdFx0XHRcdFx0b1VzZUNvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9iaW5kUGFnZVRvQ29udGV4dChvVXNlQ29udGV4dCwgb01vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoc2hvdWxkUmVmcmVzaENvbnRleHQpIHtcblx0XHRcdFx0XHRvVXNlQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRoZSBzYW1lIGNvbnRleHQgYnV0IGFuIGVkaXRmbG93IGFjdGlvbiBoYXBwZW5lZCAoZS5nLiBDYW5jZWxEb2N1bWVudCBpbiBzdGlja3kgbW9kZSlcblx0XHRcdFx0Ly8gLS0+IFdlIG5lZWQgdG8gY2FsbCBvbkJlZm9yZS9BZnRlckJpbmRpbmcgdG8gcmVmcmVzaCB0aGUgb2JqZWN0IHBhZ2UgcHJvcGVybHlcblx0XHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwge1xuXHRcdFx0XHRcdGVkaXRhYmxlOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlLFxuXHRcdFx0XHRcdGxpc3RCaW5kaW5nOiBvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCksXG5cdFx0XHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0cmVhc29uOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uLFxuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwgeyByZWRpcmVjdGVkVG9Ob25EcmFmdDogb05hdmlnYXRpb25QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNDdXJyZW50UGF0aCAhPT0gc1RhcmdldFBhdGggfHwgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29udGV4dCBmb3IgaXRzIHBhdGhcblx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KHRoaXMuX2NyZWF0ZUNvbnRleHQoc1RhcmdldFBhdGgsIG9Nb2RlbCksIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5BcHBTdGF0ZUNoYW5nZWQgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uUmVzdG9yZUhpc3RvcnkgJiZcblx0XHRcdEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkgJiZcblx0XHRcdCFvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLl9yZWZyZXNoQmluZGluZ0NvbnRleHQob0N1cnJlbnRDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQmluZHMgdGhlIHBhZ2UgdG8gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB0byBiZSBib3VuZFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gb05hdmlnYXRpb25QYXJhbWV0ZXJzIE5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKi9cblx0X2JpbmRQYWdlVG9Db250ZXh0KG9Db250ZXh0OiBDb250ZXh0IHwgbnVsbCwgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbykge1xuXHRcdGlmICghb0NvbnRleHQpIHtcblx0XHRcdHRoaXMuYmVmb3JlU2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1BhcmVudExpc3RCaW5kaW5nID0gb0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGlmIChvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCAhb1BhcmVudExpc3RCaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBwYXJlbnRCaW5kaW5nIGlzIG5vdCBhIGxpc3RCaW5kaW5nLCB3ZSBjcmVhdGUgYSBuZXcgY29udGV4dFxuXHRcdFx0XHRvQ29udGV4dCA9IHRoaXMuX2NyZWF0ZUNvbnRleHQob0NvbnRleHQuZ2V0UGF0aCgpLCBvTW9kZWwpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLl9zZXRLZWVwQWxpdmUoXG5cdFx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAob0NvbnRleHQgJiYgb1Jvb3RWaWV3Q29udHJvbGxlci5pc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlIC8vIExvYWQgbWVzc2FnZXMsIG90aGVyd2lzZSB0aGV5IGRvbid0IGdldCByZWZyZXNoZWQgbGF0ZXIsIGUuZy4gZm9yIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdC8vIHNldEtlZXBBbGl2ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwYXJlbnQgbGlzdGJpbmRpbmcgZG9lc24ndCBoYXZlICQkb3duUmVxdWVzdD10cnVlXG5cdFx0XHRcdC8vIFRoaXMgY2FzZSBmb3IgY3VzdG9tIGZyYWdtZW50cyBpcyBzdXBwb3J0ZWQsIGJ1dCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gbWFrZSB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gYXBwYXJlbnRcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBWaWV3IGZvciAke29Db250ZXh0LmdldFBhdGgoKX0gd29uJ3QgYmUgc3luY2hyb25pemVkLiBQYXJlbnQgbGlzdEJpbmRpbmcgbXVzdCBoYXZlIGJpbmRpbmcgcGFyYW1ldGVyICQkb3duUmVxdWVzdD10cnVlYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCBvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQgb3RoZXJ3aXNlIHdlIGdldCBlcnJvcnNcblx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvcGVyIGJlZm9yZS9hZnRlciBjYWxsYmFja3Ncblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0LCB7XG5cdFx0XHRlZGl0YWJsZTogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSxcblx0XHRcdGxpc3RCaW5kaW5nOiBvUGFyZW50TGlzdEJpbmRpbmcsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdHJlYXNvbjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbixcblx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHR9KTtcblxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQsIHsgcmVkaXJlY3RlZFRvTm9uRHJhZnQ6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQgfSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGNvbnRleHQgZnJvbSBhIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0XG5cdCAqL1xuXHRfY3JlYXRlQ29udGV4dChzUGF0aDogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LFxuXHRcdFx0c0VudGl0eVNldCA9IG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdHNDb250ZXh0UGF0aCA9XG5cdFx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIsXG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHQkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQ6ICRzZWxlY3QgdGhlIHN0YXRlIGZsYWdzIChIYXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBhbmQgSXNBY3RpdmVFbnRpdHkpXG5cdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApO1xuXHRcdGNvbnN0IG9EcmFmdE5vZGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgKTtcblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gKHRoaXMuX29BcHBDb21wb25lbnQgYXMgYW55KS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9nZXRLZWVwQWxpdmVDb250ZXh0KG9Nb2RlbCwgc1BhdGgsIGZhbHNlLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBrZWVwQWxpdmUgY29udGV4dCAke3NQYXRofWApO1xuXHRcdFx0fSBlbHNlIGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0aWYgKG9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9Db250ZXh0LnJlcXVlc3RQcm9wZXJ0eShbXCJIYXNBY3RpdmVFbnRpdHlcIiwgXCJIYXNEcmFmdEVudGl0eVwiLCBcIklzQWN0aXZlRW50aXR5XCJdKTtcblx0XHRcdFx0XHRpZiAob0RyYWZ0Um9vdCkge1xuXHRcdFx0XHRcdFx0b0NvbnRleHQucmVxdWVzdE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRyYWZ0IGFuZCBlZGl0IHdlIG5lZWQgdG8gZW5zdXJlIHRob3NlIHByb3BlcnRpZXMgYXJlIHJlcXVlc3RlZCBhZ2FpbiBldmVuIGlmIHRoZXkgYXJlIGluIHRoZSBiaW5kaW5nJ3MgY2FjaGVcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2hlbiB5b3UgZWRpdCBhbmQgZ28gdG8gdGhlIHNhdmVkIHZlcnNpb24geW91IGhhdmUgbm8gd2F5IG9mIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBlZGl0IHZlcnNpb25cblx0XHRcdFx0XHRvQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRvRHJhZnRSb290XG5cdFx0XHRcdFx0XHRcdD8gW1wiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdXG5cdFx0XHRcdFx0XHRcdDogW1wiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9Db250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhgKTtcblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy4kc2VsZWN0ID0gc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRyYWZ0OiAkc2VsZWN0IHRoZSBzdGF0ZSBmbGFncyAoSGFzQWN0aXZlRW50aXR5LCBIYXNEcmFmdEVudGl0eSwgYW5kIElzQWN0aXZlRW50aXR5KVxuXHRcdFx0aWYgKG9EcmFmdFJvb3QgfHwgb0RyYWZ0Tm9kZSkge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuJHNlbGVjdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuJHNlbGVjdCA9IFwiSGFzQWN0aXZlRW50aXR5LEhhc0RyYWZ0RW50aXR5LElzQWN0aXZlRW50aXR5XCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuJHNlbGVjdCArPSBcIixIYXNBY3RpdmVFbnRpdHksSGFzRHJhZnRFbnRpdHksSXNBY3RpdmVFbnRpdHlcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0Y29uc3Qgb1ByZXZpb3VzQmluZGluZyA9ICh0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIGFueSk/LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9QcmV2aW91c0JpbmRpbmcpIHtcblx0XHRcdFx0XHRvTW9kZWwucmVzZXRDaGFuZ2VzKG9QcmV2aW91c0JpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0XHRcdFx0XHRvUHJldmlvdXNCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvSGlkZGVuQmluZGluZyA9IG9Nb2RlbC5iaW5kQ29udGV4dChzUGF0aCwgdW5kZWZpbmVkLCBtUGFyYW1ldGVycyk7XG5cblx0XHRcdG9IaWRkZW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5fb1ZpZXcpO1xuXHRcdFx0fSk7XG5cdFx0XHRvSGlkZGVuQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgdGhpcy5vbkRhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTtcblx0XHRcdHJldHVybiBvSGlkZGVuQmluZGluZy5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0YXN5bmMgb25EYXRhUmVjZWl2ZWQob0V2ZW50OiBFdmVudDx7IGVycm9yOiB7IHN0YXR1czogbnVtYmVyIH0gfT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzRXJyb3JEZXNjcmlwdGlvbiA9IG9FdmVudCAmJiBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIik7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5fb1ZpZXcpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLl9vVmlldyk7XG5cdFx0fVxuXG5cdFx0aWYgKHNFcnJvckRlc2NyaXB0aW9uKSB7XG5cdFx0XHQvLyBUT0RPOiBpbiBjYXNlIG9mIDQwNCB0aGUgdGV4dCBzaGFsbCBiZSBkaWZmZXJlbnRcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IGF3YWl0IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyO1xuXHRcdFx0XHRsZXQgbVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRpZiAoc0Vycm9yRGVzY3JpcHRpb24uc3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0aXNJbml0aWFsTG9hZDUwM0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIGlmIChzRXJyb3JEZXNjcmlwdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuXHRcdFx0XHRcdG1QYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JfREVTQ1JJUFRJT05cIiksXG5cdFx0XHRcdFx0XHRpc0RhdGFSZWNlaXZlZEVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Vycm9yRGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0XHRpc0RhdGFSZWNlaXZlZEVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMobVBhcmFtcyk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBjb3JlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyBzaWRlIGVmZmVjdHMgb24gYSBiaW5kaW5nIGNvbnRleHQgdG8gXCJyZWZyZXNoXCIgaXQuXG5cdCAqIFRPRE86IGdldCByaWQgb2YgdGhpcyBvbmNlIHByb3ZpZGVkIGJ5IHRoZSBtb2RlbFxuXHQgKiBhIHJlZnJlc2ggb24gdGhlIGJpbmRpbmcgY29udGV4dCBkb2VzIG5vdCB3b3JrIGluIGNhc2UgYSBjcmVhdGlvbiByb3cgd2l0aCBhIHRyYW5zaWVudCBjb250ZXh0IGlzXG5cdCAqIHVzZWQuIGFsc28gYSByZXF1ZXN0U2lkZUVmZmVjdHMgd2l0aCBhbiBlbXB0eSBwYXRoIHdvdWxkIGZhaWwgZHVlIHRvIHRoZSB0cmFuc2llbnQgY29udGV4dFxuXHQgKiB0aGVyZWZvcmUgd2UgZ2V0IGFsbCBkZXBlbmRlbnQgYmluZGluZ3MgKHZpYSBwcml2YXRlIG1vZGVsIG1ldGhvZCkgdG8gZGV0ZXJtaW5lIGFsbCBwYXRocyBhbmQgdGhlblxuXHQgKiByZXF1ZXN0IHRoZW0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgQ29udGV4dCB0byBiZSByZWZyZXNoZWRcblx0ICovXG5cdF9yZWZyZXNoQmluZGluZ0NvbnRleHQob0JpbmRpbmdDb250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IHNSb290Q29udGV4dFBhdGggPSBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID1cblx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDtcblx0XHRjb25zdCBhTmF2aWdhdGlvblByb3BlcnR5UGF0aHM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVByb3BlcnR5UGF0aHM6IGFueVtdID0gW107XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1RhcmdldFR5cGUgPSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdHRhcmdldEVudGl0aWVzOiBbXVxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXRCaW5kaW5nUGF0aHMob0JpbmRpbmc6IGFueSkge1xuXHRcdFx0bGV0IGFEZXBlbmRlbnRCaW5kaW5ncztcblx0XHRcdGNvbnN0IHNSZWxhdGl2ZVBhdGggPSAoKG9CaW5kaW5nLmdldENvbnRleHQoKSAmJiBvQmluZGluZy5nZXRDb250ZXh0KCkuZ2V0UGF0aCgpKSB8fCBcIlwiKS5yZXBsYWNlKHNSb290Q29udGV4dFBhdGgsIFwiXCIpOyAvLyBJZiBubyBjb250ZXh0LCB0aGlzIGlzIGFuIGFic29sdXRlIGJpbmRpbmcgc28gbm8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0Y29uc3Qgc1BhdGggPSAoc1JlbGF0aXZlUGF0aCA/IGAke3NSZWxhdGl2ZVBhdGguc2xpY2UoMSl9L2AgOiBzUmVsYXRpdmVQYXRoKSArIG9CaW5kaW5nLmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIGlmIChzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBub3cgZ2V0IHRoZSBkZXBlbmRlbnQgYmluZGluZ3Ncblx0XHRcdFx0YURlcGVuZGVudEJpbmRpbmdzID0gb0JpbmRpbmcuZ2V0RGVwZW5kZW50QmluZGluZ3MoKTtcblx0XHRcdFx0aWYgKGFEZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0XHRcdC8vIGFzayB0aGUgZGVwZW5kZW50IGJpbmRpbmdzIChhbmQgb25seSB0aG9zZSB3aXRoIHRoZSBzcGVjaWZpZWQgZ3JvdXBJZFxuXHRcdFx0XHRcdC8vaWYgKGFEZXBlbmRlbnRCaW5kaW5ncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRGVwZW5kZW50QmluZGluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGdldEJpbmRpbmdQYXRocyhhRGVwZW5kZW50QmluZGluZ3NbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5wdXNoKHNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAoIWFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGlmICghYVByb3BlcnR5UGF0aHMuaW5jbHVkZXMoc1BhdGgpKSB7XG5cdFx0XHRcdFx0YVByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cdFx0fVxuXG5cdFx0Ly8gYmluZGluZyBvZiB0aGUgY29udGV4dCBtdXN0IGhhdmUgJCRQYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyB0cnVlLCB0aGlzIGJvdW5kIGNvbnRleHQgbWF5IGJlIG5lZWRlZCB0byBiZSBmZXRjaGVkIGZyb20gdGhlIGRlcGVuZGVudCBiaW5kaW5nXG5cdFx0Z2V0QmluZGluZ1BhdGhzKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpO1xuXG5cdFx0bGV0IGk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzW2ldXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPSBhUHJvcGVydHlQYXRocztcblx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucHVzaChzTWVzc2FnZXNQYXRoKTtcblx0XHR9XG5cdFx0Ly9hbGwgdGhpcyBsb2dpYyB0byBiZSByZXBsYWNlZCB3aXRoIGEgU2lkZUVmZmVjdHMgcmVxdWVzdCBmb3IgYW4gZW1wdHkgcGF0aCAocmVmcmVzaCBldmVyeXRoaW5nKSwgYWZ0ZXIgdGVzdGluZyB0cmFuc2llbnQgY29udGV4dHNcblx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA9IG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnJlZHVjZSgodGFyZ2V0czogc3RyaW5nW10sIHRhcmdldFByb3BlcnR5KSA9PiB7XG5cdFx0XHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSB0YXJnZXRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKTtcblx0XHRcdFx0dGFyZ2V0cy5wdXNoKGluZGV4ID4gMCA/IHRhcmdldFByb3BlcnR5LnNsaWNlKDAsIGluZGV4KSA6IHRhcmdldFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRzO1xuXHRcdH0sIFtdKTtcblx0XHQvLyBPRGF0YSBtb2RlbCB3aWxsIHRha2UgY2FyZSBvZiBkdXBsaWNhdGVzXG5cdFx0b1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoWy4uLm9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcywgLi4ub1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXNdLCBvQmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBvciB0aGUgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRfZ2V0QmluZGluZ0NvbnRleHQoKTogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIG9yIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRfc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQ6IGFueSkge1xuXHRcdGxldCBvUHJldmlvdXNDb250ZXh0LCBvVGFyZ2V0Q29udHJvbDtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdG9QcmV2aW91c0NvbnRleHQgPSB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRvVGFyZ2V0Q29udHJvbCA9IHRoaXMuX29QYWdlQ29tcG9uZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUHJldmlvdXNDb250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0b1RhcmdldENvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHR9XG5cblx0XHRvVGFyZ2V0Q29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cblx0XHRpZiAob1ByZXZpb3VzQ29udGV4dD8uaXNLZWVwQWxpdmUoKSAmJiBvUHJldmlvdXNDb250ZXh0ICE9PSBvQ29udGV4dCkge1xuXHRcdFx0dGhpcy5fc2V0S2VlcEFsaXZlKG9QcmV2aW91c0NvbnRleHQsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZmxleGlibGUgY29sdW1uIGxheW91dCAoRkNMKSBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSB2aWV3ICgtMSBpZiB0aGUgYXBwIGlzIG5vdCBGQ0wpLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGV2ZWxcblx0ICovXG5cdF9nZXRGQ0xMZXZlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLkZDTExldmVsO1xuXHR9XG5cblx0X3NldEtlZXBBbGl2ZShvQ29udGV4dDogQ29udGV4dCwgYktlZXBBbGl2ZTogYm9vbGVhbiwgZm5CZWZvcmVEZXN0cm95PzogRnVuY3Rpb24sIGJSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSB7XG5cdFx0aWYgKG9Db250ZXh0LmdldFBhdGgoKS5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdC8vIFdlIGtlZXAgdGhlIGNvbnRleHQgYWxpdmUgb25seSBpZiB0aGV5J3JlIHBhcnQgb2YgYSBjb2xsZWN0aW9uLCBpLmUuIGlmIHRoZSBwYXRoIGVuZHMgd2l0aCBhICcpJ1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoYktlZXBBbGl2ZSwgZm5CZWZvcmVEZXN0cm95LCAhIXNNZXNzYWdlc1BhdGggJiYgYlJlcXVlc3RNZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEtlZXBBbGl2ZUNvbnRleHQob01vZGVsOiBPRGF0YU1vZGVsLCBwYXRoOiBzdHJpbmcsIGJSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuLCBwYXJhbWV0ZXJzPzogYW55KTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gR2V0IHRoZSBwYXRoIGZvciB0aGUgY29udGV4dCB0aGF0IGlzIHJlYWxseSBrZXB0IGFsaXZlIChwYXJ0IG9mIGEgY29sbGVjdGlvbilcblx0XHQvLyBpLmUuIHJlbW92ZSBhbGwgc2VnbWVudHMgbm90IGVuZGluZyB3aXRoIGEgJyknXG5cdFx0Y29uc3Qga2VwdEFsaXZlU2VnbWVudHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBhZGRpdGlvbm5hbFNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHdoaWxlIChrZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggJiYgIWtlcHRBbGl2ZVNlZ21lbnRzW2tlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0YWRkaXRpb25uYWxTZWdtZW50cy5wdXNoKGtlcHRBbGl2ZVNlZ21lbnRzLnBvcCgpISk7XG5cdFx0fVxuXG5cdFx0aWYgKGtlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBrZXB0QWxpdmVQYXRoID0ga2VwdEFsaXZlU2VnbWVudHMuam9pbihcIi9cIik7XG5cdFx0Y29uc3Qgb0tlZXBBbGl2ZUNvbnRleHQgPSBvTW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChrZXB0QWxpdmVQYXRoLCBiUmVxdWVzdE1lc3NhZ2VzLCBwYXJhbWV0ZXJzKTtcblxuXHRcdGlmIChhZGRpdGlvbm5hbFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIG9LZWVwQWxpdmVDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRpdGlvbm5hbFNlZ21lbnRzLnJldmVyc2UoKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9ubmFsUGF0aCA9IGFkZGl0aW9ubmFsU2VnbWVudHMuam9pbihcIi9cIik7XG5cdFx0XHRyZXR1cm4gb01vZGVsLmJpbmRDb250ZXh0KGFkZGl0aW9ubmFsUGF0aCwgb0tlZXBBbGl2ZUNvbnRleHQpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTd2l0Y2hlcyBiZXR3ZWVuIGNvbHVtbiBhbmQgZnVsbC1zY3JlZW4gbW9kZSB3aGVuIEZDTCBpcyB1c2VkLlxuXHQgKlxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0c3dpdGNoRnVsbFNjcmVlbigpIHtcblx0XHRjb25zdCBvU291cmNlID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHRjb25zdCBvRkNMSGVscGVyTW9kZWwgPSBvU291cmNlLmdldE1vZGVsKFwiZmNsaGVscGVyXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGJJc0Z1bGxTY3JlZW4gPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vaXNGdWxsU2NyZWVuXCIpLFxuXHRcdFx0c05leHRMYXlvdXQgPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdGJJc0Z1bGxTY3JlZW4gPyBcIi9hY3Rpb25CdXR0b25zSW5mby9leGl0RnVsbFNjcmVlblwiIDogXCIvYWN0aW9uQnV0dG9uc0luZm8vZnVsbFNjcmVlblwiXG5cdFx0XHQpLFxuXHRcdFx0b1Jvb3RWaWV3Q29udHJvbGxlciA9ICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvQ29udGV4dCA9IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCA/IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpIDogb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0dGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KG9Db250ZXh0LCB7IGxheW91dDogc05leHRMYXlvdXQgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJjYW5ub3Qgc3dpdGNoIGJldHdlZW4gY29sdW1uIGFuZCBmdWxsc2NyZWVuXCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgY29sdW1uIGZvciB0aGUgY3VycmVudCB2aWV3IGluIGEgRkNMLlxuXHQgKlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkJlZm9yZSlcblx0Y2xvc2VDb2x1bW4oKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBhbnk7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRub1ByZXNlcnZhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdFx0c0xheW91dDogKHRoaXMuX29WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vY2xvc2VDb2x1bW5cIilcblx0XHR9O1xuXG5cdFx0aWYgKG9WaWV3RGF0YT8udmlld0xldmVsID09PSAxICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob01ldGFNb2RlbCwgb0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0LCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMuX29WaWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0LCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRoZSB0cmFuc2l0aW9uIG1lc3NhZ2VzIG9mIHRoZSBjb250ZXh0IGZyb20gd2hlcmUgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLlxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcHJldmlvdXNDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAocHJldmlvdXNDb250ZXh0KSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dChwcmV2aW91c0NvbnRleHQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbFJvdXRpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFpQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1BLGVBQWUsV0FEcEJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxVQW9CakVDLGNBQWMsRUFBRSxVQU9oQkEsY0FBYyxFQUFFLFVBb0NoQkMsZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFLbkNILGVBQWUsRUFBRSxVQUNqQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLFVBS25DSCxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQVduQ0gsZUFBZSxFQUFFLFdBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0F5Qm5DSCxlQUFlLEVBQUUsV0F3QmpCQSxlQUFlLEVBQUUsV0F5RmpCQSxlQUFlLEVBQUUsV0FDakJJLGNBQWMsRUFBRSxXQVVoQkosZUFBZSxFQUFFLFdBQ2pCSSxjQUFjLEVBQUUsV0FrQmhCSixlQUFlLEVBQUUsV0FDakJJLGNBQWMsRUFBRSxXQThzQmhCSixlQUFlLEVBQUUsV0FnTmpCQSxlQUFlLEVBQUUsV0FDakJJLGNBQWMsRUFBRSxXQXFCaEJKLGVBQWUsRUFBRSxXQUNqQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0csTUFBTSxDQUFDO0lBQUE7SUFBQTtNQUFBO0lBQUE7SUFBQTtJQUFBLE9B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
1123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbFJvdXRpbmciLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJmaW5hbEV4dGVuc2lvbiIsIkJlZm9yZSIsIm9uRXhpdCIsIl9vUm91dGluZ1NlcnZpY2UiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfZm5Sb3V0ZU1hdGNoZWRCb3VuZCIsIm9uSW5pdCIsIl9vVmlldyIsImJhc2UiLCJnZXRWaWV3IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIl9vUGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiX29Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJfb1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJFcnJvciIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1JvdXRpbmdTZXJ2aWNlIiwiX29uUm91dGVNYXRjaGVkIiwiYmluZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIl9vVGFyZ2V0SW5mb3JtYXRpb24iLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNhdGNoIiwib25Sb3V0ZU1hdGNoZWQiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25CZWZvcmVCaW5kaW5nIiwiX2JpbmRpbmdDb250ZXh0IiwiX21QYXJhbWV0ZXJzIiwiYmVmb3JlU2V0QmluZGluZ0NvbnRleHQiLCJiaW5kaW5nQ29udGV4dCIsIm9Sb3V0aW5nIiwiZ2V0Q29udHJvbGxlciIsInJvdXRpbmciLCJvbkFmdGVyQmluZGluZyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIm9uQ29udGV4dEJvdW5kVG9WaWV3IiwiYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJvQ29udGV4dCIsInNOYXZpZ2F0aW9uVGFyZ2V0TmFtZSIsImJQcmVzZXJ2ZUhpc3RvcnkiLCJvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIm9EZXRhaWxSb3V0ZSIsImRldGFpbCIsInNSb3V0ZU5hbWUiLCJyb3V0ZSIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwicGFyYW1ldGVycyIsIm5hdmlnYXRlVG8iLCJnZXRWaWV3RGF0YSIsIm5hdmlnYXRlVG9Sb3V0ZSIsInNUYXJnZXRSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsIm5hdmlnYXRlVG9Db250ZXh0IiwiY29udGV4dCIsImlzQSIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwibW9kZSIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsImNyZWF0ZUNvbnRleHRQcm9taXNlIiwiY3JlYXRlZENvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsImVkaXRhYmxlIiwicGVyc2lzdE9QU2Nyb2xsIiwidXBkYXRlRkNMTGV2ZWwiLCJmb3JjZUZvY3VzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJjYWxsRXh0ZW5zaW9uIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJvdmVycmlkZU5hdiIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiRkNMTGV2ZWwiLCJfZ2V0RkNMTGV2ZWwiLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiRWRpdEZsb3dBY3Rpb24iLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQiLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJuYXZpZ2F0ZUJhY2tGcm9tVHJhbnNpZW50U3RhdGUiLCJzSGFzaCIsImdldEhhc2giLCJpbmNsdWRlcyIsIm5hdkJhY2siLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJzRXJyb3JNZXNzYWdlIiwibVBhcmFtZXRlcnMiLCJuYXZUb0hhc2giLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsImRpc3BsYXlFcnJvclBhZ2UiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJfaXNWaWV3UGFydE9mUm91dGUiLCJyb3V0ZUluZm9ybWF0aW9uIiwiYVRhcmdldHMiLCJ0YXJnZXRzIiwiaW5kZXhPZiIsInRhcmdldE5hbWUiLCJ2aWV3TGV2ZWwiLCJyb3V0ZUxldmVsIiwic2V0VGltZW91dCIsIkFjdGl2aXR5U3luYyIsImlzQ29ubmVjdGVkIiwiZGlzY29ubmVjdCIsIl9zZXRCaW5kaW5nQ29udGV4dCIsIl9idWlsZEJpbmRpbmdQYXRoIiwicm91dGVBcmd1bWVudHMiLCJiaW5kaW5nUGF0dGVybiIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwicGF0aCIsInJlcGxhY2UiLCJkZWZlcnJlZCIsInNLZXkiLCJzVmFsdWUiLCJiVGFyZ2V0RWRpdGFibGUiLCJiQWN0aW9uQ3JlYXRlIiwib0V2ZW50IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJtQXJndW1lbnRzIiwiZ2V0UGFyYW1ldGVycyIsImFyZ3VtZW50cyIsIm9OYXZpZ2F0aW9uUGFyYW1ldGVycyIsImJpbmRQcm9taXNlIiwib01vZGVsIiwiX2JpbmREZWZlcnJlZCIsIl9iaW5kUGFnZUZvckVkaXQiLCJfYmluZFBhZ2UiLCJmaW5hbGx5IiwidG9TdHJpbmciLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsInRhcmdldFBhdGgiLCJjcmVhdGVEZWZlcnJlZENvbnRleHQiLCJsaXN0QmluZGluZyIsInBhcmVudENvbnRleHQiLCJkYXRhIiwiY3VycmVudEJpbmRpbmdDb250ZXh0IiwiX2dldEJpbmRpbmdDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwibW9kZWwiLCJ0ZWNobmljYWxQYXRoIiwicmVzb2x2ZVBhdGgiLCJhY3RpdmVDb250ZXh0IiwiX2NyZWF0ZUNvbnRleHQiLCJfYmluZFBhZ2VUb0NvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJlZGl0RmxvdyIsImVkaXREb2N1bWVudCIsIl9iaW5kUGFnZVRvUGF0aCIsInJlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsImNyZWF0ZUZpbHRlckZyb21QYXRoIiwic2VtYW50aWNQYXRoIiwic2VtYW50aWNLZXlzIiwibWV0YU1vZGVsIiwidW5xdW90ZUFuZERlY29kZSIsInZhbHVlIiwibGFzdEluZGV4T2YiLCJsZW5ndGgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzdWJzdHJpbmciLCJrZXlWYWx1ZXMiLCJzcGxpdCIsImZpbmFsS2V5cyIsImZpbmFsS2V5VmFsdWVzIiwiZmlsdGVyIiwic2luZ2xlS2V5IiwiZWxlbWVudCIsInN0YXJ0c1dpdGgiLCJmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJmaWx0ZXJzIiwia2V5UGFydCIsImtleVZhbHVlIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwidmFsdWUxIiwiY2FzZVNlbnNpdGl2ZSIsIm1LZXlWYWx1ZXMiLCJmb3JFYWNoIiwic0tleUFzc2lnbm1lbnQiLCJhUGFydHMiLCJmYWlsZWQiLCJtYXAiLCJzZW1hbnRpY0tleSIsImtleSIsImRyYWZ0RmlsdGVyIiwiYW5kIiwicHVzaCIsImdldFRlY2huaWNhbFBhdGhGcm9tUGF0aCIsInBhdGhXaXRoUGFyYW1ldGVycyIsImtleXMiLCJnZXRNZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRQYXRoIiwiYmluZExpc3QiLCIkJGdyb3VwSWQiLCJjb250ZXh0cyIsInJlcXVlc3RDb250ZXh0cyIsInJlZnJlc2hDb250ZXh0IiwicGF0aFRvUmVwbGFjZVdpdGgiLCJjb250ZXh0VG9SZW1vdmUiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJjb250ZXh0VG9SZXBsYWNlV2l0aCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJyZXBsYWNlV2l0aCIsIkVkaXRTdGF0ZSIsInNldEVkaXRTdGF0ZURpcnR5IiwiY2hlY2tEcmFmdEF2YWlsYWJpbGl0eSIsIm1hdGNoZXMiLCJleGVjIiwiZHJhZnRSb290IiwiZ2V0T2JqZWN0IiwicGF0aFRvUmVzb2x2ZSIsIm5hdmlnYXRpb25QYXJhbWV0ZXIiLCJsYXN0U2VtYW50aWNNYXBwaW5nIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsImN1cnJlbnRIYXNoTm9QYXJhbXMiLCJnZXRIYXNoQ2hhbmdlciIsInJvb3RFbnRpdHlOYW1lIiwiaXNSb290RHJhZnQiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIlJvd1ByZXNzIiwiaXNBY3RpdmVFbnRpdHkiLCJ1c2VDb250ZXh0IiwicmVzb2x2ZUNvbGxhYm9yYXRpb25QYXRoIiwiZm9ybWF0dGVkU2VtYW50aWNLZXlzIiwiJFByb3BlcnR5UGF0aCIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJmb3JtYXR0ZWRLZXlzIiwiY29tcGFyYXRpdmVQYXRoIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJUeXBlTmFtZSIsInNUYXJnZXRQYXRoIiwib0N1cnJlbnRDb250ZXh0Iiwic0N1cnJlbnRQYXRoIiwib1VzZUNvbnRleHQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic2hvdWxkUmVmcmVzaENvbnRleHQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicmVmcmVzaCIsImJQZXJzaXN0T1BTY3JvbGwiLCJzaG93UGxhY2Vob2xkZXIiLCJiU2hvd1BsYWNlaG9sZGVyIiwiQXBwU3RhdGVDaGFuZ2VkIiwiUmVzdG9yZUhpc3RvcnkiLCJpc0VkaXRTdGF0ZURpcnR5IiwiX3JlZnJlc2hCaW5kaW5nQ29udGV4dCIsIm9QYXJlbnRMaXN0QmluZGluZyIsIl9zZXRLZWVwQWxpdmUiLCJpc0NvbnRleHRVc2VkSW5QYWdlcyIsInNQYXRoIiwib1BhZ2VDb21wb25lbnQiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJvTWV0YU1vZGVsIiwiJCR1cGRhdGVHcm91cElkIiwiJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyIsIm9EcmFmdFJvb3QiLCJvRHJhZnROb2RlIiwiX2dldEtlZXBBbGl2ZUNvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwic01lc3NhZ2VzUGF0aCIsIiRzZWxlY3QiLCJvUHJldmlvdXNCaW5kaW5nIiwiZ2V0VXBkYXRlR3JvdXBJZCIsImRlc3Ryb3kiLCJvSGlkZGVuQmluZGluZyIsImJpbmRDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiQnVzeUxvY2tlciIsImxvY2siLCJvbkRhdGFSZWNlaXZlZCIsImdldEJvdW5kQ29udGV4dCIsInNFcnJvckRlc2NyaXB0aW9uIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJvUmVzb3VyY2VCdW5kbGUiLCJtZXNzYWdlSGFuZGxlciIsIm1QYXJhbXMiLCJzdGF0dXMiLCJpc0luaXRpYWxMb2FkNTAzRXJyb3IiLCJzaGVsbEJhY2siLCJpc0RhdGFSZWNlaXZlZEVycm9yIiwic2hvd01lc3NhZ2VzIiwib0JpbmRpbmdDb250ZXh0Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInNSb290Q29udGV4dFBhdGgiLCJhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMiLCJhUHJvcGVydHlQYXRocyIsIm9TaWRlRWZmZWN0cyIsInRhcmdldFByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdGllcyIsImdldEJpbmRpbmdQYXRocyIsIm9CaW5kaW5nIiwiYURlcGVuZGVudEJpbmRpbmdzIiwic1JlbGF0aXZlUGF0aCIsImdldENvbnRleHQiLCJzbGljZSIsImdldERlcGVuZGVudEJpbmRpbmdzIiwiaSIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwicmVkdWNlIiwidGFyZ2V0UHJvcGVydHkiLCJpbmRleCIsIm9QcmV2aW91c0NvbnRleHQiLCJvVGFyZ2V0Q29udHJvbCIsInNldEJpbmRpbmdDb250ZXh0IiwiaXNLZWVwQWxpdmUiLCJiS2VlcEFsaXZlIiwiZm5CZWZvcmVEZXN0cm95IiwiYlJlcXVlc3RNZXNzYWdlcyIsImVuZHNXaXRoIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzZXRLZWVwQWxpdmUiLCJrZXB0QWxpdmVTZWdtZW50cyIsImFkZGl0aW9ubmFsU2VnbWVudHMiLCJwb3AiLCJrZXB0QWxpdmVQYXRoIiwiam9pbiIsIm9LZWVwQWxpdmVDb250ZXh0IiwicmV2ZXJzZSIsImFkZGl0aW9ubmFsUGF0aCIsInN3aXRjaEZ1bGxTY3JlZW4iLCJvU291cmNlIiwib0ZDTEhlbHBlck1vZGVsIiwiYklzRnVsbFNjcmVlbiIsInNOZXh0TGF5b3V0IiwiZ2V0UmlnaHRtb3N0Q29udGV4dCIsIl9yb3V0aW5nIiwibGF5b3V0Iiwid2FybmluZyIsImNsb3NlQ29sdW1uIiwib1ZpZXdEYXRhIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsInNMYXlvdXQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwicHJldmlvdXNDb250ZXh0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgQWN0aXZpdHlTeW5jIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbywgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzLCBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuXG4vKipcbiAqIHtAbGluayBzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvbiBDb250cm9sbGVyIGV4dGVuc2lvbn1cbiAqXG4gKiBAc2luY2UgMS43NC4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsUm91dGluZ1wiKVxuY2xhc3MgSW50ZXJuYWxSb3V0aW5nIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX29WaWV3ITogRkVWaWV3O1xuXG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0cHJpdmF0ZSBfb1BhZ2VDb21wb25lbnQhOiBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4gfCBudWxsO1xuXG5cdHByaXZhdGUgX29Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRpbmdTZXJ2aWNlITogUm91dGluZ1NlcnZpY2U7XG5cblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBfZm5Sb3V0ZU1hdGNoZWRCb3VuZCE6IEZ1bmN0aW9uO1xuXG5cdHByb3RlY3RlZCBfb1RhcmdldEluZm9ybWF0aW9uOiBhbnk7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLl9vUm91dGluZ1NlcnZpY2UpIHtcblx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZS5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25Jbml0KCkge1xuXHRcdHRoaXMuX29WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl9vVmlldykgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+O1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9ICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um91dGVyUHJveHkoKTtcblxuXHRcdGlmICghdGhpcy5fb0FwcENvbXBvbmVudCB8fCAhdGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRyb2xlciBleHRlbnNpb24gJ3NhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlc2lvbnMuSW50ZXJuYWxSb3V0aW5nXCIpO1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHRoaXMuX29BcHBDb21wb25lbnQgPT09IHRoaXMuX29QYWdlQ29tcG9uZW50KSB7XG5cdFx0XHQvLyBUaGUgdmlldyBpc24ndCBob3N0ZWQgaW4gYSBkZWRpY2F0ZWQgVUlDb21wb25lbnQsIGJ1dCBkaXJlY3RseSBpbiB0aGUgYXBwXG5cdFx0XHQvLyAtLT4ganVzdCBrZWVwIHRoZSB2aWV3XG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudFxuXHRcdFx0LmdldFNlcnZpY2UoXCJyb3V0aW5nU2VydmljZVwiKVxuXHRcdFx0LnRoZW4oKG9Sb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlID0gb1JvdXRpbmdTZXJ2aWNlO1xuXHRcdFx0XHR0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kKTtcblx0XHRcdFx0dGhpcy5fb1RhcmdldEluZm9ybWF0aW9uID0gb1JvdXRpbmdTZXJ2aWNlLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKHRoaXMuX29QYWdlQ29tcG9uZW50IHx8IHRoaXMuX29WaWV3KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGNhbm5vdCB3b3JrIHdpdGhvdXQgYSAncm91dGluZ1NlcnZpY2UnIG9uIHRoZSBtYWluIEFwcENvbXBvbmVudFwiKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJlZCBldmVyeSB0aW1lIHRoaXMgY29udHJvbGxlciBpcyBhIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJvdXRlTWF0Y2hlZCgpIHtcblx0XHQvKiovXG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKSB7XG5cdFx0LyoqL1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkJlZm9yZUJpbmRpbmcoX2JpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge31cblxuXHRiZWZvcmVTZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLm9uQmVmb3JlQmluZGluZyhiaW5kaW5nQ29udGV4dCwgX21QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQmVmb3JlQmluZGluZykge1xuXHRcdFx0b1JvdXRpbmcub25CZWZvcmVCaW5kaW5nKGJpbmRpbmdDb250ZXh0IGFzIG9iamVjdCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLm9uQ29udGV4dEJvdW5kVG9WaWV3KGJpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdGFmdGVyU2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBfbVBhcmFtZXRlcnM/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5vbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dCwgX21QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQWZ0ZXJCaW5kaW5nKSB7XG5cdFx0XHRvUm91dGluZy5vbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dCBhcyBvYmplY3QpO1xuXHRcdH1cblx0fVxuXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIE1ldGhvZHMgdHJpZ2dlcmluZyBhIG5hdmlnYXRpb24gYWZ0ZXIgYSB1c2VyIGFjdGlvblxuXHQvLyAoZS5nLiBjbGljayBvbiBhIHRhYmxlIHJvdywgYnV0dG9uLCBldGMuLi4pXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc05hdmlnYXRpb25UYXJnZXROYW1lIE5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdGFyZ2V0XG5cdCAqIEBwYXJhbSBiUHJlc2VydmVIaXN0b3J5IFRydWUgdG8gZm9yY2UgdGhlIG5ldyBVUkwgdG8gYmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgYnJvd3NlciBoaXN0b3J5IChubyByZXBsYWNlKVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdG5hdmlnYXRlVG9UYXJnZXQob0NvbnRleHQ6IGFueSwgc05hdmlnYXRpb25UYXJnZXROYW1lOiBzdHJpbmcsIGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25Db25maWd1cmF0aW9uID1cblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ICYmXG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiAmJlxuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oc05hdmlnYXRpb25UYXJnZXROYW1lKTtcblx0XHRpZiAob05hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsUm91dGUgPSBvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24uZGV0YWlsO1xuXHRcdFx0Y29uc3Qgc1JvdXRlTmFtZSA9IG9EZXRhaWxSb3V0ZS5yb3V0ZTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJNYXBwaW5nID0gb0RldGFpbFJvdXRlLnBhcmFtZXRlcnM7XG5cdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUbyhvQ29udGV4dCwgc1JvdXRlTmFtZSwgbVBhcmFtZXRlck1hcHBpbmcsIGJQcmVzZXJ2ZUhpc3RvcnkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUbyhvQ29udGV4dCwgbnVsbCwgbnVsbCwgYlByZXNlcnZlSGlzdG9yeSk7XG5cdFx0fVxuXHRcdHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgbmF2aWdhdGlvbiB0YXJnZXQgcm91dGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gW29QYXJhbWV0ZXJzXSBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZSwgb1BhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB0byAndHJ1ZScgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRpZiAocGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubW9kZSA9PT0gXCJBc3luY1wiKSB7XG5cdFx0XHRcdC8vIHRoZSBjb250ZXh0IGlzIGVpdGhlciBjcmVhdGVkIGFzeW5jIChQcm9taXNlKVxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGFjdGl2YXRlIHRoZSByb3V0ZU1hdGNoU3luY2hybyBvbiB0aGUgUm91dGVyUHJveHkgdG8gYXZvaWQgdGhhdFxuXHRcdFx0XHQvLyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIG5hdmlnYXRlVG9Db250ZXh0IGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0XHR0aGlzLl9vUm91dGVyUHJveHkuYWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKCk7XG5cblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycy5jcmVhdGVDb250ZXh0UHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKGFzeW5jIChjcmVhdGVkQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gb25jZSB0aGUgY29udGV4dCBpcyByZXR1cm5lZCB3ZSBuYXZpZ2F0ZSBpbnRvIGl0XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjcmVhdGVkQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRjaGVja05vSGFzaENoYW5nZTogcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZSxcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU6IHBhcmFtZXRlcnMuZWRpdGFibGUsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUZDTExldmVsOiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsLFxuXHRcdFx0XHRcdFx0XHRmb3JjZUZvY3VzOiBwYXJhbWV0ZXJzLmZvcmNlRm9jdXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2l0aCB0aGUgYXN5bmMgY29udGV4dFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPy5tb2RlICE9PSBcIkRlZmVycmVkXCIpIHtcblx0XHRcdFx0Ly8gTmF2aWdhdGUgdG8gYSBsaXN0IGJpbmRpbmcgbm90IHlldCBzdXBwb3J0ZWRcblx0XHRcdFx0dGhyb3cgXCJuYXZpZ2F0aW9uIHRvIGEgbGlzdCBiaW5kaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJzLmNhbGxFeHRlbnNpb24pIHtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblxuXHRcdFx0Ly8gU3RvcmluZyB0aGUgc2VsZWN0ZWQgY29udGV4dCB0byB1c2UgaXQgaW4gaW50ZXJuYWwgcm91dGUgbmF2aWdhdGlvbiBpZiBuZWNjZXNzYXJ5LlxuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVOYXYgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5yb3V0aW5nLm9uQmVmb3JlTmF2aWdhdGlvbih7IGJpbmRpbmdDb250ZXh0OiBjb250ZXh0IH0pO1xuXHRcdFx0aWYgKG92ZXJyaWRlTmF2KSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cGFyYW1ldGVycy5GQ0xMZXZlbCA9IHRoaXMuX2dldEZDTExldmVsKCk7XG5cblx0XHRpZiAocGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzRm9yUHJldmlvdXNDb250ZXh0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycywgdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKSwgdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFja3dhcmRzIGZyb20gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCBmcm9tXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0OiBDb250ZXh0LCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPSAtMTtcblxuXHRcdHJldHVybiB0aGlzLm5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBmb3J3YXJkcyB0byBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZUZvcndhcmRUb0NvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdH1cblxuXHRcdHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGJhY2sgaW4gaGlzdG9yeSBpZiB0aGUgY3VycmVudCBoYXNoIGNvcnJlc3BvbmRzIHRvIGEgdHJhbnNpZW50IHN0YXRlLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlQmFja0Zyb21UcmFuc2llbnRTdGF0ZSgpIHtcblx0XHRjb25zdCBzSGFzaCA9IHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cblx0XHQvLyBpZiB0cmlnZ2VyZWQgd2hpbGUgbmF2aWdhdGluZyB0byAoLi4uKSwgd2UgbmVlZCB0byBuYXZpZ2F0ZSBiYWNrXG5cdFx0aWYgKHNIYXNoLmluY2x1ZGVzKFwiKC4uLilcIikpIHtcblx0XHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5uYXZCYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdG5hdmlnYXRlVG9NZXNzYWdlUGFnZShzRXJyb3JNZXNzYWdlOiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdGlmICh0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwiaS1hY3Rpb249Y3JlYXRlXCIpIHx8IHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJpLWFjdGlvbj1hdXRvQ3JlYXRlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5Lm5hdlRvSGFzaCh0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0RGVmYXVsdENyZWF0ZUhhc2goKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1QYXJhbWV0ZXJzLkZDTExldmVsID0gdGhpcy5fZ2V0RkNMTGV2ZWwoKTtcblxuXHRcdFx0cmV0dXJuICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuZGlzcGxheUVycm9yUGFnZShzRXJyb3JNZXNzYWdlLCBtUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0YXRlIGlzIGltcGFjdGVkIGJ5IHRoZSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dCk7XG5cdH1cblxuXHRfaXNWaWV3UGFydE9mUm91dGUocm91dGVJbmZvcm1hdGlvbjogYW55KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYVRhcmdldHMgPSByb3V0ZUluZm9ybWF0aW9uPy50YXJnZXRzO1xuXHRcdGlmICghYVRhcmdldHMgfHwgYVRhcmdldHMuaW5kZXhPZih0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24udGFyZ2V0TmFtZSkgPT09IC0xKSB7XG5cdFx0XHQvLyBJZiB0aGUgdGFyZ2V0IGZvciB0aGlzIHZpZXcgaGFzIGEgdmlldyBsZXZlbCBncmVhdGVyIHRoYW4gdGhlIHJvdXRlIGxldmVsLCBpdCBtZWFucyB0aGlzIHZpZXcgY29tZXMgXCJhZnRlclwiIHRoZSByb3V0ZVxuXHRcdFx0Ly8gaW4gdGVybXMgb2YgbmF2aWdhdGlvbi5cblx0XHRcdC8vIEluIHN1Y2ggY2FzZSwgd2UgcmVtb3ZlIGl0cyBiaW5kaW5nIGNvbnRleHQsIHRvIGF2b2lkIHRoaXMgdmlldyB0byBoYXZlIGRhdGEgaWYgd2UgbmF2aWdhdGUgdG8gaXQgbGF0ZXIgb25cblx0XHRcdC8vIFRoaXMgaXMgZG9uZSBpbiBhIHRpbWVvdXQgdG8gYWxsb3cgZm9yIGZvY3Vzb3V0IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQgYmVmb3JlIHByb3Blcmx5IGluIGNvbGxhYm9yYXRpdmUgZHJhZnRcblx0XHRcdGlmICgodGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLnZpZXdMZXZlbCA/PyAwKSA+PSAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA/PyAwKSkge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRpZiAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA9PT0gMCAmJiBBY3Rpdml0eVN5bmMuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgcm91dGUgaGFzIGxldmVsIDAgLS0+IHdlIG5lZWQgdG8gbGVhdmUgdGhlIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBhcyBubyBPUCBpcyBkaXNwbGF5ZWRcblx0XHRcdFx0XHRcdEFjdGl2aXR5U3luYy5kaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTtcblx0XHRcdFx0XHR0aGlzLl9zZXRCaW5kaW5nQ29udGV4dChudWxsKTsgLy8gVGhpcyBhbHNvIGNhbGwgc2V0S2VlcEFsaXZlKGZhbHNlKSBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0X2J1aWxkQmluZGluZ1BhdGgoXG5cdFx0cm91dGVBcmd1bWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG9iamVjdD4sXG5cdFx0YmluZGluZ1BhdHRlcm46IHN0cmluZyxcblx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvXG5cdCk6IHsgcGF0aDogc3RyaW5nOyBkZWZlcnJlZDogYm9vbGVhbiB9IHtcblx0XHRsZXQgcGF0aCA9IGJpbmRpbmdQYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRsZXQgZGVmZXJyZWQgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBpbiByb3V0ZUFyZ3VtZW50cykge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gcm91dGVBcmd1bWVudHNbc0tleV07XG5cblx0XHRcdGlmICh0eXBlb2Ygc1ZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1ZhbHVlID09PSBcIi4uLlwiICYmIGJpbmRpbmdQYXR0ZXJuLmluY2x1ZGVzKGB7JHtzS2V5fX1gKSkge1xuXHRcdFx0XHRkZWZlcnJlZCA9IHRydWU7XG5cdFx0XHRcdC8vIFNvbWV0aW1lcyBpbiBwcmVmZXJyZWRNb2RlID0gY3JlYXRlLCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24gaW4gYmFja2dyb3VuZCB3aGVuIHRoZVxuXHRcdFx0XHQvLyBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZyBzaG93cyB1cCwgc2V0dGluZyBiVGFyZ2V0RWRpdGFibGUgcGFzc2VzIGVkaXRhYmxlIGFzIHRydWVcblx0XHRcdFx0Ly8gdG8gb25CZWZvcmVCaW5kaW5nIGluIF9iaW5kVGFyZ2V0UGFnZSBmdW5jdGlvblxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iVGFyZ2V0RWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZShgeyR7c0tleX19YCwgc1ZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChyb3V0ZUFyZ3VtZW50c1tcIj9xdWVyeVwiXSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KT8uW1wiaS1hY3Rpb25cIl0/LmluY2x1ZGVzKFwiY3JlYXRlXCIpKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGUgYmluZGluZyBwYXRoIGlzIGFsd2F5cyBhYnNvbHV0ZVxuXHRcdGlmIChwYXRoICYmIHBhdGhbMF0gIT09IFwiL1wiKSB7XG5cdFx0XHRwYXRoID0gYC8ke3BhdGh9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBwYXRoLCBkZWZlcnJlZCB9O1xuXHR9XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gTWV0aG9kcyB0byBiaW5kIHRoZSBwYWdlIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogQnVpbGRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZnJvbSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLCBhbmQgYmluZCB0aGUgcGFnZSBhY2NvcmRpbmdseS5cblx0ICpcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogRXZlbnQ8eyByb3V0ZUluZm9ybWF0aW9uOiB1bmtub3duOyByb3V0ZVBhdHRlcm46IHN0cmluZzsgbmF2aWdhdGlvbkluZm86IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyB9Pik6IHZvaWQge1xuXHRcdC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgZm9yIHRoaXMgdmlldyBpcyBwYXJ0IG9mIHRoZSBldmVudCB0YXJnZXRzIChpLmUuIGlzIGEgdGFyZ2V0IGZvciB0aGUgY3VycmVudCByb3V0ZSkuXG5cdFx0Ly8gSWYgbm90LCB3ZSBkb24ndCBuZWVkIHRvIGJpbmQgaXQgLS0+IHJldHVyblxuXHRcdGlmICghdGhpcy5faXNWaWV3UGFydE9mUm91dGUob0V2ZW50LmdldFBhcmFtZXRlcihcInJvdXRlSW5mb3JtYXRpb25cIikpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0cmlldmUgdGhlIGJpbmRpbmcgY29udGV4dCBwYXR0ZXJuXG5cdFx0bGV0IGJpbmRpbmdQYXR0ZXJuO1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCAmJiB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dFBhdHRlcm4pIHtcblx0XHRcdGJpbmRpbmdQYXR0ZXJuID0gdGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuKCk7XG5cdFx0fVxuXHRcdGJpbmRpbmdQYXR0ZXJuID0gYmluZGluZ1BhdHRlcm4gfHwgdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLmNvbnRleHRQYXR0ZXJuO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXR0ZXJuID09PSBudWxsIHx8IGJpbmRpbmdQYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIERvbid0IGRvIHRoaXMgaWYgd2UgYWxyZWFkeSBnb3Qgc1RhcmdldCA9PSAnJywgd2hpY2ggaXMgYSB2YWxpZCB0YXJnZXQgcGF0dGVyblxuXHRcdFx0YmluZGluZ1BhdHRlcm4gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicm91dGVQYXR0ZXJuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgdGhlIHBhcmFtZXRlcnMgYnkgdGhlaXIgdmFsdWVzIGluIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0dGVyblxuXHRcdGNvbnN0IG1Bcmd1bWVudHMgPSAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyBhbnkpLmFyZ3VtZW50cztcblx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmF2aWdhdGlvbkluZm9cIik7XG5cdFx0Y29uc3QgeyBwYXRoLCBkZWZlcnJlZCB9ID0gdGhpcy5fYnVpbGRCaW5kaW5nUGF0aChtQXJndW1lbnRzLCBiaW5kaW5nUGF0dGVybiwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblxuXHRcdHRoaXMub25Sb3V0ZU1hdGNoZWQoKTtcblxuXHRcdGxldCBiaW5kUHJvbWlzZTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbCgpO1xuXHRcdGlmIChkZWZlcnJlZCkge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kRGVmZXJyZWQocGF0aCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbiAmJlxuXHRcdFx0dGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWVkaXRcIilcblx0XHQpIHtcblx0XHRcdGJpbmRQcm9taXNlID0gdGhpcy5fYmluZFBhZ2VGb3JFZGl0KHBhdGgsIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kUGFnZShwYXRoLCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXG5cdFx0YmluZFByb21pc2Vcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5vblJvdXRlTWF0Y2hlZEZpbmlzaGVkKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBkdXJpbmcgcGFnZSBiaW5kaW5nIFwiICsgZXJyb3IudG9TdHJpbmcoKSk7XG5cdFx0XHR9KTtcblxuXHRcdCh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudXBkYXRlVUlTdGF0ZUZvclZpZXcodGhpcy5fb1ZpZXcsIHRoaXMuX2dldEZDTExldmVsKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmVycmVkIGJpbmRpbmcgKGR1cmluZyBvYmplY3QgY3JlYXRpb24pLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgZGVmZmVyZWQgY29udGV4dFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX2JpbmREZWZlcnJlZCh0YXJnZXRQYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG51bGwsIHsgZWRpdGFibGU6IG5hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSB9KTtcblxuXHRcdGlmICghbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgfHwgbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMubW9kZSA9PT0gXCJEZWZlcnJlZFwiKSB7XG5cdFx0XHQvLyBlaXRoZXIgdGhlIGNvbnRleHQgc2hhbGwgYmUgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHBhZ2UgKGRlZmVycmVkIENvbnRleHQpIG9yIGl0IHNoYWxsXG5cdFx0XHQvLyBiZSBjcmVhdGVkIGFzeW5jIGJ1dCB0aGUgdXNlciByZWZyZXNoZWQgdGhlIHBhZ2UgLyBib29rbWFya2VkIHRoaXMgVVJMXG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHkgdGhlIHRhcmdldCBjb21wb25lbnQgY3JlYXRlcyB0aGlzIGRvY3VtZW50IGJ1dCB3ZSBzaGFsbCBtb3ZlIHRoaXMgdG9cblx0XHRcdC8vIGEgY2VudHJhbCBwbGFjZVxuXHRcdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50ICYmIHRoaXMuX29QYWdlQ29tcG9uZW50LmNyZWF0ZURlZmVycmVkQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5jcmVhdGVEZWZlcnJlZENvbnRleHQoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LnBhcmVudENvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LmRhdGEsXG5cdFx0XHRcdFx0ISFuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3VycmVudEJpbmRpbmdDb250ZXh0ID0gdGhpcy5fZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoY3VycmVudEJpbmRpbmdDb250ZXh0Py5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHQvLyBGb3Igbm93IHJlbW92ZSB0aGUgcGVuZGluZyBjaGFuZ2VzIHRvIGF2b2lkIHRoZSBtb2RlbCByYWlzZXMgZXJyb3JzIGFuZCB0aGUgb2JqZWN0IHBhZ2UgaXMgYXQgbGVhc3QgYm91bmRcblx0XHRcdC8vIElkZWFsbHkgdGhlIHVzZXIgc2hvdWxkIGJlIGFza2VkIGZvclxuXHRcdFx0Y3VycmVudEJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyByZW1vdmUgdGhlIGNvbnRleHQgdG8gYXZvaWQgc2hvd2luZyBvbGQgZGF0YVxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXG5cdFx0dGhpcy5hZnRlclNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBmcm9tIGEgcGF0aCBpbiBjYXNlIHRoZSBhcHAgaXMgc3RhcnRlZCBpbiB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdC5cblx0ICpcblx0ICogSWYgdGhlIGNvbnRleHQgcG9pbnRzIHRvIGFuIGFjdGl2ZSBlbnRpdHksIGl0IGlzIGRpcmVjdGx5IHB1dCBpbnRvIGRyYWZ0IHVzaW5nIHRoZSBFZGl0Rmxvdy5cblx0ICpcblx0ICogQHBhcmFtIHRhcmdldFBhdGhcblx0ICogQHBhcmFtIG1vZGVsXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgb25jZSB0aGUgYmluZGluZyBoYXMgYmVlbiBzZXQgb24gdGhlIHBhZ2Vcblx0ICovXG5cdGFzeW5jIF9iaW5kUGFnZUZvckVkaXQodGFyZ2V0UGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8dm9pZCB8IENvbnRleHQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsUGF0aDogc3RyaW5nID0gYXdhaXQgdGhpcy5yZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdFx0aWYgKHRlY2huaWNhbFBhdGguaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpKSB7XG5cdFx0XHRcdC8vIGNyZWF0ZSBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB0aGlzLl9jcmVhdGVDb250ZXh0KHRlY2huaWNhbFBhdGgsIG1vZGVsKTtcblx0XHRcdFx0dGhpcy5fYmluZFBhZ2VUb0NvbnRleHQoYWN0aXZlQ29udGV4dCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0Ly8gSXNBY3RpdmVFbnRpdHkgbmVlZHMgdG8gYmUgYXZhaWxhYmxlIGZvciB0aGUgZWRpdGluZyB0byB3b3JrXG5cdFx0XHRcdGF3YWl0IGFjdGl2ZUNvbnRleHQucmVxdWVzdFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIik7XG5cdFx0XHRcdC8vIGVkaXQgZG9jdW1lbnRcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQoYWN0aXZlQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fYmluZFBhZ2VUb1BhdGgodGVjaG5pY2FsUGF0aCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXG5cdFx0XHR0aGlzLm5hdmlnYXRlVG9NZXNzYWdlUGFnZShyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUlwiKSwge1xuXHRcdFx0XHR0aXRsZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgY29udGV4dFxuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uUGFyYW1ldGVycyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIG9uY2UgdGhlIGJpbmRpbmcgaGFzIGJlZW4gc2V0IG9uIHRoZSBwYWdlXG5cdCAqL1xuXHRfYmluZFBhZ2UodGFyZ2V0UGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbykge1xuXHRcdGlmICh0YXJnZXRQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG51bGwsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycykpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVQYXRoKHRhcmdldFBhdGgsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycylcblx0XHRcdC50aGVuKCh0ZWNobmljYWxQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0dGhpcy5fYmluZFBhZ2VUb1BhdGgodGVjaG5pY2FsUGF0aCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gRXJyb3IgaGFuZGxpbmcgZm9yIGVycm9uZW91cyBtZXRhZGF0YSByZXF1ZXN0XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9NZXNzYWdlUGFnZShyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUlwiKSwge1xuXHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmaWx0ZXIgdG8gcmV0cmlldmUgYSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8gYSBzZW1hbnRpYyBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc2VtYW50aWNQYXRoIFRoZSBzZW1hbnRpYyBvciB0ZWNobmljYWwgcGF0aFxuXHQgKiBAcGFyYW0gc2VtYW50aWNLZXlzIFRoZSBzZW1hbnRpYyBvciB0ZWNobmljYWwga2V5cyBmb3IgdGhlIHBhdGhcblx0ICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgaW5zdGFuY2Ugb2YgdGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlsdGVyXG5cdCAqL1xuXHRjcmVhdGVGaWx0ZXJGcm9tUGF0aChzZW1hbnRpY1BhdGg6IHN0cmluZywgc2VtYW50aWNLZXlzOiBzdHJpbmdbXSwgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpbHRlciB8IG51bGwge1xuXHRcdGNvbnN0IHVucXVvdGVBbmREZWNvZGUgPSBmdW5jdGlvbiAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRpZiAodmFsdWUuaW5kZXhPZihcIidcIikgPT09IDAgJiYgdmFsdWUubGFzdEluZGV4T2YoXCInXCIpID09PSB2YWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdC8vIFJlbW92ZSB0aGUgcXVvdGVzIGZyb20gdGhlIHZhbHVlIGFuZCBkZWNvZGUgc3BlY2lhbCBjaGFyc1xuXHRcdFx0XHR2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH07XG5cdFx0Y29uc3Qga2V5VmFsdWVzID0gc2VtYW50aWNQYXRoLnN1YnN0cmluZyhzZW1hbnRpY1BhdGguaW5kZXhPZihcIihcIikgKyAxLCBzZW1hbnRpY1BhdGgubGVuZ3RoIC0gMSkuc3BsaXQoXCIsXCIpO1xuXG5cdFx0bGV0IGZpbmFsS2V5cyA9IHNlbWFudGljS2V5cztcblx0XHRsZXQgZmluYWxLZXlWYWx1ZXMgPSBrZXlWYWx1ZXM7XG5cdFx0Ly8gSWYgd2UgaGF2ZSB0ZWNobmljYWwga2V5cywgSXNBY3RpdmVFbnRpdHkgd2lsbCBiZSBwcmVzZW50LiBXZSBuZWVkIHRvIHJlbW92ZSBpdCBhcyB3ZSdyZSBhbHJlYWR5IGFkZGluZyB0aGVtIGF0IHRoZSBlbmQuXG5cdFx0aWYgKHNlbWFudGljS2V5cy5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0XHRmaW5hbEtleXMgPSBzZW1hbnRpY0tleXMuZmlsdGVyKChzaW5nbGVLZXkpID0+ICFzaW5nbGVLZXkuaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eVwiKSk7XG5cdFx0XHRmaW5hbEtleVZhbHVlcyA9IGtleVZhbHVlcy5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnN0YXJ0c1dpdGgoXCJJc0FjdGl2ZUVudGl0eVwiKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpbmFsS2V5cy5sZW5ndGggIT0gZmluYWxLZXlWYWx1ZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCk7XG5cdFx0bGV0IGZpbHRlcnM6IEZpbHRlcltdO1xuXHRcdGlmIChmaW5hbEtleXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgdGVjaG5pY2FsIGtleSwgdGhlIGVxdWFsIGlzIHByZXNlbnQgYmVjYXVzZSB0aGVyZSdzIGF0IGxlYXN0IDIgcGFyYW1ldGVycywgYSB0ZWNobmljYWwga2V5IGFuZCBJc0FjdGl2ZUVudGl0eVxuXHRcdFx0aWYgKGZpbmFsS2V5VmFsdWVzWzBdLmluZGV4T2YoXCI9XCIpID4gMCkge1xuXHRcdFx0XHRjb25zdCBrZXlQYXJ0ID0gZmluYWxLZXlWYWx1ZXNbMF0uc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRmaW5hbEtleVZhbHVlc1swXSA9IGtleVBhcnRbMV07XG5cdFx0XHR9XG5cdFx0XHQvLyBUYWtlIHRoZSBmaXJzdCBrZXkgdmFsdWVcblx0XHRcdGNvbnN0IGtleVZhbHVlID0gdW5xdW90ZUFuZERlY29kZShmaW5hbEtleVZhbHVlc1swXSk7XG5cdFx0XHRmaWx0ZXJzID0gW1xuXHRcdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRwYXRoOiBmaW5hbEtleXNbMF0sXG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHZhbHVlMToga2V5VmFsdWUsXG5cdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbUtleVZhbHVlczogYW55ID0ge307XG5cdFx0XHQvLyBDcmVhdGUgYSBtYXAgb2YgYWxsIGtleSB2YWx1ZXNcblx0XHRcdGZpbmFsS2V5VmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXlBc3NpZ25tZW50OiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3QgYVBhcnRzID0gc0tleUFzc2lnbm1lbnQuc3BsaXQoXCI9XCIpLFxuXHRcdFx0XHRcdGtleVZhbHVlID0gdW5xdW90ZUFuZERlY29kZShhUGFydHNbMV0pO1xuXG5cdFx0XHRcdG1LZXlWYWx1ZXNbYVBhcnRzWzBdXSA9IGtleVZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGxldCBmYWlsZWQgPSBmYWxzZTtcblx0XHRcdGZpbHRlcnMgPSBmaW5hbEtleXMubWFwKGZ1bmN0aW9uIChzZW1hbnRpY0tleSkge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBzZW1hbnRpY0tleSxcblx0XHRcdFx0XHR2YWx1ZSA9IG1LZXlWYWx1ZXNba2V5XTtcblxuXHRcdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0XHRcdHBhdGg6IGtleSxcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdHZhbHVlMTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFpbGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIlhYXCJcblx0XHRcdFx0XHR9KTsgLy8gd2lsbCBiZSBpZ25vcmVkIGFueXdheSBzaW5jZSB3ZSByZXR1cm4gYWZ0ZXJcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChmYWlsZWQpIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIGEgZHJhZnQgZmlsdGVyIHRvIG1ha2Ugc3VyZSB3ZSB0YWtlIHRoZSBkcmFmdCBlbnRpdHkgaWYgdGhlcmUgaXMgb25lXG5cdFx0Ly8gT3IgdGhlIGFjdGl2ZSBlbnRpdHkgb3RoZXJ3aXNlXG5cdFx0Y29uc3QgZHJhZnRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBmYWxzZSksIG5ldyBGaWx0ZXIoXCJTaWJsaW5nRW50aXR5L0lzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgbnVsbCldLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHRcdGZpbHRlcnMucHVzaChkcmFmdEZpbHRlcik7XG5cblx0XHRyZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJzLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHBhdGggd2l0aCBzZW1hbnRpYyBrZXlzIHRvIGEgcGF0aCB3aXRoIHRlY2huaWNhbCBrZXlzLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aFdpdGhQYXJhbWV0ZXJzIFRoZSBwYXRoIHdpdGggc2VtYW50aWMga2V5c1xuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIGZvciB0aGUgcGF0aFxuXHQgKiBAcGFyYW0ga2V5cyBUaGUgc2VtYW50aWMgb3IgdGVjaG5pY2FsIGtleXMgZm9yIHRoZSBwYXRoXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBjb250YWluaW5nIHRoZSBwYXRoIHdpdGggdGVjaG5pY2FsIGtleXMgaWYgcGF0aFdpdGhQYXJhbWV0ZXJzIGNvdWxkIGJlIGludGVycHJldGVkIGFzIGEgdGVjaG5pY2FsIHBhdGgsIG51bGwgb3RoZXJ3aXNlXG5cdCAqL1xuXHRhc3luYyBnZXRUZWNobmljYWxQYXRoRnJvbVBhdGgocGF0aFdpdGhQYXJhbWV0ZXJzOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBrZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBlbnRpdHlTZXRQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHBhdGhXaXRoUGFyYW1ldGVycykuZ2V0UGF0aCgpO1xuXG5cdFx0aWYgKCFrZXlzIHx8IGtleXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBObyBzZW1hbnRpYy90ZWNobmljYWwga2V5c1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gQ3JlYXRlIGEgc2V0IG9mIGZpbHRlcnMgY29ycmVzcG9uZGluZyB0byBhbGwga2V5c1xuXHRcdGNvbnN0IGZpbHRlciA9IHRoaXMuY3JlYXRlRmlsdGVyRnJvbVBhdGgocGF0aFdpdGhQYXJhbWV0ZXJzLCBrZXlzLCBtZXRhTW9kZWwpO1xuXHRcdGlmIChmaWx0ZXIgPT09IG51bGwpIHtcblx0XHRcdC8vIENvdWxkbid0IGludGVycHJldCB0aGUgcGF0aCBhcyBhIHNlbWFudGljIG9uZVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gTG9hZCB0aGUgY29ycmVzcG9uZGluZyBvYmplY3Rcblx0XHRpZiAoIWVudGl0eVNldFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke2VudGl0eVNldFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBtb2RlbC5iaW5kTGlzdChlbnRpdHlTZXRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVyLCB7XG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCJcblx0XHR9KTtcblxuXHRcdGNvbnN0IGNvbnRleHRzID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdGlmIChjb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBjb250ZXh0c1swXS5nZXRQYXRoKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIGRhdGEgY291bGQgYmUgbG9hZGVkXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gcGF0aFRvUmVwbGFjZVdpdGggVGhlIHBhdGggdG8gdGhlIG5ldyBjb250ZXh0XG5cdCAqIEBwYXJhbSBjb250ZXh0VG9SZW1vdmUgVGhlIGluaXRpYWwgY29udGV4dCB0aGF0IGlzIGdvaW5nIHRvIGJlIHJlcGxhY2VkXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoQ29udGV4dChtb2RlbDogT0RhdGFNb2RlbCwgcGF0aFRvUmVwbGFjZVdpdGg6IHN0cmluZywgY29udGV4dFRvUmVtb3ZlOiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAocm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0VG9SZXBsYWNlV2l0aCA9IG1vZGVsLmdldEtlZXBBbGl2ZUNvbnRleHQocGF0aFRvUmVwbGFjZVdpdGgpO1xuXHRcdFx0Y29udGV4dFRvUmVtb3ZlLnJlcGxhY2VXaXRoKGNvbnRleHRUb1JlcGxhY2VXaXRoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHBhdGggaXMgYSByb290IGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0ZXN0XG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgbW9kZWxcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGEgcm9vdCBwYXRoXG5cdCAqL1xuXHRjaGVja0RyYWZ0QXZhaWxhYmlsaXR5KHBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hdGNoZXMgPSAvXlsvXT8oXFx3KylcXChbXi9dK1xcKSQvLmV4ZWMocGF0aCk7XG5cdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIEdldCB0aGUgZW50aXR5U2V0IG5hbWVcblx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gYC8ke21hdGNoZXNbMV19YDtcblx0XHQvLyBDaGVjayB0aGUgZW50aXR5IHNldCBzdXBwb3J0cyBkcmFmdFxuXHRcdGNvbnN0IGRyYWZ0Um9vdCA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApO1xuXHRcdHJldHVybiBkcmFmdFJvb3QgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGEgcGF0aCB0byBuYXZpZ2F0ZSB0byBmcm9tIGEgcGF0aCB3aXRoIFNlbWFudGljS2V5cyBvciB0ZWNobmljYWwga2V5cy5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhUb1Jlc29sdmUgVGhlIHBhdGggdG8gYmUgdHJhbnNmb3JtZWRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgcGFyYW1ldGVyIG9mIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEByZXR1cm5zIFN0cmluZyBwcm9taXNlIGZvciB0aGUgbmV3IHBhdGguIElmIHBhdGhUb1Jlc29sdmUgY291bGRuJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzZW1hbnRpYyBwYXRoLCBpdCBpcyByZXR1cm5lZCBhcyBpcy5cblx0ICovXG5cdGFzeW5jIHJlc29sdmVQYXRoKHBhdGhUb1Jlc29sdmU6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXI6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbGFzdFNlbWFudGljTWFwcGluZyA9IHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk7XG5cdFx0bGV0IGN1cnJlbnRIYXNoTm9QYXJhbXMgPSB0aGlzLl9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdGlmIChjdXJyZW50SGFzaE5vUGFyYW1zPy5sYXN0SW5kZXhPZihcIi9cIikgPT09IGN1cnJlbnRIYXNoTm9QYXJhbXM/Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vIFJlbW92ZSB0cmFpbGluZyAnLydcblx0XHRcdGN1cnJlbnRIYXNoTm9QYXJhbXMgPSBjdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBjdXJyZW50SGFzaE5vUGFyYW1zLmxlbmd0aCAtIDEpO1xuXHRcdH1cblxuXHRcdGxldCByb290RW50aXR5TmFtZSA9IGN1cnJlbnRIYXNoTm9QYXJhbXM/LnN1YnN0cmluZygwLCBjdXJyZW50SGFzaE5vUGFyYW1zLmluZGV4T2YoXCIoXCIpKTtcblx0XHRpZiAocm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdHJvb3RFbnRpdHlOYW1lID0gcm9vdEVudGl0eU5hbWUuc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRjb25zdCBpc1Jvb3REcmFmdCA9IHRoaXMuY2hlY2tEcmFmdEF2YWlsYWJpbGl0eShjdXJyZW50SGFzaE5vUGFyYW1zLCBtZXRhTW9kZWwpLFxuXHRcdFx0c2VtYW50aWNLZXlzID0gaXNSb290RHJhZnRcblx0XHRcdFx0PyAoU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgcm9vdEVudGl0eU5hbWUpIGFzIHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSlcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0NvbGxhYm9yYXRpb25FbmFibGVkID0gTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKTtcblxuXHRcdC8qKlxuXHRcdCAqIElmIHRoZSBlbnRpdHkgaXMgZHJhZnQgZW5hYmxlZCwgd2UncmUgaW4gYSBjb2xsYWJvcmF0aW9uIGFwcGxpY2F0aW9uLCBhbmQgd2UncmUgbmF2aWdhdGluZyB0byBhIGRyYWZ0IGZyb20gYSBsaXN0LCB3ZSdyZSB0cmVhdGluZyBpdCBhcyBhIG5ldyBwYXRoLlxuXHRcdCAqIFdlIHdhbnQgdG8gY2hlY2sgaWYgdGhlIGRyYWZ0IGV4aXN0cyBmaXJzdCwgdGhlbiB3ZSBuYXZpZ2F0ZSBvbiBpdCBpZiBpdCBkb2VzIGV4aXN0LCBvdGhlcndpc2Ugd2UgbmF2aWdhdGUgdG8gdGhlIHNhdmVkIHZlcnNpb24uXG5cdFx0ICovXG5cdFx0aWYgKGlzUm9vdERyYWZ0ICYmIGlzQ29sbGFib3JhdGlvbkVuYWJsZWQgJiYgbmF2aWdhdGlvblBhcmFtZXRlci5yZWFzb24gPT09IE5hdmlnYXRpb25SZWFzb24uUm93UHJlc3MpIHtcblx0XHRcdGNvbnN0IGlzQWN0aXZlRW50aXR5ID0gbmF2aWdhdGlvblBhcmFtZXRlci51c2VDb250ZXh0Py5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID8/IHRydWU7XG5cdFx0XHRpZiAoIWlzQWN0aXZlRW50aXR5KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDb2xsYWJvcmF0aW9uUGF0aChwYXRoVG9SZXNvbHZlLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlciwgc2VtYW50aWNLZXlzLCByb290RW50aXR5TmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgaXMgdGhlICdub3JtYWwnIHByb2Nlc3MuXG5cdFx0ICogSWYgd2UgZG9uJ3QgaGF2ZSBzZW1hbnRpYyBrZXlzLCB0aGUgcGF0aCB3ZSBoYXZlIGlzIHRlY2huaWNhbCBhbmQgY2FuIGJlIHVzZWQgYXMgaXMuXG5cdFx0ICogSWYgdGhlIHBhdGggdG8gcmVzb2x2ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2VtYW50aWMgcGF0aCwgdGhlbiB3ZSBrbm93IGlzIGhhcyBiZWVuIHJlc29sdmVkIHByZXZpb3VzbHkgYW5kIHdlIGNhbiByZXR1cm4gdGhlIHRlY2huaWNhbCBwYXRoXG5cdFx0ICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSB0ZWNobmljYWwgcGF0aCwgdG8gc2V0IHVwIHRoZSBzZW1hbnRpYyBtYXBwaW5nIChpZiBpdCdzIGJlZW4gcmVzb2x2ZWQpLlxuXHRcdCAqL1xuXHRcdGlmIChzZW1hbnRpY0tleXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHBhdGhUb1Jlc29sdmU7XG5cdFx0fVxuXHRcdGlmIChsYXN0U2VtYW50aWNNYXBwaW5nPy5zZW1hbnRpY1BhdGggPT09IHBhdGhUb1Jlc29sdmUpIHtcblx0XHRcdC8vIFRoaXMgc2VtYW50aWMgcGF0aCBoYXMgYmVlbiByZXNvbHZlZCBwcmV2aW91c2x5XG5cdFx0XHRyZXR1cm4gbGFzdFNlbWFudGljTWFwcGluZy50ZWNobmljYWxQYXRoO1xuXHRcdH1cblx0XHRjb25zdCBmb3JtYXR0ZWRTZW1hbnRpY0tleXMgPSBzZW1hbnRpY0tleXMubWFwKChzaW5nbGVLZXkpID0+IHNpbmdsZUtleS4kUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIFdlIG5lZWQgcmVzb2x2ZSB0aGUgc2VtYW50aWMgcGF0aCB0byBnZXQgdGhlIHRlY2huaWNhbCBrZXlzXG5cdFx0Y29uc3QgdGVjaG5pY2FsUGF0aCA9IGF3YWl0IHRoaXMuZ2V0VGVjaG5pY2FsUGF0aEZyb21QYXRoKGN1cnJlbnRIYXNoTm9QYXJhbXMsIG1vZGVsLCBmb3JtYXR0ZWRTZW1hbnRpY0tleXMpO1xuXG5cdFx0aWYgKHRlY2huaWNhbFBhdGggJiYgdGVjaG5pY2FsUGF0aCAhPT0gcGF0aFRvUmVzb2x2ZSkge1xuXHRcdFx0Ly8gVGhlIHNlbWFudGljIHBhdGggd2FzIHJlc29sdmVkIChvdGhlcndpc2Uga2VlcCB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHRhcmdldClcblx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZS5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHtcblx0XHRcdFx0dGVjaG5pY2FsUGF0aDogdGVjaG5pY2FsUGF0aCxcblx0XHRcdFx0c2VtYW50aWNQYXRoOiBwYXRoVG9SZXNvbHZlXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0ZWNobmljYWxQYXRoO1xuXHRcdH1cblx0XHRyZXR1cm4gcGF0aFRvUmVzb2x2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmFsdWF0ZSB0aGUgcGF0aCB0byBuYXZpZ2F0ZSB3aGVuIHdlJ3JlIGluIGEgY29sbGFib3JhdGlvbiBhcHBsaWNhdGlvbiBhbmQgbmF2aWdhdGluZyB0byBhIGRyYWZ0LlxuXHQgKiBJZiB0aGUgZHJhZnQgaGFzIGJlZW4gZGlzY2FyZGVkLCB3ZSBjaGFuZ2UgdGhlIHBhdGggdG8gdGhlIHNpYmxpbmcgZWxlbWVudCBhc3NvY2lhdGVkLCBvdGhlcndpc2Ugd2Uga2VlcCB0aGUgc2FtZSBwYXRoLlxuXHQgKiBXZSdyZSBub3QgZG9pbmcgaXQgb3V0c2lkZSBvZiBjb2xsYWJvcmF0aW9uIGFzIGl0J3MgYWRkaW5nIGEgcmVxdWVzdCBkdXJpbmcgbmF2aWdhdGlvbiFcblx0ICpcblx0ICogQHBhcmFtIHBhdGhUb1Jlc29sdmUgVGhlIHBhdGggd2UncmUgY2hlY2tpbmcuIElmIHRoZSBkcmFmdCBleGlzdHMsIHdlIHJldHVybiBpdCBhcyBpcywgb3RoZXJ3aXNlIHdlIHJldHVybiB0aGUgc2libGluZyBlbGVtZW50IGFzc29jaWF0ZWRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBvRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlciBUaGUgcGFyYW1ldGVyIG9mIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBzZW1hbnRpY0tleXMgVGhlIHNlbWFudGljIGtleXMgaWYgd2UgaGF2ZSBzZW1hbnRpYyBuYXZpZ2F0aW9uLCBvdGhlcndpc2UgZmFsc2Vcblx0ICogQHBhcmFtIHJvb3RFbnRpdHlOYW1lIE5hbWUgb2YgdGhlIHJvb3QgZW50aXR5XG5cdCAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIG5hdmlnYXRlIHRvXG5cdCAqL1xuXHRhc3luYyByZXNvbHZlQ29sbGFib3JhdGlvblBhdGgoXG5cdFx0cGF0aFRvUmVzb2x2ZTogc3RyaW5nLFxuXHRcdG1vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG5hdmlnYXRpb25QYXJhbWV0ZXI6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyxcblx0XHRzZW1hbnRpY0tleXM6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSB8IHVuZGVmaW5lZCxcblx0XHRyb290RW50aXR5TmFtZTogc3RyaW5nXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgbGFzdFNlbWFudGljTWFwcGluZyA9IHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgY3VycmVudEhhc2hOb1BhcmFtcyA9IHRoaXMuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuc3BsaXQoXCI/XCIpWzBdO1xuXHRcdGxldCBmb3JtYXR0ZWRLZXlzOiBzdHJpbmdbXTtcblx0XHRjb25zdCBjb21wYXJhdGl2ZVBhdGggPSBsYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID8/IHBhdGhUb1Jlc29sdmU7XG5cdFx0aWYgKHNlbWFudGljS2V5cykge1xuXHRcdFx0Zm9ybWF0dGVkS2V5cyA9IHNlbWFudGljS2V5cy5tYXAoKHNpbmdsZUtleSkgPT4gc2luZ2xlS2V5LiRQcm9wZXJ0eVBhdGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXR0ZWRLZXlzID0gbWV0YU1vZGVsLmdldE9iamVjdChgLyR7cm9vdEVudGl0eU5hbWV9LyRUeXBlLyRLZXlgKTtcblx0XHR9XG5cblx0XHRjb25zdCB0ZWNobmljYWxQYXRoID0gYXdhaXQgdGhpcy5nZXRUZWNobmljYWxQYXRoRnJvbVBhdGgoY3VycmVudEhhc2hOb1BhcmFtcywgbW9kZWwsIGZvcm1hdHRlZEtleXMpO1xuXHRcdGlmICh0ZWNobmljYWxQYXRoID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gcGF0aFRvUmVzb2x2ZTtcblx0XHR9XG5cdFx0Ly8gQ29tcGFyaW5nIHBhdGggdGhhdCB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHdpdGggdGhlIG9uZSB3ZSBoYXZlLiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIGl0IG1lYW5zIHRoZSBkcmFmdCBkb2Vzbid0IGV4aXN0LlxuXHRcdGlmICh0ZWNobmljYWxQYXRoICE9PSBjb21wYXJhdGl2ZVBhdGggJiYgbmF2aWdhdGlvblBhcmFtZXRlci51c2VDb250ZXh0KSB7XG5cdFx0XHRpZiAobGFzdFNlbWFudGljTWFwcGluZykge1xuXHRcdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2Uuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7XG5cdFx0XHRcdFx0dGVjaG5pY2FsUGF0aDogdGVjaG5pY2FsUGF0aCxcblx0XHRcdFx0XHRzZW1hbnRpY1BhdGg6IHBhdGhUb1Jlc29sdmVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyLnJlZGlyZWN0ZWRUb05vbkRyYWZ0ID1cblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChgLyR7cm9vdEVudGl0eU5hbWV9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvYCk/LlR5cGVOYW1lID8/IHJvb3RFbnRpdHlOYW1lO1xuXHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoQ29udGV4dChtb2RlbCwgdGVjaG5pY2FsUGF0aCwgbmF2aWdhdGlvblBhcmFtZXRlci51c2VDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRlY2huaWNhbFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1RhcmdldFBhdGggVGhlIHBhdGggdG8gYnVpbGQgdGhlIGNvbnRleHQgKHRoaXMgaXMgYSBwYXRoIGluIHRoZSBtb2RlbCwgc28gb25seSB0ZWNobmljYWwga2V5cyBhcmUgYWxsb3dlZCkuXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb1BhdGgoc1RhcmdldFBhdGg6IHN0cmluZywgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbykge1xuXHRcdGNvbnN0IG9DdXJyZW50Q29udGV4dCA9IHRoaXMuX2dldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRzQ3VycmVudFBhdGggPSBvQ3VycmVudENvbnRleHQgJiYgb0N1cnJlbnRDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Vc2VDb250ZXh0ID0gb05hdmlnYXRpb25QYXJhbWV0ZXJzLnVzZUNvbnRleHQgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblxuXHRcdC8vIFdlIHNldCB0aGUgYmluZGluZyBjb250ZXh0IG9ubHkgaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHQvLyBvciBpZiB3ZSBoYXZlIGEgY29udGV4dCBhbHJlYWR5IHNlbGVjdGVkXG5cdFx0aWYgKG9Vc2VDb250ZXh0ICYmIG9Vc2VDb250ZXh0LmdldFBhdGgoKSA9PT0gc1RhcmdldFBhdGgpIHtcblx0XHRcdGlmIChvVXNlQ29udGV4dCAhPT0gb0N1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGxldCBzaG91bGRSZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHQvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNvbnRleHQgdG8gYmUgdXNlZCwgYW5kIGl0J3Mgbm90IHRoZSBjdXJyZW50IG9uZVxuXG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSdyZSByZXVzaW5nIGEgY29udGV4dCBmcm9tIGEgdGFibGUgKHRocm91Z2ggbmF2aWdhdGlvbiksIHdlIHJlZnJlc2ggaXQgdG8gYXZvaWQgb3V0ZGF0ZWQgZGF0YVxuXHRcdFx0XHQvLyBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBiZSBjb21wbGV0ZWQgKHJlcXVlc3RSZWZyZXNoKSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBnb2VzIGludG8gdGhlIHNhbWVcblx0XHRcdFx0Ly8gYmF0Y2ggYXMgdGhlIG9uZXMgZnJvbSBjb250cm9scyBpbiB0aGUgcGFnZS5cblx0XHRcdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiYgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG9Vc2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdFx0aWYgKCFvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRBY3Rpdml0eVN5bmMuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpIHx8XG5cdFx0XHRcdFx0XHQoTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIG9Vc2VDb250ZXh0LmdldFBhdGgoKSkgJiZcblx0XHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgYnV0IHdlJ3JlIGluIGNvbGxhYm9yYXRpb24gZHJhZnQsIHdlIGZvcmNlIHRoZSByZWZyZXNoIChkaXNjYXJkaW5nIHBlbmRpbmcgY2hhbmdlcykgYXMgd2UgbmVlZCB0byBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbi5cblx0XHRcdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBmcm9tIExSIHRvIE9QLCB0aGUgdmlldyBpcyBub3QgY29ubmVjdGVkIHlldCAtLT4gY2hlY2sgaWYgd2UncmUgaW4gZHJhZnQgd2l0aCBjb2xsYWJvcmF0aW9uIGZyb20gdGhlIG1ldGFtb2RlbFxuXHRcdFx0XHRcdFx0b1VzZUNvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9iaW5kUGFnZVRvQ29udGV4dChvVXNlQ29udGV4dCwgb01vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoc2hvdWxkUmVmcmVzaENvbnRleHQpIHtcblx0XHRcdFx0XHRvVXNlQ29udGV4dC5yZWZyZXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRoZSBzYW1lIGNvbnRleHQgYnV0IGFuIGVkaXRmbG93IGFjdGlvbiBoYXBwZW5lZCAoZS5nLiBDYW5jZWxEb2N1bWVudCBpbiBzdGlja3kgbW9kZSlcblx0XHRcdFx0Ly8gLS0+IFdlIG5lZWQgdG8gY2FsbCBvbkJlZm9yZS9BZnRlckJpbmRpbmcgdG8gcmVmcmVzaCB0aGUgb2JqZWN0IHBhZ2UgcHJvcGVybHlcblx0XHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwge1xuXHRcdFx0XHRcdGVkaXRhYmxlOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlLFxuXHRcdFx0XHRcdGxpc3RCaW5kaW5nOiBvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCksXG5cdFx0XHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0cmVhc29uOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uLFxuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwgeyByZWRpcmVjdGVkVG9Ob25EcmFmdDogb05hdmlnYXRpb25QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNDdXJyZW50UGF0aCAhPT0gc1RhcmdldFBhdGggfHwgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29udGV4dCBmb3IgaXRzIHBhdGhcblx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KHRoaXMuX2NyZWF0ZUNvbnRleHQoc1RhcmdldFBhdGgsIG9Nb2RlbCksIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5BcHBTdGF0ZUNoYW5nZWQgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uUmVzdG9yZUhpc3RvcnkgJiZcblx0XHRcdEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkgJiZcblx0XHRcdCFvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLl9yZWZyZXNoQmluZGluZ0NvbnRleHQob0N1cnJlbnRDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQmluZHMgdGhlIHBhZ2UgdG8gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB0byBiZSBib3VuZFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gb05hdmlnYXRpb25QYXJhbWV0ZXJzIE5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKi9cblx0X2JpbmRQYWdlVG9Db250ZXh0KG9Db250ZXh0OiBDb250ZXh0IHwgbnVsbCwgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbykge1xuXHRcdGlmICghb0NvbnRleHQpIHtcblx0XHRcdHRoaXMuYmVmb3JlU2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1BhcmVudExpc3RCaW5kaW5nID0gb0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGlmIChvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCAhb1BhcmVudExpc3RCaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBwYXJlbnRCaW5kaW5nIGlzIG5vdCBhIGxpc3RCaW5kaW5nLCB3ZSBjcmVhdGUgYSBuZXcgY29udGV4dFxuXHRcdFx0XHRvQ29udGV4dCA9IHRoaXMuX2NyZWF0ZUNvbnRleHQob0NvbnRleHQuZ2V0UGF0aCgpLCBvTW9kZWwpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLl9zZXRLZWVwQWxpdmUoXG5cdFx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAob0NvbnRleHQgJiYgb1Jvb3RWaWV3Q29udHJvbGxlci5pc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlIC8vIExvYWQgbWVzc2FnZXMsIG90aGVyd2lzZSB0aGV5IGRvbid0IGdldCByZWZyZXNoZWQgbGF0ZXIsIGUuZy4gZm9yIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdC8vIHNldEtlZXBBbGl2ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwYXJlbnQgbGlzdGJpbmRpbmcgZG9lc24ndCBoYXZlICQkb3duUmVxdWVzdD10cnVlXG5cdFx0XHRcdC8vIFRoaXMgY2FzZSBmb3IgY3VzdG9tIGZyYWdtZW50cyBpcyBzdXBwb3J0ZWQsIGJ1dCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gbWFrZSB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gYXBwYXJlbnRcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBWaWV3IGZvciAke29Db250ZXh0LmdldFBhdGgoKX0gd29uJ3QgYmUgc3luY2hyb25pemVkLiBQYXJlbnQgbGlzdEJpbmRpbmcgbXVzdCBoYXZlIGJpbmRpbmcgcGFyYW1ldGVyICQkb3duUmVxdWVzdD10cnVlYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCBvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQgb3RoZXJ3aXNlIHdlIGdldCBlcnJvcnNcblx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvcGVyIGJlZm9yZS9hZnRlciBjYWxsYmFja3Ncblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0LCB7XG5cdFx0XHRlZGl0YWJsZTogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSxcblx0XHRcdGxpc3RCaW5kaW5nOiBvUGFyZW50TGlzdEJpbmRpbmcsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdHJlYXNvbjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbixcblx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHR9KTtcblxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQsIHsgcmVkaXJlY3RlZFRvTm9uRHJhZnQ6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQgfSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGNvbnRleHQgZnJvbSBhIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0XG5cdCAqL1xuXHRfY3JlYXRlQ29udGV4dChzUGF0aDogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LFxuXHRcdFx0c0VudGl0eVNldCA9IG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdHNDb250ZXh0UGF0aCA9XG5cdFx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIsXG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCIkYXV0b1wiLFxuXHRcdFx0XHQkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQ6ICRzZWxlY3QgdGhlIHN0YXRlIGZsYWdzIChIYXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBhbmQgSXNBY3RpdmVFbnRpdHkpXG5cdFx0Y29uc3Qgb0RyYWZ0Um9vdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApO1xuXHRcdGNvbnN0IG9EcmFmdE5vZGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVgKTtcblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gKHRoaXMuX29BcHBDb21wb25lbnQgYXMgYW55KS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9nZXRLZWVwQWxpdmVDb250ZXh0KG9Nb2RlbCwgc1BhdGgsIGZhbHNlLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBrZWVwQWxpdmUgY29udGV4dCAke3NQYXRofWApO1xuXHRcdFx0fSBlbHNlIGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0aWYgKG9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9Db250ZXh0LnJlcXVlc3RQcm9wZXJ0eShbXCJIYXNBY3RpdmVFbnRpdHlcIiwgXCJIYXNEcmFmdEVudGl0eVwiLCBcIklzQWN0aXZlRW50aXR5XCJdKTtcblx0XHRcdFx0XHRpZiAob0RyYWZ0Um9vdCkge1xuXHRcdFx0XHRcdFx0b0NvbnRleHQucmVxdWVzdE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRyYWZ0IGFuZCBlZGl0IHdlIG5lZWQgdG8gZW5zdXJlIHRob3NlIHByb3BlcnRpZXMgYXJlIHJlcXVlc3RlZCBhZ2FpbiBldmVuIGlmIHRoZXkgYXJlIGluIHRoZSBiaW5kaW5nJ3MgY2FjaGVcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2hlbiB5b3UgZWRpdCBhbmQgZ28gdG8gdGhlIHNhdmVkIHZlcnNpb24geW91IGhhdmUgbm8gd2F5IG9mIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBlZGl0IHZlcnNpb25cblx0XHRcdFx0XHRvQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRvRHJhZnRSb290XG5cdFx0XHRcdFx0XHRcdD8gW1wiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCJdXG5cdFx0XHRcdFx0XHRcdDogW1wiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9Db250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhgKTtcblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy4kc2VsZWN0ID0gc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbiBjYXNlIG9mIGRyYWZ0OiAkc2VsZWN0IHRoZSBzdGF0ZSBmbGFncyAoSGFzQWN0aXZlRW50aXR5LCBIYXNEcmFmdEVudGl0eSwgYW5kIElzQWN0aXZlRW50aXR5KVxuXHRcdFx0aWYgKG9EcmFmdFJvb3QgfHwgb0RyYWZ0Tm9kZSkge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuJHNlbGVjdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuJHNlbGVjdCA9IFwiSGFzQWN0aXZlRW50aXR5LEhhc0RyYWZ0RW50aXR5LElzQWN0aXZlRW50aXR5XCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuJHNlbGVjdCArPSBcIixIYXNBY3RpdmVFbnRpdHksSGFzRHJhZnRFbnRpdHksSXNBY3RpdmVFbnRpdHlcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0Y29uc3Qgb1ByZXZpb3VzQmluZGluZyA9ICh0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIGFueSk/LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9QcmV2aW91c0JpbmRpbmcpIHtcblx0XHRcdFx0XHRvTW9kZWwucmVzZXRDaGFuZ2VzKG9QcmV2aW91c0JpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0XHRcdFx0XHRvUHJldmlvdXNCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvSGlkZGVuQmluZGluZyA9IG9Nb2RlbC5iaW5kQ29udGV4dChzUGF0aCwgdW5kZWZpbmVkLCBtUGFyYW1ldGVycyk7XG5cblx0XHRcdG9IaWRkZW5CaW5kaW5nLmF0dGFjaEV2ZW50T25jZShcImRhdGFSZXF1ZXN0ZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5fb1ZpZXcpO1xuXHRcdFx0fSk7XG5cdFx0XHRvSGlkZGVuQmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgdGhpcy5vbkRhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTtcblx0XHRcdHJldHVybiBvSGlkZGVuQmluZGluZy5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0YXN5bmMgb25EYXRhUmVjZWl2ZWQob0V2ZW50OiBFdmVudDx7IGVycm9yOiB7IHN0YXR1czogbnVtYmVyIH0gfT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzRXJyb3JEZXNjcmlwdGlvbiA9IG9FdmVudCAmJiBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIik7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5fb1ZpZXcpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLl9vVmlldyk7XG5cdFx0fVxuXG5cdFx0aWYgKHNFcnJvckRlc2NyaXB0aW9uKSB7XG5cdFx0XHQvLyBUT0RPOiBpbiBjYXNlIG9mIDQwNCB0aGUgdGV4dCBzaGFsbCBiZSBkaWZmZXJlbnRcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IGF3YWl0IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyO1xuXHRcdFx0XHRsZXQgbVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRpZiAoc0Vycm9yRGVzY3JpcHRpb24uc3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0aXNJbml0aWFsTG9hZDUwM0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIGlmIChzRXJyb3JEZXNjcmlwdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuXHRcdFx0XHRcdG1QYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JfREVTQ1JJUFRJT05cIiksXG5cdFx0XHRcdFx0XHRpc0RhdGFSZWNlaXZlZEVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIiksXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogc0Vycm9yRGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0XHRpc0RhdGFSZWNlaXZlZEVycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMobVBhcmFtcyk7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBjb3JlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyBzaWRlIGVmZmVjdHMgb24gYSBiaW5kaW5nIGNvbnRleHQgdG8gXCJyZWZyZXNoXCIgaXQuXG5cdCAqIFRPRE86IGdldCByaWQgb2YgdGhpcyBvbmNlIHByb3ZpZGVkIGJ5IHRoZSBtb2RlbFxuXHQgKiBhIHJlZnJlc2ggb24gdGhlIGJpbmRpbmcgY29udGV4dCBkb2VzIG5vdCB3b3JrIGluIGNhc2UgYSBjcmVhdGlvbiByb3cgd2l0aCBhIHRyYW5zaWVudCBjb250ZXh0IGlzXG5cdCAqIHVzZWQuIGFsc28gYSByZXF1ZXN0U2lkZUVmZmVjdHMgd2l0aCBhbiBlbXB0eSBwYXRoIHdvdWxkIGZhaWwgZHVlIHRvIHRoZSB0cmFuc2llbnQgY29udGV4dFxuXHQgKiB0aGVyZWZvcmUgd2UgZ2V0IGFsbCBkZXBlbmRlbnQgYmluZGluZ3MgKHZpYSBwcml2YXRlIG1vZGVsIG1ldGhvZCkgdG8gZGV0ZXJtaW5lIGFsbCBwYXRocyBhbmQgdGhlblxuXHQgKiByZXF1ZXN0IHRoZW0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgQ29udGV4dCB0byBiZSByZWZyZXNoZWRcblx0ICovXG5cdF9yZWZyZXNoQmluZGluZ0NvbnRleHQob0JpbmRpbmdDb250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGNvbnN0IHNSb290Q29udGV4dFBhdGggPSBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID1cblx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgc01lc3NhZ2VzUGF0aDtcblx0XHRjb25zdCBhTmF2aWdhdGlvblByb3BlcnR5UGF0aHM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVByb3BlcnR5UGF0aHM6IGFueVtdID0gW107XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1RhcmdldFR5cGUgPSB7XG5cdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdHRhcmdldEVudGl0aWVzOiBbXVxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXRCaW5kaW5nUGF0aHMob0JpbmRpbmc6IGFueSkge1xuXHRcdFx0bGV0IGFEZXBlbmRlbnRCaW5kaW5ncztcblx0XHRcdGNvbnN0IHNSZWxhdGl2ZVBhdGggPSAoKG9CaW5kaW5nLmdldENvbnRleHQoKSAmJiBvQmluZGluZy5nZXRDb250ZXh0KCkuZ2V0UGF0aCgpKSB8fCBcIlwiKS5yZXBsYWNlKHNSb290Q29udGV4dFBhdGgsIFwiXCIpOyAvLyBJZiBubyBjb250ZXh0LCB0aGlzIGlzIGFuIGFic29sdXRlIGJpbmRpbmcgc28gbm8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0Y29uc3Qgc1BhdGggPSAoc1JlbGF0aXZlUGF0aCA/IGAke3NSZWxhdGl2ZVBhdGguc2xpY2UoMSl9L2AgOiBzUmVsYXRpdmVQYXRoKSArIG9CaW5kaW5nLmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIGlmIChzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBub3cgZ2V0IHRoZSBkZXBlbmRlbnQgYmluZGluZ3Ncblx0XHRcdFx0YURlcGVuZGVudEJpbmRpbmdzID0gb0JpbmRpbmcuZ2V0RGVwZW5kZW50QmluZGluZ3MoKTtcblx0XHRcdFx0aWYgKGFEZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0XHRcdC8vIGFzayB0aGUgZGVwZW5kZW50IGJpbmRpbmdzIChhbmQgb25seSB0aG9zZSB3aXRoIHRoZSBzcGVjaWZpZWQgZ3JvdXBJZFxuXHRcdFx0XHRcdC8vaWYgKGFEZXBlbmRlbnRCaW5kaW5ncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhRGVwZW5kZW50QmluZGluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGdldEJpbmRpbmdQYXRocyhhRGVwZW5kZW50QmluZGluZ3NbaV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5wdXNoKHNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAoIWFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGlmICghYVByb3BlcnR5UGF0aHMuaW5jbHVkZXMoc1BhdGgpKSB7XG5cdFx0XHRcdFx0YVByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cdFx0fVxuXG5cdFx0Ly8gYmluZGluZyBvZiB0aGUgY29udGV4dCBtdXN0IGhhdmUgJCRQYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyB0cnVlLCB0aGlzIGJvdW5kIGNvbnRleHQgbWF5IGJlIG5lZWRlZCB0byBiZSBmZXRjaGVkIGZyb20gdGhlIGRlcGVuZGVudCBiaW5kaW5nXG5cdFx0Z2V0QmluZGluZ1BhdGhzKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpO1xuXG5cdFx0bGV0IGk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzW2ldXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPSBhUHJvcGVydHlQYXRocztcblx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucHVzaChzTWVzc2FnZXNQYXRoKTtcblx0XHR9XG5cdFx0Ly9hbGwgdGhpcyBsb2dpYyB0byBiZSByZXBsYWNlZCB3aXRoIGEgU2lkZUVmZmVjdHMgcmVxdWVzdCBmb3IgYW4gZW1wdHkgcGF0aCAocmVmcmVzaCBldmVyeXRoaW5nKSwgYWZ0ZXIgdGVzdGluZyB0cmFuc2llbnQgY29udGV4dHNcblx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcyA9IG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnJlZHVjZSgodGFyZ2V0czogc3RyaW5nW10sIHRhcmdldFByb3BlcnR5KSA9PiB7XG5cdFx0XHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSB0YXJnZXRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKTtcblx0XHRcdFx0dGFyZ2V0cy5wdXNoKGluZGV4ID4gMCA/IHRhcmdldFByb3BlcnR5LnNsaWNlKDAsIGluZGV4KSA6IHRhcmdldFByb3BlcnR5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0YXJnZXRzO1xuXHRcdH0sIFtdKTtcblx0XHQvLyBPRGF0YSBtb2RlbCB3aWxsIHRha2UgY2FyZSBvZiBkdXBsaWNhdGVzXG5cdFx0b1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoWy4uLm9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcywgLi4ub1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXNdLCBvQmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBvciB0aGUgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRfZ2V0QmluZGluZ0NvbnRleHQoKTogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlIG9yIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRfc2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQ6IGFueSkge1xuXHRcdGxldCBvUHJldmlvdXNDb250ZXh0LCBvVGFyZ2V0Q29udHJvbDtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdG9QcmV2aW91c0NvbnRleHQgPSB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRvVGFyZ2V0Q29udHJvbCA9IHRoaXMuX29QYWdlQ29tcG9uZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUHJldmlvdXNDb250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0b1RhcmdldENvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHR9XG5cblx0XHRvVGFyZ2V0Q29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cblx0XHRpZiAob1ByZXZpb3VzQ29udGV4dD8uaXNLZWVwQWxpdmUoKSAmJiBvUHJldmlvdXNDb250ZXh0ICE9PSBvQ29udGV4dCkge1xuXHRcdFx0dGhpcy5fc2V0S2VlcEFsaXZlKG9QcmV2aW91c0NvbnRleHQsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZmxleGlibGUgY29sdW1uIGxheW91dCAoRkNMKSBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSB2aWV3ICgtMSBpZiB0aGUgYXBwIGlzIG5vdCBGQ0wpLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGV2ZWxcblx0ICovXG5cdF9nZXRGQ0xMZXZlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLkZDTExldmVsO1xuXHR9XG5cblx0X3NldEtlZXBBbGl2ZShvQ29udGV4dDogQ29udGV4dCwgYktlZXBBbGl2ZTogYm9vbGVhbiwgZm5CZWZvcmVEZXN0cm95PzogRnVuY3Rpb24sIGJSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSB7XG5cdFx0aWYgKG9Db250ZXh0LmdldFBhdGgoKS5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdC8vIFdlIGtlZXAgdGhlIGNvbnRleHQgYWxpdmUgb25seSBpZiB0aGV5J3JlIHBhcnQgb2YgYSBjb2xsZWN0aW9uLCBpLmUuIGlmIHRoZSBwYXRoIGVuZHMgd2l0aCBhICcpJ1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoYktlZXBBbGl2ZSwgZm5CZWZvcmVEZXN0cm95LCAhIXNNZXNzYWdlc1BhdGggJiYgYlJlcXVlc3RNZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEtlZXBBbGl2ZUNvbnRleHQob01vZGVsOiBPRGF0YU1vZGVsLCBwYXRoOiBzdHJpbmcsIGJSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuLCBwYXJhbWV0ZXJzPzogYW55KTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gR2V0IHRoZSBwYXRoIGZvciB0aGUgY29udGV4dCB0aGF0IGlzIHJlYWxseSBrZXB0IGFsaXZlIChwYXJ0IG9mIGEgY29sbGVjdGlvbilcblx0XHQvLyBpLmUuIHJlbW92ZSBhbGwgc2VnbWVudHMgbm90IGVuZGluZyB3aXRoIGEgJyknXG5cdFx0Y29uc3Qga2VwdEFsaXZlU2VnbWVudHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBhZGRpdGlvbm5hbFNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHdoaWxlIChrZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggJiYgIWtlcHRBbGl2ZVNlZ21lbnRzW2tlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0YWRkaXRpb25uYWxTZWdtZW50cy5wdXNoKGtlcHRBbGl2ZVNlZ21lbnRzLnBvcCgpISk7XG5cdFx0fVxuXG5cdFx0aWYgKGtlcHRBbGl2ZVNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBrZXB0QWxpdmVQYXRoID0ga2VwdEFsaXZlU2VnbWVudHMuam9pbihcIi9cIik7XG5cdFx0Y29uc3Qgb0tlZXBBbGl2ZUNvbnRleHQgPSBvTW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChrZXB0QWxpdmVQYXRoLCBiUmVxdWVzdE1lc3NhZ2VzLCBwYXJhbWV0ZXJzKTtcblxuXHRcdGlmIChhZGRpdGlvbm5hbFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIG9LZWVwQWxpdmVDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRpdGlvbm5hbFNlZ21lbnRzLnJldmVyc2UoKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9ubmFsUGF0aCA9IGFkZGl0aW9ubmFsU2VnbWVudHMuam9pbihcIi9cIik7XG5cdFx0XHRyZXR1cm4gb01vZGVsLmJpbmRDb250ZXh0KGFkZGl0aW9ubmFsUGF0aCwgb0tlZXBBbGl2ZUNvbnRleHQpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTd2l0Y2hlcyBiZXR3ZWVuIGNvbHVtbiBhbmQgZnVsbC1zY3JlZW4gbW9kZSB3aGVuIEZDTCBpcyB1c2VkLlxuXHQgKlxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0c3dpdGNoRnVsbFNjcmVlbigpIHtcblx0XHRjb25zdCBvU291cmNlID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHRjb25zdCBvRkNMSGVscGVyTW9kZWwgPSBvU291cmNlLmdldE1vZGVsKFwiZmNsaGVscGVyXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGJJc0Z1bGxTY3JlZW4gPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vaXNGdWxsU2NyZWVuXCIpLFxuXHRcdFx0c05leHRMYXlvdXQgPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdGJJc0Z1bGxTY3JlZW4gPyBcIi9hY3Rpb25CdXR0b25zSW5mby9leGl0RnVsbFNjcmVlblwiIDogXCIvYWN0aW9uQnV0dG9uc0luZm8vZnVsbFNjcmVlblwiXG5cdFx0XHQpLFxuXHRcdFx0b1Jvb3RWaWV3Q29udHJvbGxlciA9ICh0aGlzLl9vQXBwQ29tcG9uZW50IGFzIGFueSkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvQ29udGV4dCA9IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCA/IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpIDogb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0dGhpcy5iYXNlLl9yb3V0aW5nLm5hdmlnYXRlVG9Db250ZXh0KG9Db250ZXh0LCB7IGxheW91dDogc05leHRMYXlvdXQgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJjYW5ub3Qgc3dpdGNoIGJldHdlZW4gY29sdW1uIGFuZCBmdWxsc2NyZWVuXCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgY29sdW1uIGZvciB0aGUgY3VycmVudCB2aWV3IGluIGEgRkNMLlxuXHQgKlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkJlZm9yZSlcblx0Y2xvc2VDb2x1bW4oKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBhbnk7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRub1ByZXNlcnZhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdFx0c0xheW91dDogKHRoaXMuX29WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vY2xvc2VDb2x1bW5cIilcblx0XHR9O1xuXG5cdFx0aWYgKG9WaWV3RGF0YT8udmlld0xldmVsID09PSAxICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob01ldGFNb2RlbCwgb0NvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0LCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMuX29WaWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0LCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRoZSB0cmFuc2l0aW9uIG1lc3NhZ2VzIG9mIHRoZSBjb250ZXh0IGZyb20gd2hlcmUgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLlxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcHJldmlvdXNDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAocHJldmlvdXNDb250ZXh0KSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dChwcmV2aW91c0NvbnRleHQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbFJvdXRpbmc7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFpQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1BLGVBQWUsV0FEcEJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxVQW9CakVDLGNBQWMsRUFBRSxVQU9oQkEsY0FBYyxFQUFFLFVBb0NoQkMsZUFBZSxFQUFFLFVBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFLbkNILGVBQWUsRUFBRSxVQUNqQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLFVBS25DSCxlQUFlLEVBQUUsVUFDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQVduQ0gsZUFBZSxFQUFFLFdBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0F5Qm5DSCxlQUFlLEVBQUUsV0F3QmpCQSxlQUFlLEVBQUUsV0EyRmpCQSxlQUFlLEVBQUUsV0FDakJJLGNBQWMsRUFBRSxXQVVoQkosZUFBZSxFQUFFLFdBQ2pCSSxjQUFjLEVBQUUsV0FrQmhCSixlQUFlLEVBQUUsV0FDakJJLGNBQWMsRUFBRSxXQThzQmhCSixlQUFlLEVBQUUsV0FnTmpCQSxlQUFlLEVBQUUsV0FDakJJLGNBQWMsRUFBRSxXQXFCaEJKLGVBQWUsRUFBRSxXQUNqQkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FB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
@@ -225,7 +225,9 @@ class InternalRouting extends ControllerExtension {
225
225
 
226
226
  parameters.FCLLevel = this._getFCLLevel();
227
227
 
228
- this.removeTransitionMessagesForPreviousContext();
228
+ if (parameters.reason !== NavigationReason.EditFlowAction) {
229
+ this.removeTransitionMessagesForPreviousContext();
230
+ }
229
231
  return this._oRoutingService.navigateToContext(context, parameters, this._oView.getViewData(), this._oTargetInformation);
230
232
  }
231
233
 
@@ -311,7 +313,7 @@ class InternalRouting extends ControllerExtension {
311
313
  // The route has level 0 --> we need to leave the collaboration session as no OP is displayed
312
314
  ActivitySync.disconnect(this.getView());
313
315
  }
314
- this.removeTransitionMessagesForPreviousContext();
316
+ this.removeTransitionMessagesForPreviousContext();
315
317
  this._setBindingContext(null); // This also call setKeepAlive(false) on the current context
316
318
  }, 0);
317
319
  }
@@ -4,7 +4,7 @@
4
4
  "id": "sap.fe.core.fpm",
5
5
  "type": "component",
6
6
  "applicationVersion": {
7
- "version": "1.120.32"
7
+ "version": "1.120.34"
8
8
  },
9
9
  "title": "Object Page",
10
10
  "tags": {
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
48
48
  controls: [],
49
49
  elements: [],
50
50
  // eslint-disable-next-line no-template-curly-in-string
51
- version: "1.120.32",
51
+ version: "1.120.34",
52
52
  noLibraryCSS: true,
53
53
  extensions: {
54
54
  //Configuration used for rule loading of Support Assistant
@@ -199,7 +199,7 @@ C_OPERATIONS_ACTION_CONFIRM_MESSAGE=Udf\u00F8r denne handling?
199
199
 
200
200
  C_OPERATIONS_ACTION_PARAMETER_DIALOG_TITLE=Aktionsparameter
201
201
 
202
- C_COMMON_ACTION_PARAMETER_DIALOG_CANCEL=Afbryd
202
+ C_COMMON_ACTION_PARAMETER_DIALOG_CANCEL=Annuller
203
203
 
204
204
  C_OPERATIONS_ACTION_PARAMETER_DIALOG_MISSING_MANDATORY_MSG=Indtast en v\u00E6rdi for "{0}".
205
205
 
@@ -60,7 +60,7 @@ C_DRAFT_EDIT_STATE_DRAFT_MY_DRAFTS_FILTER=Mis borradores
60
60
 
61
61
  C_DRAFT_EDIT_STATE_DRAFT_SAVED_ONLY_FILTER=Solo versiones guardadas
62
62
 
63
- C_DATE_RANGE=Intervalo de fechas
63
+ C_DATE_RANGE=Rango de fecha
64
64
 
65
65
  C_DATE=Fecha
66
66
 
@@ -270,7 +270,7 @@ C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_INFO=Informations
270
270
 
271
271
  C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_SUCCESS=R\u00E9ussite
272
272
 
273
- C_EDITFLOW_SAPFE_CREATION_FAILED_DESCRIPTION=L'objet n\u2019a pas pu \u00EAtre cr\u00E9\u00E9 en raison d\u2019une erreur de serveur. Veuillez r\u00E9essayer plus tard.
273
+ C_EDITFLOW_SAPFE_CREATION_FAILED_DESCRIPTION=L'objet n'a pas pu \u00EAtre cr\u00E9\u00E9 en raison d'une erreur de serveur. R\u00E9essayez plus tard.
274
274
 
275
275
  C_COMMON_SAPFE_DATA_RECEIVED_ERROR=D\u00E9sol\u00E9, la page est introuvable.
276
276
 
@@ -14,11 +14,11 @@ C_COMMON_DIALOG_SKIP_SINGLE_MESSAGE_TEXT=\uC774 \uD56D\uBAA9\uC744 \uD56D\uC0C1
14
14
 
15
15
  C_COMMON_DIALOG_CANCEL_SINGLE_MESSAGE_TEXT=\uACBD\uACE0\uB85C \uC778\uD574 \uBAA8\uB4E0 \uD56D\uBAA9\uC758 \uCC98\uB9AC \uBCF4\uB958 \uC911\:
16
16
 
17
- C_COMMON_DIALOG_SKIP_MESSAGES_WARNING=\uC120\uD0DD\uD55C \uD56D\uBAA9 \uC77C\uBD80\uC5D0 \uACBD\uACE0\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
17
+ C_COMMON_DIALOG_SKIP_MESSAGES_WARNING=\uC120\uD0DD\uD55C \uD56D\uBAA9 \uC911 \uC77C\uBD80\uC5D0 \uACBD\uACE0\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
18
18
 
19
19
  C_COMMON_DIALOG_CANCEL_MESSAGES_WARNING=\uACBD\uACE0\uB85C \uC778\uD574 \uBAA8\uB4E0 \uD56D\uBAA9\uC758 \uCC98\uB9AC\uAC00 \uBCF4\uB958 \uC911\uC785\uB2C8\uB2E4.
20
20
 
21
- C_COMMON_DIALOG_SKIP_MESSAGES_TEXT=\uACBD\uACE0\uB97C \uBB34\uC2DC\uD558\uAC70\uB098 \uC77C\uB2E8 \uC774 \uD56D\uBAA9\uC744 \uAC74\uB108\uB6F0\uB824\uBA74 "{0}"\uC744(\uB97C) \uC120\uD0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
21
+ C_COMMON_DIALOG_SKIP_MESSAGES_TEXT="{0}"\uC744(\uB97C) \uC120\uD0DD\uD558\uC5EC \uACBD\uACE0\uB97C \uBB34\uC2DC\uD558\uAC70\uB098 \uC77C\uB2E8 \uC774 \uD56D\uBAA9\uC744 \uAC74\uB108\uB6F8 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
22
22
 
23
23
  C_COMMON_DIALOG_CANCEL_MESSAGE_TEXT=\uC774 \uACBD\uACE0\uB97C \uBB34\uC2DC\uD558\uB824\uBA74 \u201C{0}\u201D\uC744(\uB97C) \uC120\uD0DD\uD558\uC2ED\uC2DC\uC624.
24
24
 
@@ -207,7 +207,7 @@ C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE=\u0421\u0442\u0432\u043E\u0440\u0438\u0
207
207
 
208
208
  C_TRANSACTION_HELPER_SAPFE_ACTION_CREATE_BUTTON=\u041F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438
209
209
 
210
- C_ACTION_PARTIAL_FRAGMENT_SAPFE_CONTINUE_ANYWAY=\u0423\u0441\u0435 \u043E\u0434\u043D\u043E \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438
210
+ C_ACTION_PARTIAL_FRAGMENT_SAPFE_CONTINUE_ANYWAY=\u0412\u0441\u0435 \u043E\u0434\u043D\u043E \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438
211
211
 
212
212
  C_ACTION_PARTIAL_FRAGMENT_SAPFE_BOUND_ACTION=\u041D\u0435 \u0432\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u043E\u0431\u0440\u043E\u0431\u0438\u0442\u0438 \u043E\u0434\u0438\u043D \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u0439 \u043E\u0431'\u0454\u043A\u0442.
213
213