@sapui5/sap.fe.core 1.136.11 → 1.136.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppStateHandler.js +8 -2
  4. package/src/sap/fe/core/AppStateHandler.ts +9 -1
  5. package/src/sap/fe/core/TemplateComponent.js +1 -1
  6. package/src/sap/fe/core/TemplateComponent.ts +1 -3
  7. package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
  8. package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
  9. package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
  10. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
  11. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  12. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
  13. package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
  14. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
  15. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
  16. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
  17. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
  18. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
  19. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
  20. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
  21. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
  22. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
  23. package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
  24. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
  25. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
  26. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
  27. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
  28. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
  29. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  30. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  31. package/src/sap/fe/core/fpm/manifest.json +1 -1
  32. package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
  33. package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
  34. package/src/sap/fe/core/library.js +1 -1
  35. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  36. package/src/sap/fe/core/messagebundle_ko.properties +3 -3
  37. package/src/sap/fe/core/messagebundle_uk.properties +2 -2
  38. package/src/sap/fe/core/messagebundle_vi.properties +4 -4
  39. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  40. package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
  41. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
  42. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
  43. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
  44. package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
@@ -216,7 +216,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
216
216
  }
217
217
  }
218
218
  }
219
- this.removeTransitionMessagesForPreviousContext();
219
+ if (parameters.reason !== NavigationReason.EditFlowAction) {
220
+ this.removeTransitionMessagesForPreviousContext();
221
+ }
220
222
  let skipHashGuardCheck;
221
223
  const hiddenDraftEnabled = this._oAppComponent?.getEnvironmentCapabilities()?.getCapabilities()?.HiddenDraft?.enabled;
222
224
  const isDocumentModified = this._oAppComponent?.getModel("ui")?.getProperty(UiModelConstants.DocumentModified) ?? true;
@@ -339,7 +341,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
339
341
  */;
340
342
  _proto.navigateToMessagePage = async function navigateToMessagePage(sErrorMessage, mParameters) {
341
343
  mParameters = mParameters || {};
342
- if (this._oRouterProxy.getHash().includes("i-action=create") || this._oRouterProxy.getHash().includes("i-action=autoCreate")) {
344
+ const navToCreateHash = mParameters.showMessagePageOnCreateFailure !== true && (this._oRouterProxy.getHash().includes("i-action=create") || this._oRouterProxy.getHash().includes("i-action=autoCreate"));
345
+ if (navToCreateHash) {
343
346
  return this._oRouterProxy.navToHash(this._oRoutingService.getDefaultCreateHash());
344
347
  } else {
345
348
  return this._oAppComponent.getRootViewController().displayErrorPage(sErrorMessage, mParameters, this.getFCLLevel());
@@ -477,7 +480,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
477
480
  // TODO: currently the target component creates this document but we shall move this to
478
481
  // a central place
479
482
  if (this._oPageComponent && this._oPageComponent.createDeferredContext) {
480
- this._oPageComponent.createDeferredContext(targetPath, navigationParameters.createOnNavigateParameters?.listBinding, navigationParameters.createOnNavigateParameters?.parentContext, navigationParameters.createOnNavigateParameters?.data, !!navigationParameters.bActionCreate);
483
+ this._oPageComponent.createDeferredContext(targetPath, navigationParameters.createOnNavigateParameters ?? {}, !!navigationParameters.bActionCreate);
481
484
  }
482
485
  }
483
486
 
@@ -1008,4 +1011,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
1008
1011
  }(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, "isCurrentStateImpactedBy", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "isCurrentStateImpactedBy"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDataReceived", [_dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "onDataReceived"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "switchFullScreen", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "switchFullScreen"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "closeColumn", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "closeColumn"), _class2.prototype), _class2)) || _class);
1009
1012
  return InternalRouting;
1010
1013
  }, false);
1011
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbFJvdXRpbmciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfZGVjNCIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiQmVmb3JlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyRXh0ZW5zaW9uIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uRXhpdCIsIl9vUm91dGluZ1NlcnZpY2UiLCJfZm5Sb3V0ZU1hdGNoZWRCb3VuZCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIm9uSW5pdCIsIl9vVmlldyIsImJhc2UiLCJnZXRWaWV3IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIl9vUGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiX29Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJfb1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJFcnJvciIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1JvdXRpbmdTZXJ2aWNlIiwiaXNBIiwiX29uUm91dGVNYXRjaGVkIiwiYmluZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIl9vVGFyZ2V0SW5mb3JtYXRpb24iLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNhdGNoIiwib25Sb3V0ZU1hdGNoZWQiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25CZWZvcmVCaW5kaW5nIiwiX2JpbmRpbmdDb250ZXh0IiwiX21QYXJhbWV0ZXJzIiwiYmVmb3JlU2V0QmluZGluZ0NvbnRleHQiLCJiaW5kaW5nQ29udGV4dCIsIm9Sb3V0aW5nIiwiZ2V0Q29udHJvbGxlciIsInJvdXRpbmciLCJvbkFmdGVyQmluZGluZyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIm9uQ29udGV4dEJvdW5kVG9WaWV3IiwiYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dCIsImRlZmVycmVkQ3JlYXRpb24iLCJuYXZpZ2F0ZVRvVGFyZ2V0Iiwib0NvbnRleHQiLCJzTmF2aWdhdGlvblRhcmdldE5hbWUiLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwib05hdmlnYXRpb25Db25maWd1cmF0aW9uIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJvRGV0YWlsUm91dGUiLCJkZXRhaWwiLCJzUm91dGVOYW1lIiwicm91dGUiLCJtUGFyYW1ldGVyTWFwcGluZyIsInBhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvIiwiZ2V0SGFzaEZvck5hdmlnYXRpb24iLCJjb250ZXh0IiwibmF2aWdhdGlvblRhcmdldE5hbWUiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsImRldGFpbFJvdXRlIiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvQ29udGV4dCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwibW9kZSIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsImNyZWF0ZUNvbnRleHRQcm9taXNlIiwiY3JlYXRlZENvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsImVkaXRhYmxlIiwicGVyc2lzdE9QU2Nyb2xsIiwidXBkYXRlRkNMTGV2ZWwiLCJmb3JjZUZvY3VzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJjYWxsRXh0ZW5zaW9uIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJjb250ZXh0VG9OYXZpZ2F0ZSIsImhpZGRlbkJpbmRpbmciLCJiYWNrUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsImdldFBhdGgiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm92ZXJyaWRlTmF2Iiwib25CZWZvcmVOYXZpZ2F0aW9uIiwiZGVzdHJveSIsIlByb21pc2UiLCJyZXNvbHZlIiwiRkNMTGV2ZWwiLCJnZXRGQ0xMZXZlbCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJSb3dQcmVzcyIsIm1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNQYXRoT25EcmFmdFJvb3QiLCJjb250ZXh0Rm9yTmF2aWdhdGlvbiIsImdldENvbnRleHRGb3JOYXZpZ2F0aW9uV2l0aENvbGxhYm9yYXRpb24iLCJnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQiLCJza2lwSGFzaEd1YXJkQ2hlY2siLCJoaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImlzRG9jdW1lbnRNb2RpZmllZCIsImdldFByb3BlcnR5IiwiVWlNb2RlbENvbnN0YW50cyIsIkRvY3VtZW50TW9kaWZpZWQiLCJpc0ZjbEVuYWJsZWQiLCJnZXRWaWV3RGF0YSIsIm9yaWdpbmFsQ29udGV4dCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJkcmFmdE9yQWN0aXZlQ29udGV4dCIsImdldERyYWZ0T3JBY3RpdmVDb250ZXh0Iiwib2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFDb250ZXh0IiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckluZm8iLCJUeXBlTmFtZSIsIm5hbWUiLCJjb250ZXh0VG9SZXBsYWNlV2l0aCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJyZXBsYWNlV2l0aCIsIkVkaXRTdGF0ZSIsInNldEVkaXRTdGF0ZURpcnR5IiwicGFyZW50QmluZGluZyIsImdldEJpbmRpbmciLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiZ3JvdXAiLCJhZ2dyZWdhdGUiLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlIiwic0hhc2giLCJnZXRIYXNoIiwiaW5jbHVkZXMiLCJuYXZCYWNrIiwibmF2aWdhdGVUb01lc3NhZ2VQYWdlIiwic0Vycm9yTWVzc2FnZSIsIm1QYXJhbWV0ZXJzIiwibmF2VG9IYXNoIiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJkaXNwbGF5RXJyb3JQYWdlIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5IiwiX2lzVmlld1BhcnRPZlJvdXRlIiwicm91dGVJbmZvcm1hdGlvbiIsImFUYXJnZXRzIiwidGFyZ2V0cyIsInRhcmdldE5hbWUiLCJ2aWV3TGV2ZWwiLCJyb3V0ZUxldmVsIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJhZGRCaW5kaW5nQ2xlYW51cFByb21pc2UiLCJzZXRUaW1lb3V0IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZGlzY29ubmVjdCIsIl9zZXRCaW5kaW5nQ29udGV4dCIsIl9idWlsZEJpbmRpbmdQYXRoIiwicm91dGVBcmd1bWVudHMiLCJiaW5kaW5nUGF0dGVybiIsIm5hdmlnYXRpb25QYXJhbWV0ZXJzIiwicGF0aCIsInJlcGxhY2UiLCJkZWZlcnJlZCIsInNLZXkiLCJzVmFsdWUiLCJiVGFyZ2V0RWRpdGFibGUiLCJiQWN0aW9uQ3JlYXRlIiwib0V2ZW50IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJtQXJndW1lbnRzIiwiZ2V0UGFyYW1ldGVycyIsIm9OYXZpZ2F0aW9uUGFyYW1ldGVycyIsImJpbmRQcm9taXNlIiwib01vZGVsIiwiX2JpbmREZWZlcnJlZCIsIkVkaXRGbG93QWN0aW9uIiwiaXNPcGVuSW5FZGl0TW9kZSIsIl9iaW5kUGFnZUZvckVkaXQiLCJfYmluZFBhZ2UiLCJmaW5hbGx5IiwidG9TdHJpbmciLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsInRhcmdldFBhdGgiLCJjcmVhdGVEZWZlcnJlZENvbnRleHQiLCJsaXN0QmluZGluZyIsInBhcmVudENvbnRleHQiLCJkYXRhIiwiX2JpbmRQYWdlVG9Db250ZXh0IiwidGVjaG5pY2FsUGF0aCIsInJlc29sdmVQYXRoIiwiaXNTdGlja3lFZGl0TW9kZSIsImlzU3RpY2t5IiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiYWN0aXZlQ29udGV4dCIsInVzZUNvbnRleHQiLCJfY3JlYXRlQ29udGV4dCIsImVkaXRGbG93IiwiZWRpdERvY3VtZW50IiwiX2JpbmRQYWdlVG9QYXRoIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJlIiwibWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZXMiLCJzVGFyZ2V0UGF0aCIsIm9DdXJyZW50Q29udGV4dCIsIl9nZXRCaW5kaW5nQ29udGV4dCIsInNDdXJyZW50UGF0aCIsIm9Vc2VDb250ZXh0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNob3VsZFJlZnJlc2hDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiaXNDb25uZWN0ZWQiLCJyZXNldENoYW5nZXMiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldEdyb3VwSWQiLCJlcnIiLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2hvd1BsYWNlaG9sZGVyIiwiYlNob3dQbGFjZWhvbGRlciIsIkFwcFN0YXRlQ2hhbmdlZCIsIlJlc3RvcmVIaXN0b3J5IiwiaXNFZGl0U3RhdGVEaXJ0eSIsIl9yZWZyZXNoQmluZGluZ0NvbnRleHQiLCJvUGFyZW50TGlzdEJpbmRpbmciLCJfc2V0S2VlcEFsaXZlIiwiaXNFeGl0aW5nIiwiaXNDb250ZXh0VXNlZEluUGFnZXMiLCJleGVjdXRlU2hhcmVBY3Rpb24iLCJzUGF0aCIsIm9QYWdlQ29tcG9uZW50Iiwic0VudGl0eVNldCIsImdldEVudGl0eVNldCIsInNDb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwib01ldGFNb2RlbCIsIiQkZ3JvdXBJZCIsIiQkdXBkYXRlR3JvdXBJZCIsIiQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMiLCJpbmxpbmVFZGl0RmxvdyIsImlzSW5saW5lRWRpdFBvc3NpYmxlIiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwib0RyYWZ0Um9vdCIsImdldE9iamVjdCIsIm9EcmFmdE5vZGUiLCJkYXRhTW9kZWxPYmplY3QiLCJnZXRDb250ZXh0IiwiYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzZW1hbnRpY0tleXMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsIm1hcCIsImtleSIsInZhbHVlIiwiX2dldEtlZXBBbGl2ZUNvbnRleHQiLCJwcm9wZXJ0aWVzVG9SZXF1ZXN0IiwiY29uY2F0IiwicmVxdWVzdFByb3BlcnR5IiwicmVxdWVzdE9iamVjdCIsInByb3BlcnRpZXNUb1NlbGVjdCIsInNNZXNzYWdlc1BhdGgiLCJnZXRNZXNzYWdlc1BhdGgiLCJwdXNoIiwiJHNlbGVjdCIsImpvaW4iLCJvUHJldmlvdXNCaW5kaW5nIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIm9IaWRkZW5CaW5kaW5nIiwiYXR0YWNoRXZlbnRPbmNlIiwiQnVzeUxvY2tlciIsImxvY2siLCJob2xkTWVzc2FnZXNGb3JDb250cm9sIiwib25EYXRhUmVjZWl2ZWQiLCJpc0xvY2tlZCIsInVubG9jayIsIm1QYXJhbXMiLCJlcnJvclN0YXR1cyIsInN0YXR1cyIsImNhdXNlIiwib1Jlc291cmNlQnVuZGxlIiwiaXNJbml0aWFsTG9hZDUwM0Vycm9yIiwic2hlbGxCYWNrIiwiaXNEYXRhUmVjZWl2ZWRFcnJvciIsImNvbnRyb2wiLCJyZWxlYXNlSG9sZEJ5Q29udHJvbCIsIm9CaW5kaW5nQ29udGV4dCIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJzUm9vdENvbnRleHRQYXRoIiwiYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzIiwiYVByb3BlcnR5UGF0aHMiLCJvU2lkZUVmZmVjdHMiLCJ0YXJnZXRQcm9wZXJ0aWVzIiwidGFyZ2V0RW50aXRpZXMiLCJnZXRCaW5kaW5nUGF0aHMiLCJvQmluZGluZyIsImFEZXBlbmRlbnRCaW5kaW5ncyIsInNSZWxhdGl2ZVBhdGgiLCJzbGljZSIsImdldERlcGVuZGVudEJpbmRpbmdzIiwiaXRlbSIsImkiLCJyZWR1Y2UiLCJ0YXJnZXRQcm9wZXJ0eSIsImluZGV4IiwiaW5kZXhPZiIsInByZXZpb3VzQ29udGV4dCIsInRhcmdldENvbnRyb2wiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzS2VlcEFsaXZlIiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJzb21lIiwicGFnZVZpZXciLCJiS2VlcEFsaXZlIiwiZm5CZWZvcmVEZXN0cm95IiwiYlJlcXVlc3RNZXNzYWdlcyIsImVuZHNXaXRoIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzZXRLZWVwQWxpdmUiLCJrZXB0QWxpdmVTZWdtZW50cyIsInNwbGl0IiwiYWRkaXRpb25uYWxTZWdtZW50cyIsInBvcCIsImtlcHRBbGl2ZVBhdGgiLCJvS2VlcEFsaXZlQ29udGV4dCIsInJldmVyc2UiLCJhZGRpdGlvbm5hbFBhdGgiLCJzd2l0Y2hGdWxsU2NyZWVuIiwib1NvdXJjZSIsIm9GQ0xIZWxwZXJNb2RlbCIsImJJc0Z1bGxTY3JlZW4iLCJzTmV4dExheW91dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJfcm91dGluZyIsImxheW91dCIsIndhcm5pbmciLCJjbG9zZUNvbHVtbiIsIm9WaWV3RGF0YSIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsInNraXBEaXNjYXJkUG9wb3ZlciIsInNraXBCYWNrTmF2aWdhdGlvbiIsImNhbmNlbERvY3VtZW50IiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQiLCJyZW1vdmVBbGxUcmFuc2l0aW9uTWVzc2FnZXNGb3JDb250ZXh0IiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsUm91dGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IHR5cGUgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0LCB0eXBlIFNob3dNZXNzYWdlc1BhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgeyBnZXREcmFmdE9yQWN0aXZlQ29udGV4dCwgaXNQYXRoT25EcmFmdFJvb3QsIHJlc29sdmVQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvQ29udGV4dFBhdGhIZWxwZXJcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nTmF2aWdhdGlvbkluZm8sIFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycywgUm91dGluZ1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvUm91dGluZ1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nVGFyZ2V0IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwiLi9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcblxudHlwZSBSb3V0ZUluZm9ybWF0aW9uID0ge1xuXHR0YXJnZXRzPzogdW5rbm93bltdO1xuXHRyb3V0ZUxldmVsOiBudW1iZXI7XG59O1xuLyoqXG4gKiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLkNvbnRyb2xsZXJFeHRlbnNpb24gQ29udHJvbGxlciBleHRlbnNpb259XG4gKiBAc2luY2UgMS43NC4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsUm91dGluZ1wiKVxuY2xhc3MgSW50ZXJuYWxSb3V0aW5nIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX29WaWV3ITogRkVWaWV3O1xuXG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0cHJpdmF0ZSBfb1BhZ2VDb21wb25lbnQhOiBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4gfCBudWxsO1xuXG5cdHByaXZhdGUgX29Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0cHJpdmF0ZSBfb1JvdXRpbmdTZXJ2aWNlITogUm91dGluZ1NlcnZpY2U7XG5cblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBfZm5Sb3V0ZU1hdGNoZWRCb3VuZD86IEZ1bmN0aW9uO1xuXG5cdHByb3RlY3RlZCBfb1RhcmdldEluZm9ybWF0aW9uITogUm91dGluZ1RhcmdldDtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX29Sb3V0aW5nU2VydmljZSAmJiB0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kKSB7XG5cdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuUm91dGVNYXRjaGVkQm91bmQpO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9vVmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl9vVmlldyk7XG5cdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGhpcy5fb1ZpZXcpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHR0aGlzLl9vUm91dGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cblx0XHRpZiAoIXRoaXMuX29BcHBDb21wb25lbnQgfHwgIXRoaXMuX29QYWdlQ29tcG9uZW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb250cm9sZXIgZXh0ZW5zaW9uICdzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZXNpb25zLkludGVybmFsUm91dGluZ1wiKTtcblx0XHR9XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmICh0aGlzLl9vQXBwQ29tcG9uZW50ID09PSB0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0Ly8gVGhlIHZpZXcgaXNuJ3QgaG9zdGVkIGluIGEgZGVkaWNhdGVkIFVJQ29tcG9uZW50LCBidXQgZGlyZWN0bHkgaW4gdGhlIGFwcFxuXHRcdFx0Ly8gLS0+IGp1c3Qga2VlcCB0aGUgdmlld1xuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQgPSBudWxsO1xuXHRcdH1cblxuXHRcdHRoaXMuX29BcHBDb21wb25lbnRcblx0XHRcdC5nZXRTZXJ2aWNlKFwicm91dGluZ1NlcnZpY2VcIilcblx0XHRcdC50aGVuKChvUm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdHRoaXMuX29Sb3V0aW5nU2VydmljZSA9IG9Sb3V0aW5nU2VydmljZTtcblx0XHRcdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50Py5pc0EoXCJzYXAuZmUuY29yZS5SZXVzZUNvbXBvbmVudFwiKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdC8vIFJldXNlIGNvbXBvbmVudHMgY2FuIHBvdGVudGlhbGx5IGVtYmVkIGEgdmlldyB3aXRoIGEgcGFnZSBjb250cm9sbGVyLCB3ZSB3YW50IHRvIGF2b2lkIGF0dGFjaGluZyB0aGUgcm91dGUgbWF0Y2hlZCBldmVudCBpbiB0aGlzIGNhc2Vcblx0XHRcdFx0XHR0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHRcdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UuYXR0YWNoUm91dGVNYXRjaGVkKHt9LCB0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24gPSBvUm91dGluZ1NlcnZpY2UuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IodGhpcy5fb1BhZ2VDb21wb25lbnQgfHwgdGhpcy5fb1ZpZXcpISA/PyB7fTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgY29udHJvbGxlciBleHRlbnNpb24gY2Fubm90IHdvcmsgd2l0aG91dCBhICdyb3V0aW5nU2VydmljZScgb24gdGhlIG1haW4gQXBwQ29tcG9uZW50XCIpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcmVkIGV2ZXJ5IHRpbWUgdGhpcyBjb250cm9sbGVyIGlzIGEgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUm91dGVNYXRjaGVkKCk6IHZvaWQge1xuXHRcdC8qKi9cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25Sb3V0ZU1hdGNoZWRGaW5pc2hlZCgpOiB2b2lkIHtcblx0XHQvKiovXG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uQmVmb3JlQmluZGluZyhfYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBfbVBhcmFtZXRlcnM/OiB1bmtub3duKTogdm9pZCB7fVxuXG5cdGJlZm9yZVNldEJpbmRpbmdDb250ZXh0KGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge1xuXHRcdHRoaXMub25CZWZvcmVCaW5kaW5nKGJpbmRpbmdDb250ZXh0LCBfbVBhcmFtZXRlcnMpO1xuXHRcdGNvbnN0IG9Sb3V0aW5nID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkucm91dGluZztcblx0XHRpZiAob1JvdXRpbmcgJiYgb1JvdXRpbmcub25CZWZvcmVCaW5kaW5nKSB7XG5cdFx0XHRvUm91dGluZy5vbkJlZm9yZUJpbmRpbmcoYmluZGluZ0NvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25BZnRlckJpbmRpbmcoYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBfbVBhcmFtZXRlcnM/OiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5vbkNvbnRleHRCb3VuZFRvVmlldyhiaW5kaW5nQ29udGV4dCk7XG5cdH1cblxuXHRhZnRlclNldEJpbmRpbmdDb250ZXh0KGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5vbkFmdGVyQmluZGluZyhiaW5kaW5nQ29udGV4dCwgeyAuLi5fbVBhcmFtZXRlcnMsIGRlZmVycmVkQ3JlYXRpb246IHRydWUgfSk7XG5cdFx0Y29uc3Qgb1JvdXRpbmcgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5yb3V0aW5nO1xuXHRcdGlmIChvUm91dGluZyAmJiBvUm91dGluZy5vbkFmdGVyQmluZGluZykge1xuXHRcdFx0b1JvdXRpbmcub25BZnRlckJpbmRpbmcoYmluZGluZ0NvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIE1ldGhvZHMgdHJpZ2dlcmluZyBhIG5hdmlnYXRpb24gYWZ0ZXIgYSB1c2VyIGFjdGlvblxuXHQvLyAoZS5nLiBjbGljayBvbiBhIHRhYmxlIHJvdywgYnV0dG9uLCBldGMuLi4pXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gc05hdmlnYXRpb25UYXJnZXROYW1lIE5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdGFyZ2V0XG5cdCAqIEBwYXJhbSBiUHJlc2VydmVIaXN0b3J5IFRydWUgdG8gZm9yY2UgdGhlIG5ldyBVUkwgdG8gYmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgYnJvd3NlciBoaXN0b3J5IChubyByZXBsYWNlKVxuXHQgKiBAcGFyYW0gZGVsYXllZFVzYWdlIFRydWUgdG8gcmV0dXJuIGEgZnVuY3Rpb24gZm9yIGV4ZWN1dGluZyB0aGUgbmF2aWdhdGlvbiwgRmFsc2UgdG8gZXhlY3V0ZSB0aGUgbmF2aWdhdGlvbiBpbW1lZGlhdGVseVxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb1RhcmdldChcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzTmF2aWdhdGlvblRhcmdldE5hbWU6IHN0cmluZyxcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiB0cnVlXG5cdCk6IFByb21pc2U8KCkgPT4gdm9pZD47XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9UYXJnZXQoXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c05hdmlnYXRpb25UYXJnZXROYW1lOiBzdHJpbmcsXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHZvaWQ+IHtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24gPVxuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQgJiZcblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50LmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uICYmXG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihzTmF2aWdhdGlvblRhcmdldE5hbWUpO1xuXHRcdGlmIChvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxSb3V0ZSA9IG9OYXZpZ2F0aW9uQ29uZmlndXJhdGlvbi5kZXRhaWw7XG5cdFx0XHRjb25zdCBzUm91dGVOYW1lID0gb0RldGFpbFJvdXRlLnJvdXRlO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlck1hcHBpbmcgPSBvRGV0YWlsUm91dGUucGFyYW1ldGVycztcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUbyhvQ29udGV4dCwgc1JvdXRlTmFtZSwgbVBhcmFtZXRlck1hcHBpbmcsIGJQcmVzZXJ2ZUhpc3RvcnksIGRlbGF5ZWRVc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUbyhvQ29udGV4dCwgbnVsbCwgbnVsbCwgYlByZXNlcnZlSGlzdG9yeSwgZGVsYXllZFVzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBIYXNoIHdlJ3JlIG5hdmlnYXRpbmcgdG8uXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG5hdmlnYXRpb25UYXJnZXROYW1lIE5hbWUgb2YgdGhlIG5hdmlnYXRpb24gdGFyZ2V0XG5cdCAqIEByZXR1cm5zIFRoZSBIYXNoIHdlJ3JlIG5hdmlnYXRpbmcgdG9cblx0ICovXG5cdGFzeW5jIGdldEhhc2hGb3JOYXZpZ2F0aW9uKGNvbnRleHQ6IENvbnRleHQsIG5hdmlnYXRpb25UYXJnZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Db25maWd1cmF0aW9uID0gdGhpcz8uX29QYWdlQ29tcG9uZW50Py5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0TmFtZSk7XG5cdFx0aWYgKG5hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCBkZXRhaWxSb3V0ZSA9IG5hdmlnYXRpb25Db25maWd1cmF0aW9uLmRldGFpbDtcblx0XHRcdGNvbnN0IHJvdXRlTmFtZSA9IGRldGFpbFJvdXRlLnJvdXRlO1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IGRldGFpbFJvdXRlLnBhcmFtZXRlcnM7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmdldEhhc2hGcm9tUm91dGUoY29udGV4dCwgcm91dGVOYW1lLCBwYXJhbWV0ZXJNYXBwaW5nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRIYXNoRnJvbVJvdXRlKGNvbnRleHQsIG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNwZWNpZmllZCBuYXZpZ2F0aW9uIHRhcmdldCByb3V0ZS5cblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb1BhcmFtZXRlcnNdIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIHJvdXRlIHRvIGNyZWF0ZSB0aGUgdGFyZ2V0IGhhc2hcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZywgb1BhcmFtZXRlcnM/OiBvYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLm5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIE9wdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVkIHRvICd0cnVlJyB3aGVuIHRoZSBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCwgJ2ZhbHNlJyBpZiB0aGUgbmF2aWdhdGlvbiBkaWQgbm90IGhhcHBlblxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb0NvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKGNvbnRleHQuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdGlmIChwYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPy5tb2RlID09PSBcIkFzeW5jXCIpIHtcblx0XHRcdFx0Ly8gdGhlIGNvbnRleHQgaXMgZWl0aGVyIGNyZWF0ZWQgYXN5bmMgKFByb21pc2UpXG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYWN0aXZhdGUgdGhlIHJvdXRlTWF0Y2hTeW5jaHJvIG9uIHRoZSBSb3V0ZXJQcm94eSB0byBhdm9pZCB0aGF0XG5cdFx0XHRcdC8vIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gbmF2aWdhdGVUb0NvbnRleHQgY29uZmxpY3RzIHdpdGggdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5hY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24oKTtcblxuXHRcdFx0XHRwYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzLmNyZWF0ZUNvbnRleHRQcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oYXN5bmMgKGNyZWF0ZWRDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBvbmNlIHRoZSBjb250ZXh0IGlzIHJldHVybmVkIHdlIG5hdmlnYXRlIGludG8gaXRcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm5hdmlnYXRlVG9Db250ZXh0KGNyZWF0ZWRDb250ZXh0LCB7XG5cdFx0XHRcdFx0XHRcdGNoZWNrTm9IYXNoQ2hhbmdlOiBwYXJhbWV0ZXJzLmNoZWNrTm9IYXNoQ2hhbmdlLFxuXHRcdFx0XHRcdFx0XHRlZGl0YWJsZTogcGFyYW1ldGVycy5lZGl0YWJsZSxcblx0XHRcdFx0XHRcdFx0cGVyc2lzdE9QU2Nyb2xsOiBwYXJhbWV0ZXJzLnBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdFx0XHRcdFx0dXBkYXRlRkNMTGV2ZWw6IHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwsXG5cdFx0XHRcdFx0XHRcdGZvcmNlRm9jdXM6IHBhcmFtZXRlcnMuZm9yY2VGb2N1c1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2l0aCB0aGUgYXN5bmMgY29udGV4dFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAocGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubW9kZSAhPT0gXCJEZWZlcnJlZFwiKSB7XG5cdFx0XHRcdC8vIE5hdmlnYXRlIHRvIGEgbGlzdCBiaW5kaW5nIG5vdCB5ZXQgc3VwcG9ydGVkXG5cdFx0XHRcdHRocm93IFwibmF2aWdhdGlvbiB0byBhIGxpc3QgYmluZGluZyBpcyBub3QgeWV0IHN1cHBvcnRlZFwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocGFyYW1ldGVycy5jYWxsRXh0ZW5zaW9uKSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cblx0XHRcdC8vIFN0b3JpbmcgdGhlIHNlbGVjdGVkIGNvbnRleHQgdG8gdXNlIGl0IGluIGludGVybmFsIHJvdXRlIG5hdmlnYXRpb24gaWYgbmVjZXNzYXJ5LlxuXHRcdFx0bGV0IGNvbnRleHRUb05hdmlnYXRlOiBDb250ZXh0IHwgbnVsbCA9IGNvbnRleHQ7XG5cdFx0XHRsZXQgaGlkZGVuQmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsID09PSAtMSkge1xuXHRcdFx0XHQvLyBJZiB3ZSdyZSBuYXZpZ2F0aW5nIGJhY2ssIHdlIG5lZWQgdG8gZmluZCB0aGUgXCJwYXJlbnRcIiBjb250ZXh0XG5cdFx0XHRcdGNvbnN0IGJhY2tQYXRoID0gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmdldFBhdGhUb05hdmlnYXRlQmFjayhjb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdC8vIEFzIHdlIGRvbid0IGNhbGwgdGhlIGV4dGVuc2lvbiB3aGVuIG5hdmlnYXRpbmcgYmFjayB0byB0aGUgTFIsIGJhY2tQYXRoIGlzIG5ldmVyIGVtcHR5IHNvIHdlIGNhbiBzYWZlbHkgY3JlYXRlIGEgY29udGV4dFxuXHRcdFx0XHRoaWRkZW5CaW5kaW5nID0gY29udGV4dC5nZXRNb2RlbCgpPy5iaW5kQ29udGV4dChiYWNrUGF0aCk7XG5cdFx0XHRcdGNvbnRleHRUb05hdmlnYXRlID0gaGlkZGVuQmluZGluZz8uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvdmVycmlkZU5hdiA9IGF3YWl0IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmcub25CZWZvcmVOYXZpZ2F0aW9uKHsgYmluZGluZ0NvbnRleHQ6IGNvbnRleHRUb05hdmlnYXRlIH0pO1xuXHRcdFx0aGlkZGVuQmluZGluZz8uZGVzdHJveSgpO1xuXHRcdFx0aWYgKG92ZXJyaWRlTmF2KSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgY29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cGFyYW1ldGVycy5GQ0xMZXZlbCA9IHRoaXMuZ2V0RkNMTGV2ZWwoKTtcblxuXHRcdC8vIEluIGNhc2Ugd2UncmUgbmF2aWdhdGluZyBmcm9tIGEgdGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIHRoZXJlJ3Mgc3BlY2lhbCBoYW5kbGluZyBmb3IgY29sbGFib3JhdGlvbiBhbmQgdHJlZSB0YWJsZS5cblx0XHQvLyBXZSBtYXkgbm90IG5hdmlnYXRlIHRvIHRoZSBjb250ZXh0IHRoZSB1c2VyIGNsaWNrZWQgb24uXG5cdFx0aWYgKHBhcmFtZXRlcnMucmVhc29uID09PSBOYXZpZ2F0aW9uUmVhc29uLlJvd1ByZXNzICYmIGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0XHRcdGlmIChpc1BhdGhPbkRyYWZ0Um9vdChjb250ZXh0LmdldFBhdGgoKSwgbWV0YU1vZGVsKSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Rm9yTmF2aWdhdGlvbiA9XG5cdFx0XHRcdFx0KGF3YWl0IHRoaXMuZ2V0Q29udGV4dEZvck5hdmlnYXRpb25XaXRoQ29sbGFib3JhdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKSkgPz9cblx0XHRcdFx0XHQoYXdhaXQgdGhpcy5nZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUoY29udGV4dCkpO1xuXG5cdFx0XHRcdC8vIFVzZSBhbm90aGVyIGluc3RhbmNlIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdGlmIChjb250ZXh0Rm9yTmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0Rm9yTmF2aWdhdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzRm9yUHJldmlvdXNDb250ZXh0KCk7XG5cdFx0bGV0IHNraXBIYXNoR3VhcmRDaGVjaztcblx0XHRjb25zdCBoaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5fb0FwcENvbXBvbmVudD8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9IHRoaXMuX29BcHBDb21wb25lbnQ/LmdldE1vZGVsKFwidWlcIik/LmdldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCkgPz8gdHJ1ZTtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmlzRmNsRW5hYmxlZCgpICYmXG5cdFx0XHR0aGlzLmdldEZDTExldmVsKCkgPT09IDAgJiZcblx0XHRcdGhpZGRlbkRyYWZ0RW5hYmxlZCAmJlxuXHRcdFx0IWlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0c2tpcEhhc2hHdWFyZENoZWNrID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvQ29udGV4dChcblx0XHRcdGNvbnRleHQsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0dGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuX29UYXJnZXRJbmZvcm1hdGlvbixcblx0XHRcdHNraXBIYXNoR3VhcmRDaGVja1xuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250ZXh0IHRvIHVzZSBmb3IgbmF2aWdhdGlvbiBpbiBjYXNlIHdlJ3JlIG5hdmlnYXRpbmcgdG8gYSBkcmFmdCBpbnN0YW5jZSBmcm9tIHRoZSBMUiBhbmQgd2UncmUgaW4gYSBjb2xsYWJvcmF0aW9uIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gb3JpZ2luYWxDb250ZXh0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHRvIHVzZSBmb3IgbmF2aWdhdGlvbiBpZiBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBjb250ZXh0LCBudWxsIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbldpdGhDb2xsYWJvcmF0aW9uKFxuXHRcdG9yaWdpbmFsQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0KTogUHJvbWlzZTxDb250ZXh0IHwgbnVsbD4ge1xuXHRcdGNvbnN0IG1vZGVsID0gb3JpZ2luYWxDb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCkgJiYgb3JpZ2luYWxDb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKSB7XG5cdFx0XHQvLyBJZiB3ZSdyZSBpbiBhIGNvbGxhYm9yYXRpb24gYXBwbGljYXRpb24sIGFuZCB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGEgZHJhZnQgaW5zdGFuY2UgZnJvbSB0aGUgTFIsXG5cdFx0XHQvLyBXZSB3YW50IHRvIGNoZWNrIGlmIHRoZSBkcmFmdCBpbnN0YW5jZSBleGlzdHMgZmlyc3QuIE90aGVyd2lzZSB3ZSBuYXZpZ2F0ZSB0byB0aGUgb3JpZ2luYWwgKGRyYWZ0KSB2ZXJzaW9uLlxuXHRcdFx0bGV0IGRyYWZ0T3JBY3RpdmVDb250ZXh0ID0gYXdhaXQgZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQob3JpZ2luYWxDb250ZXh0KTtcblxuXHRcdFx0aWYgKGRyYWZ0T3JBY3RpdmVDb250ZXh0ICE9PSBudWxsICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQYXRoKCkgIT09IGRyYWZ0T3JBY3RpdmVDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHQvLyBOb3RpZnkgdGhlIHVzZXIgdGhhdCB3ZSBoYXZlIG5hdmlnYXRlZCB0byB0aGUgc2F2ZWQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQob3JpZ2luYWxDb250ZXh0LmdldFBhdGgoKSkpO1xuXHRcdFx0XHRwYXJhbWV0ZXJzLnJlZGlyZWN0ZWRUb05vbkRyYWZ0ID1cblx0XHRcdFx0XHQob2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZSBhcyB1bmtub3duIGFzIHN0cmluZykgPz9cblx0XHRcdFx0XHRvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUubmFtZTtcblxuXHRcdFx0XHRpZiAodGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdC8vIEZDTDogcmVwbGFjZSB0aGUgY29udGV4dCBpbiB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFRvUmVwbGFjZVdpdGggPSBtb2RlbC5nZXRLZWVwQWxpdmVDb250ZXh0KGRyYWZ0T3JBY3RpdmVDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdFx0b3JpZ2luYWxDb250ZXh0LnJlcGxhY2VXaXRoKGNvbnRleHRUb1JlcGxhY2VXaXRoKTtcblx0XHRcdFx0XHRkcmFmdE9yQWN0aXZlQ29udGV4dCA9IGNvbnRleHRUb1JlcGxhY2VXaXRoOyAvLyBVc2UgdGhlIGtlZXAtYWxpdmUgY29udGV4dCBmb3IgbmF2aWdhdGlvblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEZ1bGxzY3JlZW46IHRyaWdnZXIgYSByZWZyZXNoIG9mIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0XHRFZGl0U3RhdGUuc2V0RWRpdFN0YXRlRGlydHkoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFVzZSB0aGUgc2F2ZWQgaW5zdGFuY2UgZm9yIG5hdmlnYXRpb25cblx0XHRcdFx0cmV0dXJuIGRyYWZ0T3JBY3RpdmVDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgY29udGV4dFxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGV4dCB0byB1c2UgZm9yIG5hdmlnYXRpb24gaW4gY2FzZSB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGFuIGFjdGl2ZSBpbnN0YW5jZSBmcm9tIHRoZSBMUiBhbmQgd2UncmUgaW4gYSBUcmVlIG9yIEFuYWx5dGljYWwgdGFibGUuXG5cdCAqIEBwYXJhbSBvcmlnaW5hbENvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgdG8gdXNlIGZvciBuYXZpZ2F0aW9uIGlmIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIGNvbnRleHQsIG51bGwgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldENvbnRleHRGb3JOYXZpZ2F0aW9uRnJvbVRyZWVPckFuYWx5dGljYWxUYWJsZShvcmlnaW5hbENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPENvbnRleHQgfCBudWxsPiB7XG5cdFx0Y29uc3QgcGFyZW50QmluZGluZyA9IG9yaWdpbmFsQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0aWYgKCFwYXJlbnRCaW5kaW5nLmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHQvLyBUaGUgY29udGV4dCBkb2Vzbid0IGJlbG9uZyB0byBhIGxpc3QgYmluZGluZ1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gcGFyZW50QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzXG5cdFx0XHR8IHsgaGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nOyBncm91cD86IG9iamVjdDsgYWdncmVnYXRlPzogb2JqZWN0IH1cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYWdncmVnYXRpb24/LmhpZXJhcmNoeVF1YWxpZmllciAmJiAhYWdncmVnYXRpb24/Lmdyb3VwICYmICFhZ2dyZWdhdGlvbj8uYWdncmVnYXRlKSB7XG5cdFx0XHQvLyBUaGUgY29udGV4dCBkb2Vzbid0IGJlbG9uZyB0byBhIGhpZXJhcmNoaWNhbC9hbmFseXRpY2FsIGxpc3QgYmluZGluZ1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKG9yaWdpbmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSB0cnVlICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0RyYWZ0RW50aXR5XCIpID09PSB0cnVlKSB7XG5cdFx0XHQvLyBJZiB3ZSdyZSBpbiBhIFRyZWUvQW5hbHl0aWNhbCB0YWJsZSwgYW5kIHdlJ3JlIG5hdmlnYXRpbmcgdG8gYW4gYWN0aXZlIGluc3RhbmNlIGluc3RhbmNlIHRoYXQgaGFzIGEgZHJhZnQsXG5cdFx0XHQvLyAtLT4gV2UgdHJ5IHRvIG5hdmlnYXRlIHRvIHRoZSBkcmFmdCBpbnN0YW5jZSAoaWYgaXQgc3RpbGwgZXhpc3RzKVxuXHRcdFx0Y29uc3QgZHJhZnRPckFjdGl2ZUNvbnRleHQgPSBhd2FpdCBnZXREcmFmdE9yQWN0aXZlQ29udGV4dChvcmlnaW5hbENvbnRleHQpO1xuXG5cdFx0XHRpZiAoZHJhZnRPckFjdGl2ZUNvbnRleHQgIT09IG51bGwgJiYgb3JpZ2luYWxDb250ZXh0LmdldFBhdGgoKSAhPT0gZHJhZnRPckFjdGl2ZUNvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdC8vIFVzZSB0aGUgZHJhZnQgaW5zdGFuY2UgZm9yIG5hdmlnYXRpb25cblx0XHRcdFx0cmV0dXJuIGRyYWZ0T3JBY3RpdmVDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgY29udGV4dFxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBiYWNrd2FyZHMgZnJvbSBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIGZyb21cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCwgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsID0gLTE7XG5cblx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgZm9yd2FyZHMgdG8gYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICh0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHRwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsID0gMTtcblxuXHRcdHJldHVybiB0aGlzLm5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBiYWNrIGluIGhpc3RvcnkgaWYgdGhlIGN1cnJlbnQgaGFzaCBjb3JyZXNwb25kcyB0byBhIHRyYW5zaWVudCBzdGF0ZS5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZUJhY2tGcm9tVHJhbnNpZW50U3RhdGUoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpO1xuXG5cdFx0Ly8gaWYgdHJpZ2dlcmVkIHdoaWxlIG5hdmlnYXRpbmcgdG8gKC4uLiksIHdlIG5lZWQgdG8gbmF2aWdhdGUgYmFja1xuXHRcdGlmIChzSGFzaC5pbmNsdWRlcyhcIiguLi4pXCIpKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVyUHJveHkubmF2QmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBhbiBlcnJvciAoaWxsdXN0cmF0ZWQgbWVzc2FnZSkgaW4gdGhlIHBhZ2UuXG5cdCAqIEBwYXJhbSBzRXJyb3JNZXNzYWdlXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2Vcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9NZXNzYWdlUGFnZShzRXJyb3JNZXNzYWdlOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdGlmICh0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwiaS1hY3Rpb249Y3JlYXRlXCIpIHx8IHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJpLWFjdGlvbj1hdXRvQ3JlYXRlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5Lm5hdlRvSGFzaCh0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0RGVmYXVsdENyZWF0ZUhhc2goKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2Uoc0Vycm9yTWVzc2FnZSwgbVBhcmFtZXRlcnMsIHRoaXMuZ2V0RkNMTGV2ZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0YXRlIGlzIGltcGFjdGVkIGJ5IHRoZSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KG9Db250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQpO1xuXHR9XG5cblx0X2lzVmlld1BhcnRPZlJvdXRlKHJvdXRlSW5mb3JtYXRpb24/OiBSb3V0ZUluZm9ybWF0aW9uKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYVRhcmdldHMgPSByb3V0ZUluZm9ybWF0aW9uPy50YXJnZXRzO1xuXHRcdGlmICghYVRhcmdldHMgfHwgIWFUYXJnZXRzLmluY2x1ZGVzKHRoaXMuX29UYXJnZXRJbmZvcm1hdGlvbi50YXJnZXROYW1lKSkge1xuXHRcdFx0Ly8gSWYgdGhlIHRhcmdldCBmb3IgdGhpcyB2aWV3IGhhcyBhIHZpZXcgbGV2ZWwgZ3JlYXRlciB0aGFuIHRoZSByb3V0ZSBsZXZlbCwgaXQgbWVhbnMgdGhpcyB2aWV3IGNvbWVzIFwiYWZ0ZXJcIiB0aGUgcm91dGVcblx0XHRcdC8vIGluIHRlcm1zIG9mIG5hdmlnYXRpb24uXG5cdFx0XHQvLyBJbiBzdWNoIGNhc2UsIHdlIHJlbW92ZSBpdHMgYmluZGluZyBjb250ZXh0LCB0byBhdm9pZCB0aGlzIHZpZXcgdG8gaGF2ZSBkYXRhIGlmIHdlIG5hdmlnYXRlIHRvIGl0IGxhdGVyIG9uXG5cdFx0XHQvLyBUaGlzIGlzIGRvbmUgaW4gYSB0aW1lb3V0IHRvIGFsbG93IGZvciBmb2N1c291dCBldmVudHMgdG8gYmUgcHJvY2Vzc2VkIGJlZm9yZSBwcm9wZXJseSBpbiBjb2xsYWJvcmF0aXZlIGRyYWZ0XG5cdFx0XHRpZiAoKHRoaXMuX29UYXJnZXRJbmZvcm1hdGlvbi52aWV3TGV2ZWwgPz8gMCkgPj0gKHJvdXRlSW5mb3JtYXRpb24/LnJvdXRlTGV2ZWwgPz8gMCkpIHtcblx0XHRcdFx0dGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZShcblx0XHRcdFx0XHRuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChyb3V0ZUluZm9ybWF0aW9uPy5yb3V0ZUxldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIHJvdXRlIGhhcyBsZXZlbCAwIC0tPiB3ZSBuZWVkIHRvIGxlYXZlIHRoZSBjb2xsYWJvcmF0aW9uIHNlc3Npb24gYXMgbm8gT1AgaXMgZGlzcGxheWVkXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5iYXNlLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0QmluZGluZ0NvbnRleHQobnVsbCk7IC8vIFRoaXMgYWxzbyBjYWxsIHNldEtlZXBBbGl2ZShmYWxzZSkgb24gdGhlIGN1cnJlbnQgY29udGV4dFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0X2J1aWxkQmluZGluZ1BhdGgoXG5cdFx0cm91dGVBcmd1bWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG9iamVjdD4sXG5cdFx0YmluZGluZ1BhdHRlcm46IHN0cmluZyxcblx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvXG5cdCk6IHsgcGF0aDogc3RyaW5nOyBkZWZlcnJlZDogYm9vbGVhbiB9IHtcblx0XHRsZXQgcGF0aCA9IGJpbmRpbmdQYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRsZXQgZGVmZXJyZWQgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3Qgc0tleSBpbiByb3V0ZUFyZ3VtZW50cykge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gcm91dGVBcmd1bWVudHNbc0tleV07XG5cblx0XHRcdGlmICh0eXBlb2Ygc1ZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc1ZhbHVlID09PSBcIi4uLlwiICYmIGJpbmRpbmdQYXR0ZXJuLmluY2x1ZGVzKGB7JHtzS2V5fX1gKSkge1xuXHRcdFx0XHRkZWZlcnJlZCA9IHRydWU7XG5cdFx0XHRcdC8vIFNvbWV0aW1lcyBpbiBwcmVmZXJyZWRNb2RlID0gY3JlYXRlLCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24gaW4gYmFja2dyb3VuZCB3aGVuIHRoZVxuXHRcdFx0XHQvLyBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZyBzaG93cyB1cCwgc2V0dGluZyBiVGFyZ2V0RWRpdGFibGUgcGFzc2VzIGVkaXRhYmxlIGFzIHRydWVcblx0XHRcdFx0Ly8gdG8gb25CZWZvcmVCaW5kaW5nIGluIF9iaW5kVGFyZ2V0UGFnZSBmdW5jdGlvblxuXHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iVGFyZ2V0RWRpdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZShgeyR7c0tleX19YCwgc1ZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChyb3V0ZUFyZ3VtZW50c1tcIj9xdWVyeVwiXSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KT8uW1wiaS1hY3Rpb25cIl0/LmluY2x1ZGVzKFwiY3JlYXRlXCIpKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGUgYmluZGluZyBwYXRoIGlzIGFsd2F5cyBhYnNvbHV0ZVxuXHRcdGlmIChwYXRoICYmIHBhdGhbMF0gIT09IFwiL1wiKSB7XG5cdFx0XHRwYXRoID0gYC8ke3BhdGh9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4geyBwYXRoLCBkZWZlcnJlZCB9O1xuXHR9XG5cblx0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0Ly8gTWV0aG9kcyB0byBiaW5kIHRoZSBwYWdlIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogQnVpbGRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZnJvbSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzLCBhbmQgYmluZCB0aGUgcGFnZSBhY2NvcmRpbmdseS5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKFxuXHRcdG9FdmVudDogRXZlbnQ8e1xuXHRcdFx0cm91dGVJbmZvcm1hdGlvbj86IFJvdXRlSW5mb3JtYXRpb247XG5cdFx0XHRyb3V0ZVBhdHRlcm46IHN0cmluZztcblx0XHRcdG5hdmlnYXRpb25JbmZvOiBSb3V0aW5nTmF2aWdhdGlvbkluZm87XG5cdFx0XHRhcmd1bWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG9iamVjdD47XG5cdFx0fT5cblx0KTogdm9pZCB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIHRhcmdldCBmb3IgdGhpcyB2aWV3IGlzIHBhcnQgb2YgdGhlIGV2ZW50IHRhcmdldHMgKGkuZS4gaXMgYSB0YXJnZXQgZm9yIHRoZSBjdXJyZW50IHJvdXRlKS5cblx0XHQvLyBJZiBub3QsIHdlIGRvbid0IG5lZWQgdG8gYmluZCBpdCAtLT4gcmV0dXJuXG5cdFx0aWYgKCF0aGlzLl9pc1ZpZXdQYXJ0T2ZSb3V0ZShvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicm91dGVJbmZvcm1hdGlvblwiKSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXRyaWV2ZSB0aGUgYmluZGluZyBjb250ZXh0IHBhdHRlcm5cblx0XHRsZXQgYmluZGluZ1BhdHRlcm47XG5cdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50ICYmIHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0UGF0dGVybikge1xuXHRcdFx0YmluZGluZ1BhdHRlcm4gPSB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dFBhdHRlcm4oKTtcblx0XHR9XG5cdFx0YmluZGluZ1BhdHRlcm4gPSBiaW5kaW5nUGF0dGVybiA/PyB0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24uY29udGV4dFBhdHRlcm47XG5cblx0XHRpZiAoYmluZGluZ1BhdHRlcm4gPT09IG51bGwgfHwgYmluZGluZ1BhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gRG9uJ3QgZG8gdGhpcyBpZiB3ZSBhbHJlYWR5IGdvdCBzVGFyZ2V0ID09ICcnLCB3aGljaCBpcyBhIHZhbGlkIHRhcmdldCBwYXR0ZXJuXG5cdFx0XHRiaW5kaW5nUGF0dGVybiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJyb3V0ZVBhdHRlcm5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gUmVwbGFjZSB0aGUgcGFyYW1ldGVycyBieSB0aGVpciB2YWx1ZXMgaW4gdGhlIGJpbmRpbmcgY29udGV4dCBwYXR0ZXJuXG5cdFx0Y29uc3QgbUFyZ3VtZW50cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkuYXJndW1lbnRzO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYXZpZ2F0aW9uSW5mb1wiKTtcblx0XHRjb25zdCB7IHBhdGgsIGRlZmVycmVkIH0gPSB0aGlzLl9idWlsZEJpbmRpbmdQYXRoKG1Bcmd1bWVudHMsIGJpbmRpbmdQYXR0ZXJuLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXG5cdFx0dGhpcy5vblJvdXRlTWF0Y2hlZCgpO1xuXG5cdFx0bGV0IGJpbmRQcm9taXNlO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCk7XG5cdFx0aWYgKGRlZmVycmVkKSB7XG5cdFx0XHRiaW5kUHJvbWlzZSA9IHRoaXMuX2JpbmREZWZlcnJlZChwYXRoLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uICE9PSBOYXZpZ2F0aW9uUmVhc29uLkVkaXRGbG93QWN0aW9uICYmXG5cdFx0XHQodGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWVkaXRcIikgfHwgKHRoaXMuX29QYWdlQ29tcG9uZW50Py5pc09wZW5JbkVkaXRNb2RlPy4oKSA/PyBmYWxzZSkpXG5cdFx0KSB7XG5cdFx0XHRiaW5kUHJvbWlzZSA9IHRoaXMuX2JpbmRQYWdlRm9yRWRpdChwYXRoLCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJpbmRQcm9taXNlID0gdGhpcy5fYmluZFBhZ2UocGF0aCwgb01vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblxuXHRcdGJpbmRQcm9taXNlXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMub25Sb3V0ZU1hdGNoZWRGaW5pc2hlZCgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHBhZ2UgYmluZGluZyBcIiArIGVycm9yLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnVwZGF0ZVVJU3RhdGVGb3JWaWV3KHRoaXMuX29WaWV3LCB0aGlzLmdldEZDTExldmVsKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmVycmVkIGJpbmRpbmcgKGR1cmluZyBvYmplY3QgY3JlYXRpb24pLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aCBUaGUgcGF0aCB0byB0aGUgZGVmZmVyZWQgY29udGV4dFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX2JpbmREZWZlcnJlZCh0YXJnZXRQYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG51bGwsIHsgZWRpdGFibGU6IG5hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSB9KTtcblxuXHRcdGlmICghbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgfHwgbmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMubW9kZSA9PT0gXCJEZWZlcnJlZFwiKSB7XG5cdFx0XHQvLyBlaXRoZXIgdGhlIGNvbnRleHQgc2hhbGwgYmUgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHBhZ2UgKGRlZmVycmVkIENvbnRleHQpIG9yIGl0IHNoYWxsXG5cdFx0XHQvLyBiZSBjcmVhdGVkIGFzeW5jIGJ1dCB0aGUgdXNlciByZWZyZXNoZWQgdGhlIHBhZ2UgLyBib29rbWFya2VkIHRoaXMgVVJMXG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHkgdGhlIHRhcmdldCBjb21wb25lbnQgY3JlYXRlcyB0aGlzIGRvY3VtZW50IGJ1dCB3ZSBzaGFsbCBtb3ZlIHRoaXMgdG9cblx0XHRcdC8vIGEgY2VudHJhbCBwbGFjZVxuXHRcdFx0aWYgKHRoaXMuX29QYWdlQ29tcG9uZW50ICYmIHRoaXMuX29QYWdlQ29tcG9uZW50LmNyZWF0ZURlZmVycmVkQ29udGV4dCkge1xuXHRcdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5jcmVhdGVEZWZlcnJlZENvbnRleHQoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LnBhcmVudENvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/LmRhdGEsXG5cdFx0XHRcdFx0ISFuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBjb250ZXh0IHRvIGF2b2lkIHNob3dpbmcgb2xkIGRhdGFcblx0XHR0aGlzLl9zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblxuXHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSBwYWdlIGZyb20gYSBwYXRoLCBpZiB0aGUgYXBwIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdC5cblx0ICpcblx0ICogSWYgdGhlIGNvbnRleHQgcG9pbnRzIHRvIGFuIGFjdGl2ZSBlbnRpdHksIGl0IGlzIGRpcmVjdGx5IGNvbnZlcnRlZCB0byBkcmFmdCB1c2luZyB0aGUgRWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb24uXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEBwYXJhbSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIG9uY2UgdGhlIGJpbmRpbmcgaGFzIGJlZW4gc2V0IG9uIHRoZSBwYWdlXG5cdCAqL1xuXHRhc3luYyBfYmluZFBhZ2VGb3JFZGl0KHRhcmdldFBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYmluZFBhZ2VUb0NvbnRleHQobnVsbCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKSk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlY2huaWNhbFBhdGg6IHN0cmluZyA9IGF3YWl0IHJlc29sdmVQYXRoKHRhcmdldFBhdGgsIG1vZGVsLCB0aGlzLl9vUm91dGluZ1NlcnZpY2UsIHRoaXMuX29Sb3V0ZXIpO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBmb3Igc3RpY2t5ICYgc3RpY2t5IGVkaXQgc2Vzc2lvblxuXHRcdFx0Y29uc3QgaXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0XHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChtZXRhTW9kZWwpO1xuXHRcdFx0aWYgKHRlY2huaWNhbFBhdGguaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpIHx8IChpc1N0aWNreSAmJiAhaXNTdGlja3lFZGl0TW9kZSkpIHtcblx0XHRcdFx0Ly8gY3JlYXRlIGNvbnRleHQgb3IgdXNlIHRoZSBvbmUgdGhlIHVzZXIgY2xpY2tlZCBvblxuXHRcdFx0XHRjb25zdCBhY3RpdmVDb250ZXh0ID1cblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy51c2VDb250ZXh0Py5nZXRQYXRoKCkgPT09IHRlY2huaWNhbFBhdGhcblx0XHRcdFx0XHRcdD8gbmF2aWdhdGlvblBhcmFtZXRlcnMudXNlQ29udGV4dFxuXHRcdFx0XHRcdFx0OiB0aGlzLl9jcmVhdGVDb250ZXh0KHRlY2huaWNhbFBhdGgsIG1vZGVsKTtcblxuXHRcdFx0XHQvLyBlZGl0IGRvY3VtZW50XG5cdFx0XHRcdHJldHVybiBhd2FpdCB0aGlzLmJhc2UuZWRpdEZsb3cuZWRpdERvY3VtZW50KGFjdGl2ZUNvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2JpbmRQYWdlVG9QYXRoKHRlY2huaWNhbFBhdGgsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdFx0dGhpcy5uYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIiksIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IChlcnJvciBhcyBFcnJvcikubWVzc2FnZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBmcm9tIGEgcGF0aC5cblx0ICogQHBhcmFtIHRhcmdldFBhdGggVGhlIHBhdGggdG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBiaW5kaW5nIG9uIHRoZSBwYWdlIGlzIHNldFxuXHQgKi9cblx0YXN5bmMgX2JpbmRQYWdlKHRhcmdldFBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gXCJcIikge1xuXHRcdFx0Ly8gVGhlIHBhZ2UgYmluZGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LCB0byBtYWtlIHN1cmUgX29uUm91dGVNYXRjaGVkIGlzIGNhbGxlZCBmb3IgYWxsIHRhcmdldHMgYmVmb3JlLCBhbmQgdGhlIGJpbmRpbmcgY2xlYW51cCBwcm9taXNlcyBhcmUgcHJvcGVybHkgc3RvcmVkIGluIHRoZSByb3V0aW5nIHNlcnZpY2UuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG51bGwsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgbW9kZWwsIHRoaXMuX29Sb3V0aW5nU2VydmljZSwgdGhpcy5fb1JvdXRlcik7XG5cdFx0XHR0aGlzLl9iaW5kUGFnZVRvUGF0aCh0ZWNobmljYWxQYXRoLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe30pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKiBAcGFyYW0gc1RhcmdldFBhdGggVGhlIHBhdGggdG8gYnVpbGQgdGhlIGNvbnRleHQgKHRoaXMgaXMgYSBwYXRoIGluIHRoZSBtb2RlbCwgc28gb25seSB0ZWNobmljYWwga2V5cyBhcmUgYWxsb3dlZCkuXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb1BhdGgoc1RhcmdldFBhdGg6IHN0cmluZywgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IG9DdXJyZW50Q29udGV4dCA9IHRoaXMuX2dldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRzQ3VycmVudFBhdGggPSBvQ3VycmVudENvbnRleHQgJiYgb0N1cnJlbnRDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Vc2VDb250ZXh0ID0gb05hdmlnYXRpb25QYXJhbWV0ZXJzLnVzZUNvbnRleHQgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblxuXHRcdC8vIFdlIHNldCB0aGUgYmluZGluZyBjb250ZXh0IG9ubHkgaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHQvLyBvciBpZiB3ZSBoYXZlIGEgY29udGV4dCBhbHJlYWR5IHNlbGVjdGVkXG5cdFx0aWYgKG9Vc2VDb250ZXh0ICYmIG9Vc2VDb250ZXh0LmdldFBhdGgoKSA9PT0gc1RhcmdldFBhdGgpIHtcblx0XHRcdGlmIChvVXNlQ29udGV4dCAhPT0gb0N1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGxldCBzaG91bGRSZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHQvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNvbnRleHQgdG8gYmUgdXNlZCwgYW5kIGl0J3Mgbm90IHRoZSBjdXJyZW50IG9uZVxuXG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSdyZSByZXVzaW5nIGEgY29udGV4dCBmcm9tIGEgdGFibGUgKHRocm91Z2ggbmF2aWdhdGlvbiksIHdlIHJlZnJlc2ggaXQgdG8gYXZvaWQgb3V0ZGF0ZWQgZGF0YVxuXHRcdFx0XHQvLyBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBiZSBjb21wbGV0ZWQgKHJlcXVlc3RSZWZyZXNoKSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBnb2VzIGludG8gdGhlIHNhbWVcblx0XHRcdFx0Ly8gYmF0Y2ggYXMgdGhlIG9uZXMgZnJvbSBjb250cm9scyBpbiB0aGUgcGFnZS5cblx0XHRcdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiYgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG9Vc2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdFx0aWYgKCFvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgb1VzZUNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHR0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkgfHxcblx0XHRcdFx0XHRcdChNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgb1VzZUNvbnRleHQuZ2V0UGF0aCgpKSAmJlxuXHRcdFx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBidXQgd2UncmUgaW4gY29sbGFib3JhdGlvbiBkcmFmdCwgd2UgZm9yY2UgdGhlIHJlZnJlc2ggKGRpc2NhcmRpbmcgcGVuZGluZyBjaGFuZ2VzKSBhcyB3ZSBuZWVkIHRvIGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXHRcdFx0XHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1AsIHRoZSB2aWV3IGlzIG5vdCBjb25uZWN0ZWQgeWV0IC0tPiBjaGVjayBpZiB3ZSdyZSBpbiBkcmFmdCB3aXRoIGNvbGxhYm9yYXRpb24gZnJvbSB0aGUgbWV0YW1vZGVsXG5cdFx0XHRcdFx0XHRvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRzaG91bGRSZWZyZXNoQ29udGV4dCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG9Vc2VDb250ZXh0LCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChzaG91bGRSZWZyZXNoQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX29BcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhbeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIiB9XSwgb1VzZUNvbnRleHQsIG9Vc2VDb250ZXh0LmdldEJpbmRpbmcoKS5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoYENhbm5vdCByZWZyZXNoIGNvbnRleHQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRoZSBzYW1lIGNvbnRleHQgYnV0IGFuIGVkaXRmbG93IGFjdGlvbiBoYXBwZW5lZCAoZS5nLiBDYW5jZWxEb2N1bWVudCBpbiBzdGlja3kgbW9kZSlcblx0XHRcdFx0Ly8gLS0+IFdlIG5lZWQgdG8gY2FsbCBvbkJlZm9yZS9BZnRlckJpbmRpbmcgdG8gcmVmcmVzaCB0aGUgb2JqZWN0IHBhZ2UgcHJvcGVybHlcblx0XHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwge1xuXHRcdFx0XHRcdGVkaXRhYmxlOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlLFxuXHRcdFx0XHRcdGxpc3RCaW5kaW5nOiBvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCksXG5cdFx0XHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0cmVhc29uOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uLFxuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwgeyByZWRpcmVjdGVkVG9Ob25EcmFmdDogb05hdmlnYXRpb25QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNDdXJyZW50UGF0aCAhPT0gc1RhcmdldFBhdGggfHwgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29udGV4dCBmb3IgaXRzIHBhdGhcblx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KHRoaXMuX2NyZWF0ZUNvbnRleHQoc1RhcmdldFBhdGgsIG9Nb2RlbCksIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5BcHBTdGF0ZUNoYW5nZWQgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uUmVzdG9yZUhpc3RvcnkgJiZcblx0XHRcdEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkgJiZcblx0XHRcdCFvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpICYmXG5cdFx0XHRvQ3VycmVudENvbnRleHRcblx0XHQpIHtcblx0XHRcdHRoaXMuX3JlZnJlc2hCaW5kaW5nQ29udGV4dChvQ3VycmVudENvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBCaW5kcyB0aGUgcGFnZSB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIGJlIGJvdW5kXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb0NvbnRleHQob0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBvTW9kZWw6IE9EYXRhTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvKTogdm9pZCB7XG5cdFx0aWYgKCFvQ29udGV4dCkge1xuXHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvUGFyZW50TGlzdEJpbmRpbmcgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdGlmICghb1BhcmVudExpc3RCaW5kaW5nIHx8ICFvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHBhcmVudEJpbmRpbmcgaXMgbm90IGEgbGlzdEJpbmRpbmcsIHdlIGNyZWF0ZSBhIG5ldyBjb250ZXh0XG5cdFx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuX3NldEtlZXBBbGl2ZShcblx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dCAmJiAhdGhpcy5fb0FwcENvbXBvbmVudC5pc0V4aXRpbmcgJiYgb1Jvb3RWaWV3Q29udHJvbGxlci5pc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlIC8vIExvYWQgbWVzc2FnZXMsIG90aGVyd2lzZSB0aGV5IGRvbid0IGdldCByZWZyZXNoZWQgbGF0ZXIsIGUuZy4gZm9yIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdC8vIHNldEtlZXBBbGl2ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwYXJlbnQgbGlzdGJpbmRpbmcgZG9lc24ndCBoYXZlICQkb3duUmVxdWVzdD10cnVlXG5cdFx0XHRcdC8vIFRoaXMgY2FzZSBmb3IgY3VzdG9tIGZyYWdtZW50cyBpcyBzdXBwb3J0ZWQsIGJ1dCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gbWFrZSB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gYXBwYXJlbnRcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBWaWV3IGZvciAke29Db250ZXh0LmdldFBhdGgoKX0gd29uJ3QgYmUgc3luY2hyb25pemVkLiBQYXJlbnQgbGlzdEJpbmRpbmcgbXVzdCBoYXZlIGJpbmRpbmcgcGFyYW1ldGVyICQkb3duUmVxdWVzdD10cnVlYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCBvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQgb3RoZXJ3aXNlIHdlIGdldCBlcnJvcnNcblx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGJpbmRpbmcgY29udGV4dCBpcyBwYXJ0IG9mIGEgY29sbGFib3JhdGl2ZSBkcmFmdCwgd2UgY2FsbCBhZGRTZWxmIGJlZm9yZSBiaW5kaW5nIHRoZSBwYWdlIHNvIHRoYXQgdGhlIFNoYXJlIGFjdGlvblxuXHRcdC8vIGlzIHBhcnQgb2YgdGhlIHNhbWUgYmF0Y2ggYXMgdGhlIHBhZ2UgbG9hZCwgYW5kIHdlIGNhbiBnZXQgdGhlIGxpc3Qgb2YgcGFydGljaXBhdGluZyB1c2VycyBsYXRlclxuXHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpICYmIG9Db250ZXh0LmdldFBhdGgoKS5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5PWZhbHNlXCIpKSB7XG5cdFx0XHR0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmV4ZWN1dGVTaGFyZUFjdGlvbihvQ29udGV4dCk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvcGVyIGJlZm9yZS9hZnRlciBjYWxsYmFja3Ncblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0LCB7XG5cdFx0XHRlZGl0YWJsZTogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSxcblx0XHRcdGxpc3RCaW5kaW5nOiBvUGFyZW50TGlzdEJpbmRpbmcsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdHJlYXNvbjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbixcblx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHR9KTtcblxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQsIHsgcmVkaXJlY3RlZFRvTm9uRHJhZnQ6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQgfSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGNvbnRleHQgZnJvbSBhIHBhdGguXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0XG5cdCAqL1xuXHRfY3JlYXRlQ29udGV4dChzUGF0aDogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBDb250ZXh0IHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LFxuXHRcdFx0c0VudGl0eVNldCA9IG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdHNDb250ZXh0UGF0aCA9XG5cdFx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9NZXRhTW9kZWwpLFxuXHRcdFx0bVBhcmFtZXRlcnM6IEJpbmRDb250ZXh0UGFyYW1ldGVycyA9IHtcblx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiLFxuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIixcblx0XHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZVxuXHRcdFx0fTtcblx0XHRpZiAodGhpcy5iYXNlLmlubGluZUVkaXRGbG93LmlzSW5saW5lRWRpdFBvc3NpYmxlKCkpIHtcblx0XHRcdC8vIGlmIGlubGluZSBlZGl0IGlzIGVuYWJsZWQgb24gdGhlIHBhZ2UgYW5kIHRoaXMgaXMgdGhlIGFjdGl2ZSBlbnRpdHksIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBncm91cCBpZCB0byBpbmxpbmVcblx0XHRcdG1QYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IHNQYXRoLmluY2x1ZGVzKFwiSXNBY3RpdmVFbnRpdHk9dHJ1ZVwiKSA/IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCA6IFwiJGF1dG9cIjtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBkcmFmdDogJHNlbGVjdCB0aGUgc3RhdGUgZmxhZ3MgKEhhc0FjdGl2ZUVudGl0eSwgSGFzRHJhZnRFbnRpdHksIGFuZCBJc0FjdGl2ZUVudGl0eSkgYW5kIHNlbWFudGljIGtleXMgKGZvciBjcmVhdGluZyB0aGUgc2VtYW50aWMgVVJMKVxuXHRcdGNvbnN0IG9EcmFmdFJvb3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgKTtcblx0XHRjb25zdCBvRHJhZnROb2RlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlYCk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gc0NvbnRleHRQYXRoXG5cdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzQ29udGV4dFBhdGgpICYmIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0NvbnRleHRQYXRoKSlcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzID0gTW9kZWxIZWxwZXIuZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyhcblx0XHRcdGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0XG5cdFx0KTtcblx0XHRjb25zdCBzZW1hbnRpY0tleXMgPSBvRHJhZnRSb290XG5cdFx0XHQ/IGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5Py5tYXAoKGtleSkgPT4ga2V5LnZhbHVlKSA/PyBbXVxuXHRcdFx0OiBbXTtcblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0bVBhcmFtZXRlcnMuJCRncm91cElkID0gXCIkYXV0by5Xb3JrZXJzXCI7IC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGdyb3VwIElEIGFzIGZvciB0aGUgcGFyZW50IGxpc3QgYmluZGluZ1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9nZXRLZWVwQWxpdmVDb250ZXh0KG9Nb2RlbCwgc1BhdGgsIGZhbHNlLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBrZWVwQWxpdmUgY29udGV4dCAke3NQYXRofWApO1xuXHRcdFx0fSBlbHNlIGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvUmVxdWVzdCA9IFtcIkhhc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0RyYWZ0RW50aXR5XCIsIFwiSXNBY3RpdmVFbnRpdHlcIl0uY29uY2F0KHNlbWFudGljS2V5cyk7XG5cdFx0XHRcdGlmIChvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkocHJvcGVydGllc1RvUmVxdWVzdCk7XG5cdFx0XHRcdFx0aWYgKG9EcmFmdFJvb3QpIHtcblx0XHRcdFx0XHRcdG9Db250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBkcmFmdCBhbmQgZWRpdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBwcm9wZXJ0aWVzIGFyZSByZXF1ZXN0ZWQgYWdhaW4gZXZlbiBpZiB0aGV5IGFyZSBpbiB0aGUgYmluZGluZydzIGNhY2hlXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdoZW4geW91IGVkaXQgYW5kIGdvIHRvIHRoZSBzYXZlZCB2ZXJzaW9uIHlvdSBoYXZlIG5vIHdheSBvZiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgZWRpdCB2ZXJzaW9uXG5cdFx0XHRcdFx0b0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKG9EcmFmdFJvb3QgPyBwcm9wZXJ0aWVzVG9SZXF1ZXN0LmNvbmNhdChbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSkgOiBwcm9wZXJ0aWVzVG9SZXF1ZXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb0NvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb1NlbGVjdDogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChzQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKHNNZXNzYWdlc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQ6ICRzZWxlY3QgdGhlIHN0YXRlIGZsYWdzIChIYXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBhbmQgSXNBY3RpdmVFbnRpdHkpXG5cdFx0XHRpZiAob0RyYWZ0Um9vdCB8fCBvRHJhZnROb2RlKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKFwiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRcdFx0cHJvcGVydGllc1RvU2VsZWN0LnB1c2goLi4uc2VtYW50aWNLZXlzKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKC4uLmFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMpO1xuXG5cdFx0XHRpZiAoaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQgJiYgb0RyYWZ0Um9vdCkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzVG9TZWxlY3QucHVzaChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0QWRtaW5pc3RyYXRpdmVVc2VyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJvcGVydGllc1RvU2VsZWN0Lmxlbmd0aCkge1xuXHRcdFx0XHRtUGFyYW1ldGVycy4kc2VsZWN0ID0gcHJvcGVydGllc1RvU2VsZWN0LmpvaW4oXCIsXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRjb25zdCBvUHJldmlvdXNCaW5kaW5nID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1ByZXZpb3VzQmluZGluZykge1xuXHRcdFx0XHRcdG9Nb2RlbC5yZXNldENoYW5nZXMob1ByZXZpb3VzQmluZGluZy5nZXRVcGRhdGVHcm91cElkKCkpO1xuXHRcdFx0XHRcdG9QcmV2aW91c0JpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9IaWRkZW5CaW5kaW5nID0gb01vZGVsLmJpbmRDb250ZXh0KHNQYXRoLCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdFx0b0hpZGRlbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLl9vVmlldyk7XG5cdFx0XHRcdHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKHRoaXMuX29WaWV3KTtcblx0XHRcdH0pO1xuXHRcdFx0b0hpZGRlbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIHRoaXMub25EYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7XG5cdFx0XHRyZXR1cm4gb0hpZGRlbkJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG9uRGF0YVJlY2VpdmVkKG9FdmVudDogRXZlbnQ8eyBlcnJvcjogeyBzdGF0dXM/OiBudW1iZXI7IGNhdXNlPzogeyBzdGF0dXM/OiBudW1iZXIgfTsgbWVzc2FnZT86IHN0cmluZyB9IH0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZXJyb3IgPSBvRXZlbnQ/LmdldFBhcmFtZXRlcihcImVycm9yXCIpO1xuXHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuX29WaWV3KSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5fb1ZpZXcpO1xuXHRcdH1cblxuXHRcdGlmIChlcnJvcikge1xuXHRcdFx0Ly8gVE9ETzogaW4gY2FzZSBvZiA0MDQgdGhlIHRleHQgc2hhbGwgYmUgZGlmZmVyZW50XG5cdFx0XHRjb25zdCBtZXNzYWdlSGFuZGxlciA9IHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlcjtcblx0XHRcdGxldCBtUGFyYW1zOiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRjb25zdCBlcnJvclN0YXR1cyA9IGVycm9yLnN0YXR1cyA/PyBlcnJvci5jYXVzZT8uc3RhdHVzO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdFx0aWYgKGVycm9yU3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0aXNJbml0aWFsTG9hZDUwM0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIGlmIChlcnJvclN0YXR1cyA9PT0gNDAwKSB7XG5cdFx0XHRcdFx0bVBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUl9ERVNDUklQVElPTlwiKSxcblx0XHRcdFx0XHRcdGlzRGF0YVJlY2VpdmVkRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRzaGVsbEJhY2s6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1QYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBlcnJvcj8ubWVzc2FnZSxcblx0XHRcdFx0XHRcdGlzRGF0YVJlY2VpdmVkRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRzaGVsbEJhY2s6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgY29yZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRtUGFyYW1zLmNvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKG1QYXJhbXMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCB0aGlzLmJhc2UubWVzc2FnZUhhbmRsZXIucmVsZWFzZUhvbGRCeUNvbnRyb2wodGhpcy5fb1ZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyBzaWRlIGVmZmVjdHMgb24gYSBiaW5kaW5nIGNvbnRleHQgdG8gXCJyZWZyZXNoXCIgaXQuXG5cdCAqIFRPRE86IGdldCByaWQgb2YgdGhpcyBvbmNlIHByb3ZpZGVkIGJ5IHRoZSBtb2RlbFxuXHQgKiBhIHJlZnJlc2ggb24gdGhlIGJpbmRpbmcgY29udGV4dCBkb2VzIG5vdCB3b3JrIGluIGNhc2UgYSBjcmVhdGlvbiByb3cgd2l0aCBhIHRyYW5zaWVudCBjb250ZXh0IGlzXG5cdCAqIHVzZWQuIGFsc28gYSByZXF1ZXN0U2lkZUVmZmVjdHMgd2l0aCBhbiBlbXB0eSBwYXRoIHdvdWxkIGZhaWwgZHVlIHRvIHRoZSB0cmFuc2llbnQgY29udGV4dFxuXHQgKiB0aGVyZWZvcmUgd2UgZ2V0IGFsbCBkZXBlbmRlbnQgYmluZGluZ3MgKHZpYSBwcml2YXRlIG1vZGVsIG1ldGhvZCkgdG8gZGV0ZXJtaW5lIGFsbCBwYXRocyBhbmQgdGhlblxuXHQgKiByZXF1ZXN0IHRoZW0uXG5cdCAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgQ29udGV4dCB0byBiZSByZWZyZXNoZWRcblx0ICovXG5cdF9yZWZyZXNoQmluZGluZ0NvbnRleHQob0JpbmRpbmdDb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1BhZ2VDb21wb25lbnQgPSB0aGlzLl9vUGFnZUNvbXBvbmVudDtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRjb25zdCBzUm9vdENvbnRleHRQYXRoID0gb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBzRW50aXR5U2V0ID0gb1BhZ2VDb21wb25lbnQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0RW50aXR5U2V0ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCgpO1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9XG5cdFx0XHQob1BhZ2VDb21wb25lbnQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0Q29udGV4dFBhdGggJiYgb1BhZ2VDb21wb25lbnQuZ2V0Q29udGV4dFBhdGgoKSkgfHwgKHNFbnRpdHlTZXQgJiYgYC8ke3NFbnRpdHlTZXR9YCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNNZXNzYWdlc1BhdGg7XG5cdFx0Y29uc3QgYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlID0ge1xuXHRcdFx0dGFyZ2V0UHJvcGVydGllczogW10sXG5cdFx0XHR0YXJnZXRFbnRpdGllczogW11cblx0XHR9O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0QmluZGluZ1BhdGhzKG9CaW5kaW5nOiBCaW5kaW5nKTogdm9pZCB7XG5cdFx0XHRsZXQgYURlcGVuZGVudEJpbmRpbmdzO1xuXHRcdFx0Y29uc3Qgc1JlbGF0aXZlUGF0aCA9IChvQmluZGluZy5nZXRDb250ZXh0KCk/LmdldFBhdGgoKSA/PyBcIlwiKS5yZXBsYWNlKHNSb290Q29udGV4dFBhdGgsIFwiXCIpOyAvLyBJZiBubyBjb250ZXh0LCB0aGlzIGlzIGFuIGFic29sdXRlIGJpbmRpbmcgc28gbm8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0Y29uc3Qgc1BhdGggPSAoc1JlbGF0aXZlUGF0aCA/IGAke3NSZWxhdGl2ZVBhdGguc2xpY2UoMSl9L2AgOiBzUmVsYXRpdmVQYXRoKSArIG9CaW5kaW5nLmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKG9CaW5kaW5nLmlzQTxPRGF0YUNvbnRleHRCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIGlmIChzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBub3cgZ2V0IHRoZSBkZXBlbmRlbnQgYmluZGluZ3Ncblx0XHRcdFx0YURlcGVuZGVudEJpbmRpbmdzID0gb0JpbmRpbmcuZ2V0RGVwZW5kZW50QmluZGluZ3MoKTtcblx0XHRcdFx0aWYgKGFEZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0XHRcdC8vIGFzayB0aGUgZGVwZW5kZW50IGJpbmRpbmdzIChhbmQgb25seSB0aG9zZSB3aXRoIHRoZSBzcGVjaWZpZWQgZ3JvdXBJZFxuXHRcdFx0XHRcdC8vaWYgKGFEZXBlbmRlbnRCaW5kaW5ncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFEZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0XHRcdFx0Z2V0QmluZGluZ1BhdGhzKGl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5wdXNoKHNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAoIWFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcuaXNBPE9EYXRhUHJvcGVydHlCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YVByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAoIWFQcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0eVBhdGhzLnB1c2goc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNDb250ZXh0UGF0aCkge1xuXHRcdFx0c01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpO1xuXHRcdH1cblxuXHRcdC8vIGJpbmRpbmcgb2YgdGhlIGNvbnRleHQgbXVzdCBoYXZlICQkUGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMgdHJ1ZSwgdGhpcyBib3VuZCBjb250ZXh0IG1heSBiZSBuZWVkZWQgdG8gYmUgZmV0Y2hlZCBmcm9tIHRoZSBkZXBlbmRlbnQgYmluZGluZ1xuXHRcdGdldEJpbmRpbmdQYXRocyhvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKTtcblxuXHRcdGxldCBpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRoc1tpXVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzID0gYVByb3BlcnR5UGF0aHM7XG5cdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnB1c2goc01lc3NhZ2VzUGF0aCk7XG5cdFx0fVxuXHRcdC8vYWxsIHRoaXMgbG9naWMgdG8gYmUgcmVwbGFjZWQgd2l0aCBhIFNpZGVFZmZlY3RzIHJlcXVlc3QgZm9yIGFuIGVtcHR5IHBhdGggKHJlZnJlc2ggZXZlcnl0aGluZyksIGFmdGVyIHRlc3RpbmcgdHJhbnNpZW50IGNvbnRleHRzXG5cdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPSBvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcy5yZWR1Y2UoKHRhcmdldHM6IHN0cmluZ1tdLCB0YXJnZXRQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0aWYgKHRhcmdldFByb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gdGFyZ2V0UHJvcGVydHkuaW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdHRhcmdldHMucHVzaChpbmRleCA+IDAgPyB0YXJnZXRQcm9wZXJ0eS5zbGljZSgwLCBpbmRleCkgOiB0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFyZ2V0cztcblx0XHR9LCBbXSk7XG5cdFx0Ly8gT0RhdGEgbW9kZWwgd2lsbCB0YWtlIGNhcmUgb2YgZHVwbGljYXRlc1xuXHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFsuLi5vU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMsIC4uLm9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzXSwgb0JpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2Ugb3IgdGhlIGNvbXBvbmVudC5cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0X2dldEJpbmRpbmdDb250ZXh0KCk6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2Ugb3IgdGhlIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0X3NldEJpbmRpbmdDb250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBudWxsKTogdm9pZCB7XG5cdFx0bGV0IHByZXZpb3VzQ29udGV4dDogQ29udGV4dCwgdGFyZ2V0Q29udHJvbDogVmlldyB8IEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHByZXZpb3VzQ29udGV4dCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdHRhcmdldENvbnRyb2wgPSB0aGlzLl9vUGFnZUNvbXBvbmVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJldmlvdXNDb250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdHRhcmdldENvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHR9XG5cdFx0dGFyZ2V0Q29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRpZiAocHJldmlvdXNDb250ZXh0Py5pc0tlZXBBbGl2ZSgpICYmIHByZXZpb3VzQ29udGV4dCAhPT0gY29udGV4dCkge1xuXHRcdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdC8qIEJlZm9yZSBkZWxldGluZyB0aGUgYmluZGluZ0NvbnRleHQsIHdlIGVuc3VyZSBpdCdzIG5vdCBhbHNvIHVzZWQgaW4gYW5vdGhlciBwYWdlLiovXG5cdFx0XHRpZiAoIXJvb3RWaWV3Q29udHJvbGxlci5nZXRJbnN0YW5jZWRWaWV3cygpLnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dD8uKCkgPT09IHByZXZpb3VzQ29udGV4dCkpIHtcblx0XHRcdFx0dGhpcy5fc2V0S2VlcEFsaXZlKHByZXZpb3VzQ29udGV4dCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBmbGV4aWJsZSBjb2x1bW4gbGF5b3V0IChGQ0wpIGxldmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZpZXcgKC0xIGlmIHRoZSBhcHAgaXMgbm90IEZDTCkuXG5cdCAqIEByZXR1cm5zIFRoZSBsZXZlbFxuXHQgKi9cblx0Z2V0RkNMTGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLkZDTExldmVsO1xuXHR9XG5cblx0X3NldEtlZXBBbGl2ZShcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRiS2VlcEFsaXZlOiBib29sZWFuLFxuXHRcdGZuQmVmb3JlRGVzdHJveT86IFBhcmFtZXRlcnM8Q29udGV4dFtcInNldEtlZXBBbGl2ZVwiXT5bMV0sXG5cdFx0YlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZXh0LmdldFBhdGgoKS5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdC8vIFdlIGtlZXAgdGhlIGNvbnRleHQgYWxpdmUgb25seSBpZiB0aGV5J3JlIHBhcnQgb2YgYSBjb2xsZWN0aW9uLCBpLmUuIGlmIHRoZSBwYXRoIGVuZHMgd2l0aCBhICcpJ1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBzTWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG9NZXRhTW9kZWwsIHNNZXRhUGF0aCk7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoYktlZXBBbGl2ZSwgZm5CZWZvcmVEZXN0cm95LCAhIXNNZXNzYWdlc1BhdGggJiYgYlJlcXVlc3RNZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEtlZXBBbGl2ZUNvbnRleHQoXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRiUmVxdWVzdE1lc3NhZ2VzPzogYm9vbGVhbixcblx0XHRwYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzXG5cdCk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdC8vIEdldCB0aGUgcGF0aCBmb3IgdGhlIGNvbnRleHQgdGhhdCBpcyByZWFsbHkga2VwdCBhbGl2ZSAocGFydCBvZiBhIGNvbGxlY3Rpb24pXG5cdFx0Ly8gaS5lLiByZW1vdmUgYWxsIHNlZ21lbnRzIG5vdCBlbmRpbmcgd2l0aCBhICcpJ1xuXHRcdGNvbnN0IGtlcHRBbGl2ZVNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgYWRkaXRpb25uYWxTZWdtZW50czogc3RyaW5nW10gPSBbXTtcblx0XHR3aGlsZSAoa2VwdEFsaXZlU2VnbWVudHMubGVuZ3RoICYmICFrZXB0QWxpdmVTZWdtZW50c1trZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggLSAxXS5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdGFkZGl0aW9ubmFsU2VnbWVudHMucHVzaChrZXB0QWxpdmVTZWdtZW50cy5wb3AoKSEpO1xuXHRcdH1cblxuXHRcdGlmIChrZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2VwdEFsaXZlUGF0aCA9IGtlcHRBbGl2ZVNlZ21lbnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9LZWVwQWxpdmVDb250ZXh0ID0gb01vZGVsLmdldEtlZXBBbGl2ZUNvbnRleHQoa2VwdEFsaXZlUGF0aCwgYlJlcXVlc3RNZXNzYWdlcywgcGFyYW1ldGVycyk7XG5cblx0XHRpZiAoYWRkaXRpb25uYWxTZWdtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBvS2VlcEFsaXZlQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWRkaXRpb25uYWxTZWdtZW50cy5yZXZlcnNlKCk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbm5hbFBhdGggPSBhZGRpdGlvbm5hbFNlZ21lbnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5iaW5kQ29udGV4dChhZGRpdGlvbm5hbFBhdGgsIG9LZWVwQWxpdmVDb250ZXh0KS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3dpdGNoZXMgYmV0d2VlbiBjb2x1bW4gYW5kIGZ1bGwtc2NyZWVuIG1vZGUgd2hlbiBGQ0wgaXMgdXNlZC5cblx0ICpcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHN3aXRjaEZ1bGxTY3JlZW4oKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1NvdXJjZSA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ZDTEhlbHBlck1vZGVsID0gb1NvdXJjZS5nZXRNb2RlbChcImZjbGhlbHBlclwiKSxcblx0XHRcdGJJc0Z1bGxTY3JlZW4gPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vaXNGdWxsU2NyZWVuXCIpLFxuXHRcdFx0c05leHRMYXlvdXQgPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdGJJc0Z1bGxTY3JlZW4gPyBcIi9hY3Rpb25CdXR0b25zSW5mby9leGl0RnVsbFNjcmVlblwiIDogXCIvYWN0aW9uQnV0dG9uc0luZm8vZnVsbFNjcmVlblwiXG5cdFx0XHQpLFxuXHRcdFx0b1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvQ29udGV4dCA9IChvUm9vdFZpZXdDb250cm9sbGVyIGFzIEZjbENvbnRyb2xsZXIpLmdldFJpZ2h0bW9zdENvbnRleHRcblx0XHRcdD8gKG9Sb290Vmlld0NvbnRyb2xsZXIgYXMgRmNsQ29udHJvbGxlcikuZ2V0UmlnaHRtb3N0Q29udGV4dCgpIVxuXHRcdFx0OiBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHR0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb0NvbnRleHQob0NvbnRleHQsIHsgbGF5b3V0OiBzTmV4dExheW91dCB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRMb2cud2FybmluZyhcImNhbm5vdCBzd2l0Y2ggYmV0d2VlbiBjb2x1bW4gYW5kIGZ1bGxzY3JlZW5cIik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBjb2x1bW4gZm9yIHRoZSBjdXJyZW50IHZpZXcgaW4gYSBGQ0wuXG5cdCAqXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQmVmb3JlKVxuXHRhc3luYyBjbG9zZUNvbHVtbigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLl9vVmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0bm9QcmVzZXJ2YXRpb25DYWNoZTogdHJ1ZSxcblx0XHRcdGxheW91dDogdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vY2xvc2VDb2x1bW5cIiksXG5cdFx0XHRjYWxsRXh0ZW5zaW9uOiB0cnVlXG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpPy5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLl9vQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdC5lbmFibGVkO1xuXG5cdFx0aWYgKCFpc0RvY3VtZW50TW9kaWZpZWQgJiYgaXNIaWRkZW5EcmFmdEVuYWJsZWQgJiYgb1ZpZXdEYXRhPy52aWV3TGV2ZWwgPT09IDEpIHtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRza2lwRGlzY2FyZFBvcG92ZXI6IHRydWUsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvbjogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSBpZiAob1ZpZXdEYXRhPy52aWV3TGV2ZWwgPT09IDEgJiYgTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBvQ29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcy5fb1ZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmVzIHRyYW5zaXRpb24gbWVzc2FnZSBmb3IgdGhlIHNwZWNpZmllZCBjb250ZXh0XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQob0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRoZSB0cmFuc2l0aW9uIG1lc3NhZ2VzIG9mIHRoZSBjb250ZXh0IGZyb20gd2hlcmUgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLlxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcHJldmlvdXNDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAocHJldmlvdXNDb250ZXh0KSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dChwcmV2aW91c0NvbnRleHQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbFJvdXRpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNENBO0FBQ0E7QUFDQTtBQUNBO0VBSEEsSUFLTUEsZUFBZSxJQUFBQyxJQUFBLEdBRHBCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQW9CakVDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FPaEJELGNBQWMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0F3Q2hCQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUMsS0FBQSxHQUtuQ0wsZUFBZSxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNqQkosVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQUFHLEtBQUEsR0FLbkNQLGVBQWUsQ0FBQyxDQUFDLEVBQUFRLEtBQUEsR0FDakJOLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBSyxNQUFBLEdBV25DVCxlQUFlLENBQUMsQ0FBQyxFQUFBVSxNQUFBLEdBQ2pCUixVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQU8sTUFBQSxHQWdDbkNYLGVBQWUsQ0FBQyxDQUFDLEVBQUFZLE1BQUEsR0E2Q2pCWixlQUFlLENBQUMsQ0FBQyxFQUFBYSxNQUFBLEdBaU5qQmIsZUFBZSxDQUFDLENBQUMsRUFBQWMsTUFBQSxHQUNqQkMsY0FBYyxDQUFDLENBQUMsRUFBQUMsTUFBQSxHQThCaEJoQixlQUFlLENBQUMsQ0FBQyxFQUFBaUIsTUFBQSxHQUNqQkYsY0FBYyxDQUFDLENBQUMsRUFBQUcsTUFBQSxHQXFkaEJsQixlQUFlLENBQUMsQ0FBQyxFQUFBbUIsTUFBQSxHQTZOakJuQixlQUFlLENBQUMsQ0FBQyxFQUFBb0IsTUFBQSxHQUNqQkwsY0FBYyxDQUFDLENB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WixNQUFBLENBQUFDLHdCQUFBLENBQUEvWSxPQUFBLENBQUFNLFNBQUEsc0JBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBdVkseUJBQUEsQ0FBQTdZLE9BQUEsQ0FBQU0sU0FBQSxxQkFBQXRCLE1BQUEsRUFBQUMsTUFBQSxHQUFBNlosTUFBQSxDQUFBQyx3QkFBQSxDQUFBL1ksT0FBQSxDQUFBTSxTQUFBLHFCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQXVZLHlCQUFBLENBQUE3WSxPQUFBLENBQUFNLFNBQUEsdUJBQUFwQixNQUFBLEdBQUE0WixNQUFBLENBQUFDLHdCQUFBLENBQUEvWSxPQUFBLENBQUFNLFNBQUEsdUJBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBdVkseUJBQUEsQ0FBQTdZLE9BQUEsQ0FBQU0sU0FBQSxzQkFBQW5CLE1BQUEsR0FBQTJaLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQS9ZLE9BQUEsQ0FBQU0sU0FBQSxzQkFBQU4sT0FBQSxDQUFBTSxTQUFBLEdBQUF1WSx5QkFBQSxDQUFBN1ksT0FBQSxDQUFBTSxTQUFBLHFDQUFBbEIsTUFBQSxFQUFBQyxNQUFBLEdBQUF5WixNQUFBLENBQUFDLHdCQUFBLENBQUEvWSxPQUFBLENBQUFNLFNBQUEscUNBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBdVkseUJBQUEsQ0FBQTdZLE9BQUEsQ0FBQU0sU0FBQSwrQkFBQWYsTUFBQSxFQUFBQyxNQUFBLEdBQUFzWixNQUFBLENBQUFDLHdCQUFBLENBQUEvWSxPQUFBLENBQUFNLFNBQUEsK0JBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBdVkseUJBQUEsQ0FBQTdZLE9BQUEsQ0FBQU0sU0FBQSxxQkFBQWIsTUFBQSxHQUFBcVosTUFBQSxDQUFBQyx3QkFBQSxDQUFBL1ksT0FBQSxDQUFBTSxTQUFBLHFCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQXVZLHlCQUFBLENBQUE3WSxPQUFBLENBQUFNLFNBQUEsdUJBQUFaLE1BQUEsRUFBQUMsTUFBQSxHQUFBbVosTUFBQSxDQUFBQyx3QkFBQSxDQUFBL1ksT0FBQSxDQUFBTSxTQUFBLHVCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQXVZLHlCQUFBLENBQUE3WSxPQUFBLENBQUFNLFNBQUEsa0JBQUFWLE1BQUEsRUFBQUMsTUFBQSxHQUFBaVosTUFBQSxDQUFBQyx3QkFBQSxDQUFBL1ksT0FBQSxDQUFBTSxTQUFBLGtCQUFBTixPQUFBLENBQUFNLFNBQUEsR0FBQU4sT0FBQSxNQUFBRCxNQUFBO0VBQUEsT0F3cENsQy9CLGVBQWU7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
1014
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbFJvdXRpbmciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfZGVjNCIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiQmVmb3JlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyRXh0ZW5zaW9uIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uRXhpdCIsIl9vUm91dGluZ1NlcnZpY2UiLCJfZm5Sb3V0ZU1hdGNoZWRCb3VuZCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIm9uSW5pdCIsIl9vVmlldyIsImJhc2UiLCJnZXRWaWV3IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIl9vUGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiX29Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJfb1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJFcnJvciIsImdldFNlcnZpY2UiLCJ0aGVuIiwib1JvdXRpbmdTZXJ2aWNlIiwiaXNBIiwiX29uUm91dGVNYXRjaGVkIiwiYmluZCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIl9vVGFyZ2V0SW5mb3JtYXRpb24iLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNhdGNoIiwib25Sb3V0ZU1hdGNoZWQiLCJvblJvdXRlTWF0Y2hlZEZpbmlzaGVkIiwib25CZWZvcmVCaW5kaW5nIiwiX2JpbmRpbmdDb250ZXh0IiwiX21QYXJhbWV0ZXJzIiwiYmVmb3JlU2V0QmluZGluZ0NvbnRleHQiLCJiaW5kaW5nQ29udGV4dCIsIm9Sb3V0aW5nIiwiZ2V0Q29udHJvbGxlciIsInJvdXRpbmciLCJvbkFmdGVyQmluZGluZyIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsIm9uQ29udGV4dEJvdW5kVG9WaWV3IiwiYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dCIsImRlZmVycmVkQ3JlYXRpb24iLCJuYXZpZ2F0ZVRvVGFyZ2V0Iiwib0NvbnRleHQiLCJzTmF2aWdhdGlvblRhcmdldE5hbWUiLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwib05hdmlnYXRpb25Db25maWd1cmF0aW9uIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJvRGV0YWlsUm91dGUiLCJkZXRhaWwiLCJzUm91dGVOYW1lIiwicm91dGUiLCJtUGFyYW1ldGVyTWFwcGluZyIsInBhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvIiwiZ2V0SGFzaEZvck5hdmlnYXRpb24iLCJjb250ZXh0IiwibmF2aWdhdGlvblRhcmdldE5hbWUiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsImRldGFpbFJvdXRlIiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJuYXZpZ2F0ZVRvQ29udGV4dCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwibW9kZSIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsImNyZWF0ZUNvbnRleHRQcm9taXNlIiwiY3JlYXRlZENvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsImVkaXRhYmxlIiwicGVyc2lzdE9QU2Nyb2xsIiwidXBkYXRlRkNMTGV2ZWwiLCJmb3JjZUZvY3VzIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJjYWxsRXh0ZW5zaW9uIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2V0UHJvcGVydHkiLCJjb250ZXh0VG9OYXZpZ2F0ZSIsImhpZGRlbkJpbmRpbmciLCJiYWNrUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsImdldFBhdGgiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm92ZXJyaWRlTmF2Iiwib25CZWZvcmVOYXZpZ2F0aW9uIiwiZGVzdHJveSIsIlByb21pc2UiLCJyZXNvbHZlIiwiRkNMTGV2ZWwiLCJnZXRGQ0xMZXZlbCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJSb3dQcmVzcyIsIm1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNQYXRoT25EcmFmdFJvb3QiLCJjb250ZXh0Rm9yTmF2aWdhdGlvbiIsImdldENvbnRleHRGb3JOYXZpZ2F0aW9uV2l0aENvbGxhYm9yYXRpb24iLCJnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUiLCJFZGl0Rmxvd0FjdGlvbiIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlc0ZvclByZXZpb3VzQ29udGV4dCIsInNraXBIYXNoR3VhcmRDaGVjayIsImhpZGRlbkRyYWZ0RW5hYmxlZCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiaXNEb2N1bWVudE1vZGlmaWVkIiwiZ2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImlzRmNsRW5hYmxlZCIsImdldFZpZXdEYXRhIiwib3JpZ2luYWxDb250ZXh0IiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImRyYWZ0T3JBY3RpdmVDb250ZXh0IiwiZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0TWV0YUNvbnRleHQiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsInRhcmdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVySW5mbyIsIlR5cGVOYW1lIiwibmFtZSIsImNvbnRleHRUb1JlcGxhY2VXaXRoIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsInJlcGxhY2VXaXRoIiwiRWRpdFN0YXRlIiwic2V0RWRpdFN0YXRlRGlydHkiLCJwYXJlbnRCaW5kaW5nIiwiZ2V0QmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJncm91cCIsImFnZ3JlZ2F0ZSIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwibmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJuYXZpZ2F0ZUJhY2tGcm9tVHJhbnNpZW50U3RhdGUiLCJzSGFzaCIsImdldEhhc2giLCJpbmNsdWRlcyIsIm5hdkJhY2siLCJuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UiLCJzRXJyb3JNZXNzYWdlIiwibVBhcmFtZXRlcnMiLCJuYXZUb0NyZWF0ZUhhc2giLCJzaG93TWVzc2FnZVBhZ2VPbkNyZWF0ZUZhaWx1cmUiLCJuYXZUb0hhc2giLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsImRpc3BsYXlFcnJvclBhZ2UiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJfaXNWaWV3UGFydE9mUm91dGUiLCJyb3V0ZUluZm9ybWF0aW9uIiwiYVRhcmdldHMiLCJ0YXJnZXRzIiwidGFyZ2V0TmFtZSIsInZpZXdMZXZlbCIsInJvdXRlTGV2ZWwiLCJnZXRSb3V0aW5nU2VydmljZSIsImFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZSIsInNldFRpbWVvdXQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJkaXNjb25uZWN0IiwiX3NldEJpbmRpbmdDb250ZXh0IiwiX2J1aWxkQmluZGluZ1BhdGgiLCJyb3V0ZUFyZ3VtZW50cyIsImJpbmRpbmdQYXR0ZXJuIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJwYXRoIiwicmVwbGFjZSIsImRlZmVycmVkIiwic0tleSIsInNWYWx1ZSIsImJUYXJnZXRFZGl0YWJsZSIsImJBY3Rpb25DcmVhdGUiLCJvRXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRCaW5kaW5nQ29udGV4dFBhdHRlcm4iLCJjb250ZXh0UGF0dGVybiIsIm1Bcmd1bWVudHMiLCJnZXRQYXJhbWV0ZXJzIiwib05hdmlnYXRpb25QYXJhbWV0ZXJzIiwiYmluZFByb21pc2UiLCJvTW9kZWwiLCJfYmluZERlZmVycmVkIiwiaXNPcGVuSW5FZGl0TW9kZSIsIl9iaW5kUGFnZUZvckVkaXQiLCJfYmluZFBhZ2UiLCJmaW5hbGx5IiwidG9TdHJpbmciLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsInRhcmdldFBhdGgiLCJjcmVhdGVEZWZlcnJlZENvbnRleHQiLCJfYmluZFBhZ2VUb0NvbnRleHQiLCJ0ZWNobmljYWxQYXRoIiwicmVzb2x2ZVBhdGgiLCJpc1N0aWNreUVkaXRNb2RlIiwiaXNTdGlja3kiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJhY3RpdmVDb250ZXh0IiwidXNlQ29udGV4dCIsIl9jcmVhdGVDb250ZXh0IiwiZWRpdEZsb3ciLCJlZGl0RG9jdW1lbnQiLCJfYmluZFBhZ2VUb1BhdGgiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsImUiLCJtZXNzYWdlSGFuZGxlciIsInNob3dNZXNzYWdlcyIsInNUYXJnZXRQYXRoIiwib0N1cnJlbnRDb250ZXh0IiwiX2dldEJpbmRpbmdDb250ZXh0Iiwic0N1cnJlbnRQYXRoIiwib1VzZUNvbnRleHQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic2hvdWxkUmVmcmVzaENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImlzRHJhZnRTdXBwb3J0ZWQiLCJpc0Nvbm5lY3RlZCIsInJlc2V0Q2hhbmdlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0R3JvdXBJZCIsImVyciIsImxpc3RCaW5kaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNob3dQbGFjZWhvbGRlciIsImJTaG93UGxhY2Vob2xkZXIiLCJBcHBTdGF0ZUNoYW5nZWQiLCJSZXN0b3JlSGlzdG9yeSIsImlzRWRpdFN0YXRlRGlydHkiLCJfcmVmcmVzaEJpbmRpbmdDb250ZXh0Iiwib1BhcmVudExpc3RCaW5kaW5nIiwiX3NldEtlZXBBbGl2ZSIsImlzRXhpdGluZyIsImlzQ29udGV4dFVzZWRJblBhZ2VzIiwiZXhlY3V0ZVNoYXJlQWN0aW9uIiwic1BhdGgiLCJvUGFnZUNvbXBvbmVudCIsInNFbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJzQ29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm9NZXRhTW9kZWwiLCIkJGdyb3VwSWQiLCIkJHVwZGF0ZUdyb3VwSWQiLCIkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzIiwiaW5saW5lRWRpdEZsb3ciLCJpc0lubGluZUVkaXRQb3NzaWJsZSIsIklOTElORUVESVRfVVBEQVRFR1JPVVBJRCIsIm9EcmFmdFJvb3QiLCJnZXRPYmplY3QiLCJvRHJhZnROb2RlIiwiZGF0YU1vZGVsT2JqZWN0IiwiZ2V0Q29udGV4dCIsImFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMiLCJnZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwidGFyZ2V0RW50aXR5U2V0Iiwic2VtYW50aWNLZXlzIiwiQ29tbW9uIiwiU2VtYW50aWNLZXkiLCJtYXAiLCJrZXkiLCJ2YWx1ZSIsIl9nZXRLZWVwQWxpdmVDb250ZXh0IiwicHJvcGVydGllc1RvUmVxdWVzdCIsImNvbmNhdCIsInJlcXVlc3RQcm9wZXJ0eSIsInJlcXVlc3RPYmplY3QiLCJwcm9wZXJ0aWVzVG9TZWxlY3QiLCJzTWVzc2FnZXNQYXRoIiwiZ2V0TWVzc2FnZXNQYXRoIiwicHVzaCIsIiRzZWxlY3QiLCJqb2luIiwib1ByZXZpb3VzQmluZGluZyIsImdldFVwZGF0ZUdyb3VwSWQiLCJvSGlkZGVuQmluZGluZyIsImF0dGFjaEV2ZW50T25jZSIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsIm9uRGF0YVJlY2VpdmVkIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJtUGFyYW1zIiwiZXJyb3JTdGF0dXMiLCJzdGF0dXMiLCJjYXVzZSIsIm9SZXNvdXJjZUJ1bmRsZSIsImlzSW5pdGlhbExvYWQ1MDNFcnJvciIsInNoZWxsQmFjayIsImlzRGF0YVJlY2VpdmVkRXJyb3IiLCJjb250cm9sIiwicmVsZWFzZUhvbGRCeUNvbnRyb2wiLCJvQmluZGluZ0NvbnRleHQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwic1Jvb3RDb250ZXh0UGF0aCIsImFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocyIsImFQcm9wZXJ0eVBhdGhzIiwib1NpZGVFZmZlY3RzIiwidGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwiZ2V0QmluZGluZ1BhdGhzIiwib0JpbmRpbmciLCJhRGVwZW5kZW50QmluZGluZ3MiLCJzUmVsYXRpdmVQYXRoIiwic2xpY2UiLCJnZXREZXBlbmRlbnRCaW5kaW5ncyIsIml0ZW0iLCJpIiwicmVkdWNlIiwidGFyZ2V0UHJvcGVydHkiLCJpbmRleCIsImluZGV4T2YiLCJwcmV2aW91c0NvbnRleHQiLCJ0YXJnZXRDb250cm9sIiwic2V0QmluZGluZ0NvbnRleHQiLCJpc0tlZXBBbGl2ZSIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldEluc3RhbmNlZFZpZXdzIiwic29tZSIsInBhZ2VWaWV3IiwiYktlZXBBbGl2ZSIsImZuQmVmb3JlRGVzdHJveSIsImJSZXF1ZXN0TWVzc2FnZXMiLCJlbmRzV2l0aCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwic2V0S2VlcEFsaXZlIiwia2VwdEFsaXZlU2VnbWVudHMiLCJzcGxpdCIsImFkZGl0aW9ubmFsU2VnbWVudHMiLCJwb3AiLCJrZXB0QWxpdmVQYXRoIiwib0tlZXBBbGl2ZUNvbnRleHQiLCJyZXZlcnNlIiwiYWRkaXRpb25uYWxQYXRoIiwic3dpdGNoRnVsbFNjcmVlbiIsIm9Tb3VyY2UiLCJvRkNMSGVscGVyTW9kZWwiLCJiSXNGdWxsU2NyZWVuIiwic05leHRMYXlvdXQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiX3JvdXRpbmciLCJsYXlvdXQiLCJ3YXJuaW5nIiwiY2xvc2VDb2x1bW4iLCJvVmlld0RhdGEiLCJub1ByZXNlcnZhdGlvbkNhY2hlIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJza2lwQmFja05hdmlnYXRpb24iLCJjYW5jZWxEb2N1bWVudCIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0IiwicmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnRlcm5hbFJvdXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyB0eXBlIE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCwgdHlwZSBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IHsgZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQsIGlzUGF0aE9uRHJhZnRSb290LCByZXNvbHZlUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL0NvbnRleHRQYXRoSGVscGVyXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGluZ05hdmlnYXRpb25JbmZvLCBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMsIFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGluZ1RhcmdldCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1RhcmdldFR5cGUgfSBmcm9tIFwiLi4vc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcIi4vZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcIi4vbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5cbnR5cGUgUm91dGVJbmZvcm1hdGlvbiA9IHtcblx0dGFyZ2V0cz86IHVua25vd25bXTtcblx0cm91dGVMZXZlbDogbnVtYmVyO1xufTtcbi8qKlxuICoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uIENvbnRyb2xsZXIgZXh0ZW5zaW9ufVxuICogQHNpbmNlIDEuNzQuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlcm5hbFJvdXRpbmdcIilcbmNsYXNzIEludGVybmFsUm91dGluZyBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29QYWdlQ29tcG9uZW50ITogRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+IHwgbnVsbDtcblxuXHRwcml2YXRlIF9vUm91dGVyITogUm91dGVyO1xuXG5cdHByaXZhdGUgX29Sb3V0aW5nU2VydmljZSE6IFJvdXRpbmdTZXJ2aWNlO1xuXG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgX2ZuUm91dGVNYXRjaGVkQm91bmQ/OiBGdW5jdGlvbjtcblxuXHRwcm90ZWN0ZWQgX29UYXJnZXRJbmZvcm1hdGlvbiE6IFJvdXRpbmdUYXJnZXQ7XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vUm91dGluZ1NlcnZpY2UgJiYgdGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCkge1xuXHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mblJvdXRlTWF0Y2hlZEJvdW5kKTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fb1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpO1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fb1ZpZXcpO1xuXHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX29WaWV3KSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD47XG5cdFx0dGhpcy5fb1JvdXRlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um91dGVyKCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpO1xuXG5cdFx0aWYgKCF0aGlzLl9vQXBwQ29tcG9uZW50IHx8ICF0aGlzLl9vUGFnZUNvbXBvbmVudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgY29udHJvbGVyIGV4dGVuc2lvbiAnc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVzaW9ucy5JbnRlcm5hbFJvdXRpbmdcIik7XG5cdFx0fVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpcy5fb0FwcENvbXBvbmVudCA9PT0gdGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdC8vIFRoZSB2aWV3IGlzbid0IGhvc3RlZCBpbiBhIGRlZGljYXRlZCBVSUNvbXBvbmVudCwgYnV0IGRpcmVjdGx5IGluIHRoZSBhcHBcblx0XHRcdC8vIC0tPiBqdXN0IGtlZXAgdGhlIHZpZXdcblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ID0gbnVsbDtcblx0XHR9XG5cblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInJvdXRpbmdTZXJ2aWNlXCIpXG5cdFx0XHQudGhlbigob1JvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSkgPT4ge1xuXHRcdFx0XHR0aGlzLl9vUm91dGluZ1NlcnZpY2UgPSBvUm91dGluZ1NlcnZpY2U7XG5cdFx0XHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudD8uaXNBKFwic2FwLmZlLmNvcmUuUmV1c2VDb21wb25lbnRcIikgIT09IHRydWUpIHtcblx0XHRcdFx0XHQvLyBSZXVzZSBjb21wb25lbnRzIGNhbiBwb3RlbnRpYWxseSBlbWJlZCBhIHZpZXcgd2l0aCBhIHBhZ2UgY29udHJvbGxlciwgd2Ugd2FudCB0byBhdm9pZCBhdHRhY2hpbmcgdGhlIHJvdXRlIG1hdGNoZWQgZXZlbnQgaW4gdGhpcyBjYXNlXG5cdFx0XHRcdFx0dGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0XHRcdFx0dGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmF0dGFjaFJvdXRlTWF0Y2hlZCh7fSwgdGhpcy5fZm5Sb3V0ZU1hdGNoZWRCb3VuZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fb1RhcmdldEluZm9ybWF0aW9uID0gb1JvdXRpbmdTZXJ2aWNlLmdldFRhcmdldEluZm9ybWF0aW9uRm9yKHRoaXMuX29QYWdlQ29tcG9uZW50IHx8IHRoaXMuX29WaWV3KSEgPz8ge307XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGNhbm5vdCB3b3JrIHdpdGhvdXQgYSAncm91dGluZ1NlcnZpY2UnIG9uIHRoZSBtYWluIEFwcENvbXBvbmVudFwiKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJlZCBldmVyeSB0aW1lIHRoaXMgY29udHJvbGxlciBpcyBhIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJvdXRlTWF0Y2hlZCgpOiB2b2lkIHtcblx0XHQvKiovXG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUm91dGVNYXRjaGVkRmluaXNoZWQoKTogdm9pZCB7XG5cdFx0LyoqL1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvbkJlZm9yZUJpbmRpbmcoX2JpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge31cblxuXHRiZWZvcmVTZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IHVua25vd24pOiB2b2lkIHtcblx0XHR0aGlzLm9uQmVmb3JlQmluZGluZyhiaW5kaW5nQ29udGV4dCwgX21QYXJhbWV0ZXJzKTtcblx0XHRjb25zdCBvUm91dGluZyA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpLnJvdXRpbmc7XG5cdFx0aWYgKG9Sb3V0aW5nICYmIG9Sb3V0aW5nLm9uQmVmb3JlQmluZGluZykge1xuXHRcdFx0b1JvdXRpbmcub25CZWZvcmVCaW5kaW5nKGJpbmRpbmdDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uQWZ0ZXJCaW5kaW5nKGJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgX21QYXJhbWV0ZXJzPzogdW5rbm93bik6IHZvaWQge1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkub25Db250ZXh0Qm91bmRUb1ZpZXcoYmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0YWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IG51bGwsIF9tUGFyYW1ldGVycz86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMub25BZnRlckJpbmRpbmcoYmluZGluZ0NvbnRleHQsIHsgLi4uX21QYXJhbWV0ZXJzLCBkZWZlcnJlZENyZWF0aW9uOiB0cnVlIH0pO1xuXHRcdGNvbnN0IG9Sb3V0aW5nID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkucm91dGluZztcblx0XHRpZiAob1JvdXRpbmcgJiYgb1JvdXRpbmcub25BZnRlckJpbmRpbmcpIHtcblx0XHRcdG9Sb3V0aW5nLm9uQWZ0ZXJCaW5kaW5nKGJpbmRpbmdDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHQvLyBNZXRob2RzIHRyaWdnZXJpbmcgYSBuYXZpZ2F0aW9uIGFmdGVyIGEgdXNlciBhY3Rpb25cblx0Ly8gKGUuZy4gY2xpY2sgb24gYSB0YWJsZSByb3csIGJ1dHRvbiwgZXRjLi4uKVxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNwZWNpZmllZCBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHNOYXZpZ2F0aW9uVGFyZ2V0TmFtZSBOYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRhcmdldFxuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBUcnVlIHRvIGZvcmNlIHRoZSBuZXcgVVJMIHRvIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGJyb3dzZXIgaGlzdG9yeSAobm8gcmVwbGFjZSlcblx0ICogQHBhcmFtIGRlbGF5ZWRVc2FnZSBUcnVlIHRvIHJldHVybiBhIGZ1bmN0aW9uIGZvciBleGVjdXRpbmcgdGhlIG5hdmlnYXRpb24sIEZhbHNlIHRvIGV4ZWN1dGUgdGhlIG5hdmlnYXRpb24gaW1tZWRpYXRlbHlcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9UYXJnZXQoXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c05hdmlnYXRpb25UYXJnZXROYW1lOiBzdHJpbmcsXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogdHJ1ZVxuXHQpOiBQcm9taXNlPCgpID0+IHZvaWQ+O1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVRvVGFyZ2V0KFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNOYXZpZ2F0aW9uVGFyZ2V0TmFtZTogc3RyaW5nLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB2b2lkPiB7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25Db25maWd1cmF0aW9uID1cblx0XHRcdHRoaXMuX29QYWdlQ29tcG9uZW50ICYmXG5cdFx0XHR0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiAmJlxuXHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24oc05hdmlnYXRpb25UYXJnZXROYW1lKTtcblx0XHRpZiAob05hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsUm91dGUgPSBvTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24uZGV0YWlsO1xuXHRcdFx0Y29uc3Qgc1JvdXRlTmFtZSA9IG9EZXRhaWxSb3V0ZS5yb3V0ZTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJNYXBwaW5nID0gb0RldGFpbFJvdXRlLnBhcmFtZXRlcnM7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLm5hdmlnYXRlVG8ob0NvbnRleHQsIHNSb3V0ZU5hbWUsIG1QYXJhbWV0ZXJNYXBwaW5nLCBiUHJlc2VydmVIaXN0b3J5LCBkZWxheWVkVXNhZ2UpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRpbmdTZXJ2aWNlLm5hdmlnYXRlVG8ob0NvbnRleHQsIG51bGwsIG51bGwsIGJQcmVzZXJ2ZUhpc3RvcnksIGRlbGF5ZWRVc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgSGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGluc3RhbmNlXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVGFyZ2V0TmFtZSBOYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRhcmdldFxuXHQgKiBAcmV0dXJucyBUaGUgSGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvXG5cdCAqL1xuXHRhc3luYyBnZXRIYXNoRm9yTmF2aWdhdGlvbihjb250ZXh0OiBDb250ZXh0LCBuYXZpZ2F0aW9uVGFyZ2V0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiA9IHRoaXM/Ll9vUGFnZUNvbXBvbmVudD8uZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldE5hbWUpO1xuXHRcdGlmIChuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbikge1xuXHRcdFx0Y29uc3QgZGV0YWlsUm91dGUgPSBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbi5kZXRhaWw7XG5cdFx0XHRjb25zdCByb3V0ZU5hbWUgPSBkZXRhaWxSb3V0ZS5yb3V0ZTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlck1hcHBpbmcgPSBkZXRhaWxSb3V0ZS5wYXJhbWV0ZXJzO1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRIYXNoRnJvbVJvdXRlKGNvbnRleHQsIHJvdXRlTmFtZSwgcGFyYW1ldGVyTWFwcGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UuZ2V0SGFzaEZyb21Sb3V0ZShjb250ZXh0LCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgbmF2aWdhdGlvbiB0YXJnZXQgcm91dGUuXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gW29QYXJhbWV0ZXJzXSBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0aW5nU2VydmljZS5uYXZpZ2F0ZVRvUm91dGUoc1RhcmdldFJvdXRlTmFtZSwgb1BhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmljIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBPcHRpb25hbCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB0byAndHJ1ZScgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRpZiAocGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz8ubW9kZSA9PT0gXCJBc3luY1wiKSB7XG5cdFx0XHRcdC8vIHRoZSBjb250ZXh0IGlzIGVpdGhlciBjcmVhdGVkIGFzeW5jIChQcm9taXNlKVxuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGFjdGl2YXRlIHRoZSByb3V0ZU1hdGNoU3luY2hybyBvbiB0aGUgUm91dGVyUHJveHkgdG8gYXZvaWQgdGhhdFxuXHRcdFx0XHQvLyB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIG5hdmlnYXRlVG9Db250ZXh0IGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0XHR0aGlzLl9vUm91dGVyUHJveHkuYWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKCk7XG5cblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycy5jcmVhdGVDb250ZXh0UHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKGFzeW5jIChjcmVhdGVkQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gb25jZSB0aGUgY29udGV4dCBpcyByZXR1cm5lZCB3ZSBuYXZpZ2F0ZSBpbnRvIGl0XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjcmVhdGVkQ29udGV4dCwge1xuXHRcdFx0XHRcdFx0XHRjaGVja05vSGFzaENoYW5nZTogcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZSxcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU6IHBhcmFtZXRlcnMuZWRpdGFibGUsXG5cdFx0XHRcdFx0XHRcdHBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZUZDTExldmVsOiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsLFxuXHRcdFx0XHRcdFx0XHRmb3JjZUZvY3VzOiBwYXJhbWV0ZXJzLmZvcmNlRm9jdXNcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdpdGggdGhlIGFzeW5jIGNvbnRleHRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/Lm1vZGUgIT09IFwiRGVmZXJyZWRcIikge1xuXHRcdFx0XHQvLyBOYXZpZ2F0ZSB0byBhIGxpc3QgYmluZGluZyBub3QgeWV0IHN1cHBvcnRlZFxuXHRcdFx0XHR0aHJvdyBcIm5hdmlnYXRpb24gdG8gYSBsaXN0IGJpbmRpbmcgaXMgbm90IHlldCBzdXBwb3J0ZWRcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY2FsbEV4dGVuc2lvbikge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXG5cdFx0XHQvLyBTdG9yaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0IHRvIHVzZSBpdCBpbiBpbnRlcm5hbCByb3V0ZSBuYXZpZ2F0aW9uIGlmIG5lY2Vzc2FyeS5cblx0XHRcdGxldCBjb250ZXh0VG9OYXZpZ2F0ZTogQ29udGV4dCB8IG51bGwgPSBjb250ZXh0O1xuXHRcdFx0bGV0IGhpZGRlbkJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdFx0Ly8gSWYgd2UncmUgbmF2aWdhdGluZyBiYWNrLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIFwicGFyZW50XCIgY29udGV4dFxuXHRcdFx0XHRjb25zdCBiYWNrUGF0aCA9IHRoaXMuX29Sb3V0aW5nU2VydmljZS5nZXRQYXRoVG9OYXZpZ2F0ZUJhY2soY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHQvLyBBcyB3ZSBkb24ndCBjYWxsIHRoZSBleHRlbnNpb24gd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gdGhlIExSLCBiYWNrUGF0aCBpcyBuZXZlciBlbXB0eSBzbyB3ZSBjYW4gc2FmZWx5IGNyZWF0ZSBhIGNvbnRleHRcblx0XHRcdFx0aGlkZGVuQmluZGluZyA9IGNvbnRleHQuZ2V0TW9kZWwoKT8uYmluZENvbnRleHQoYmFja1BhdGgpO1xuXHRcdFx0XHRjb250ZXh0VG9OYXZpZ2F0ZSA9IGhpZGRlbkJpbmRpbmc/LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVOYXYgPSBhd2FpdCB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKS5yb3V0aW5nLm9uQmVmb3JlTmF2aWdhdGlvbih7IGJpbmRpbmdDb250ZXh0OiBjb250ZXh0VG9OYXZpZ2F0ZSB9KTtcblx0XHRcdGhpZGRlbkJpbmRpbmc/LmRlc3Ryb3koKTtcblx0XHRcdGlmIChvdmVycmlkZU5hdikge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIGNvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHBhcmFtZXRlcnMuRkNMTGV2ZWwgPSB0aGlzLmdldEZDTExldmVsKCk7XG5cblx0XHQvLyBJbiBjYXNlIHdlJ3JlIG5hdmlnYXRpbmcgZnJvbSBhIHRhYmxlIGluIGEgTGlzdFJlcG9ydCB3aXRoIGRyYWZ0LCB0aGVyZSdzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbGxhYm9yYXRpb24gYW5kIHRyZWUgdGFibGUuXG5cdFx0Ly8gV2UgbWF5IG5vdCBuYXZpZ2F0ZSB0byB0aGUgY29udGV4dCB0aGUgdXNlciBjbGlja2VkIG9uLlxuXHRcdGlmIChwYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcyAmJiBjb250ZXh0LmlzQTxDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0XHRpZiAoaXNQYXRoT25EcmFmdFJvb3QoY29udGV4dC5nZXRQYXRoKCksIG1ldGFNb2RlbCkpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dEZvck5hdmlnYXRpb24gPVxuXHRcdFx0XHRcdChhd2FpdCB0aGlzLmdldENvbnRleHRGb3JOYXZpZ2F0aW9uV2l0aENvbGxhYm9yYXRpb24oY29udGV4dCwgcGFyYW1ldGVycykpID8/XG5cdFx0XHRcdFx0KGF3YWl0IHRoaXMuZ2V0Q29udGV4dEZvck5hdmlnYXRpb25Gcm9tVHJlZU9yQW5hbHl0aWNhbFRhYmxlKGNvbnRleHQpKTtcblxuXHRcdFx0XHQvLyBVc2UgYW5vdGhlciBpbnN0YW5jZSBmb3IgbmF2aWdhdGlvblxuXHRcdFx0XHRpZiAoY29udGV4dEZvck5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dEZvck5hdmlnYXRpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzRm9yUHJldmlvdXNDb250ZXh0KCk7XG5cdFx0fVxuXHRcdGxldCBza2lwSGFzaEd1YXJkQ2hlY2s7XG5cdFx0Y29uc3QgaGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuX29BcHBDb21wb25lbnQ/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRjb25zdCBpc0RvY3VtZW50TW9kaWZpZWQgPSB0aGlzLl9vQXBwQ29tcG9uZW50Py5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpID8/IHRydWU7XG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5pc0ZjbEVuYWJsZWQoKSAmJlxuXHRcdFx0dGhpcy5nZXRGQ0xMZXZlbCgpID09PSAwICYmXG5cdFx0XHRoaWRkZW5EcmFmdEVuYWJsZWQgJiZcblx0XHRcdCFpc0RvY3VtZW50TW9kaWZpZWRcblx0XHQpIHtcblx0XHRcdHNraXBIYXNoR3VhcmRDaGVjayA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UubmF2aWdhdGVUb0NvbnRleHQoXG5cdFx0XHRjb250ZXh0LFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24sXG5cdFx0XHRza2lwSGFzaEd1YXJkQ2hlY2tcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGV4dCB0byB1c2UgZm9yIG5hdmlnYXRpb24gaW4gY2FzZSB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGEgZHJhZnQgaW5zdGFuY2UgZnJvbSB0aGUgTFIgYW5kIHdlJ3JlIGluIGEgY29sbGFib3JhdGlvbiBhcHBsaWNhdGlvbi5cblx0ICogQHBhcmFtIG9yaWdpbmFsQ29udGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBUaGUgY29udGV4dCB0byB1c2UgZm9yIG5hdmlnYXRpb24gaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgY29udGV4dCwgbnVsbCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Q29udGV4dEZvck5hdmlnYXRpb25XaXRoQ29sbGFib3JhdGlvbihcblx0XHRvcmlnaW5hbENvbnRleHQ6IENvbnRleHQsXG5cdFx0cGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdCk6IFByb21pc2U8Q29udGV4dCB8IG51bGw+IHtcblx0XHRjb25zdCBtb2RlbCA9IG9yaWdpbmFsQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSBmYWxzZSkge1xuXHRcdFx0Ly8gSWYgd2UncmUgaW4gYSBjb2xsYWJvcmF0aW9uIGFwcGxpY2F0aW9uLCBhbmQgd2UncmUgbmF2aWdhdGluZyB0byBhIGRyYWZ0IGluc3RhbmNlIGZyb20gdGhlIExSLFxuXHRcdFx0Ly8gV2Ugd2FudCB0byBjaGVjayBpZiB0aGUgZHJhZnQgaW5zdGFuY2UgZXhpc3RzIGZpcnN0LiBPdGhlcndpc2Ugd2UgbmF2aWdhdGUgdG8gdGhlIG9yaWdpbmFsIChkcmFmdCkgdmVyc2lvbi5cblx0XHRcdGxldCBkcmFmdE9yQWN0aXZlQ29udGV4dCA9IGF3YWl0IGdldERyYWZ0T3JBY3RpdmVDb250ZXh0KG9yaWdpbmFsQ29udGV4dCk7XG5cblx0XHRcdGlmIChkcmFmdE9yQWN0aXZlQ29udGV4dCAhPT0gbnVsbCAmJiBvcmlnaW5hbENvbnRleHQuZ2V0UGF0aCgpICE9PSBkcmFmdE9yQWN0aXZlQ29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0Ly8gTm90aWZ5IHRoZSB1c2VyIHRoYXQgd2UgaGF2ZSBuYXZpZ2F0ZWQgdG8gdGhlIHNhdmVkIGluc3RhbmNlXG5cdFx0XHRcdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9yaWdpbmFsQ29udGV4dC5nZXRQYXRoKCkpKTtcblx0XHRcdFx0cGFyYW1ldGVycy5yZWRpcmVjdGVkVG9Ob25EcmFmdCA9XG5cdFx0XHRcdFx0KG9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWUgYXMgdW5rbm93biBhcyBzdHJpbmcpID8/XG5cdFx0XHRcdFx0b2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hbWU7XG5cblx0XHRcdFx0aWYgKHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdFx0XHQvLyBGQ0w6IHJlcGxhY2UgdGhlIGNvbnRleHQgaW4gdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRleHRUb1JlcGxhY2VXaXRoID0gbW9kZWwuZ2V0S2VlcEFsaXZlQ29udGV4dChkcmFmdE9yQWN0aXZlQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdG9yaWdpbmFsQ29udGV4dC5yZXBsYWNlV2l0aChjb250ZXh0VG9SZXBsYWNlV2l0aCk7XG5cdFx0XHRcdFx0ZHJhZnRPckFjdGl2ZUNvbnRleHQgPSBjb250ZXh0VG9SZXBsYWNlV2l0aDsgLy8gVXNlIHRoZSBrZWVwLWFsaXZlIGNvbnRleHQgZm9yIG5hdmlnYXRpb25cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBGdWxsc2NyZWVuOiB0cmlnZ2VyIGEgcmVmcmVzaCBvZiB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBVc2UgdGhlIHNhdmVkIGluc3RhbmNlIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBkcmFmdE9yQWN0aXZlQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGNvbnRleHRcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgdG8gdXNlIGZvciBuYXZpZ2F0aW9uIGluIGNhc2Ugd2UncmUgbmF2aWdhdGluZyB0byBhbiBhY3RpdmUgaW5zdGFuY2UgZnJvbSB0aGUgTFIgYW5kIHdlJ3JlIGluIGEgVHJlZSBvciBBbmFseXRpY2FsIHRhYmxlLlxuXHQgKiBAcGFyYW0gb3JpZ2luYWxDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHRvIHVzZSBmb3IgbmF2aWdhdGlvbiBpZiBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBjb250ZXh0LCBudWxsIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRDb250ZXh0Rm9yTmF2aWdhdGlvbkZyb21UcmVlT3JBbmFseXRpY2FsVGFibGUob3JpZ2luYWxDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxDb250ZXh0IHwgbnVsbD4ge1xuXHRcdGNvbnN0IHBhcmVudEJpbmRpbmcgPSBvcmlnaW5hbENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdGlmICghcGFyZW50QmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0Ly8gVGhlIGNvbnRleHQgZG9lc24ndCBiZWxvbmcgdG8gYSBsaXN0IGJpbmRpbmdcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IHBhcmVudEJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhc1xuXHRcdFx0fCB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZzsgZ3JvdXA/OiBvYmplY3Q7IGFnZ3JlZ2F0ZT86IG9iamVjdCB9XG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWFnZ3JlZ2F0aW9uPy5oaWVyYXJjaHlRdWFsaWZpZXIgJiYgIWFnZ3JlZ2F0aW9uPy5ncm91cCAmJiAhYWdncmVnYXRpb24/LmFnZ3JlZ2F0ZSkge1xuXHRcdFx0Ly8gVGhlIGNvbnRleHQgZG9lc24ndCBiZWxvbmcgdG8gYSBoaWVyYXJjaGljYWwvYW5hbHl0aWNhbCBsaXN0IGJpbmRpbmdcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmIChvcmlnaW5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gdHJ1ZSAmJiBvcmlnaW5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gSWYgd2UncmUgaW4gYSBUcmVlL0FuYWx5dGljYWwgdGFibGUsIGFuZCB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGFuIGFjdGl2ZSBpbnN0YW5jZSBpbnN0YW5jZSB0aGF0IGhhcyBhIGRyYWZ0LFxuXHRcdFx0Ly8gLS0+IFdlIHRyeSB0byBuYXZpZ2F0ZSB0byB0aGUgZHJhZnQgaW5zdGFuY2UgKGlmIGl0IHN0aWxsIGV4aXN0cylcblx0XHRcdGNvbnN0IGRyYWZ0T3JBY3RpdmVDb250ZXh0ID0gYXdhaXQgZ2V0RHJhZnRPckFjdGl2ZUNvbnRleHQob3JpZ2luYWxDb250ZXh0KTtcblxuXHRcdFx0aWYgKGRyYWZ0T3JBY3RpdmVDb250ZXh0ICE9PSBudWxsICYmIG9yaWdpbmFsQ29udGV4dC5nZXRQYXRoKCkgIT09IGRyYWZ0T3JBY3RpdmVDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHQvLyBVc2UgdGhlIGRyYWZ0IGluc3RhbmNlIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBkcmFmdE9yQWN0aXZlQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGNvbnRleHRcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFja3dhcmRzIGZyb20gYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCBmcm9tXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQ6IENvbnRleHQsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9IC0xO1xuXG5cdFx0cmV0dXJuIHRoaXMubmF2aWdhdGVUb0NvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGZvcndhcmRzIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgT3B0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgT0RhdGFMaXN0QmluZGluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9IDE7XG5cblx0XHRyZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFjayBpbiBoaXN0b3J5IGlmIHRoZSBjdXJyZW50IGhhc2ggY29ycmVzcG9uZHMgdG8gYSB0cmFuc2llbnQgc3RhdGUuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGVCYWNrRnJvbVRyYW5zaWVudFN0YXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IHNIYXNoID0gdGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKTtcblxuXHRcdC8vIGlmIHRyaWdnZXJlZCB3aGlsZSBuYXZpZ2F0aW5nIHRvICguLi4pLCB3ZSBuZWVkIHRvIG5hdmlnYXRlIGJhY2tcblx0XHRpZiAoc0hhc2guaW5jbHVkZXMoXCIoLi4uKVwiKSkge1xuXHRcdFx0dGhpcy5fb1JvdXRlclByb3h5Lm5hdkJhY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgYW4gZXJyb3IgKGlsbHVzdHJhdGVkIG1lc3NhZ2UpIGluIHRoZSBwYWdlLlxuXHQgKiBAcGFyYW0gc0Vycm9yTWVzc2FnZVxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvTWVzc2FnZVBhZ2Uoc0Vycm9yTWVzc2FnZTogc3RyaW5nLCBtUGFyYW1ldGVyczogTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0bVBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycyB8fCB7fTtcblx0XHRjb25zdCBuYXZUb0NyZWF0ZUhhc2ggPVxuXHRcdFx0bVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VQYWdlT25DcmVhdGVGYWlsdXJlICE9PSB0cnVlICYmXG5cdFx0XHQodGhpcy5fb1JvdXRlclByb3h5LmdldEhhc2goKS5pbmNsdWRlcyhcImktYWN0aW9uPWNyZWF0ZVwiKSB8fCB0aGlzLl9vUm91dGVyUHJveHkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwiaS1hY3Rpb249YXV0b0NyZWF0ZVwiKSk7XG5cdFx0aWYgKG5hdlRvQ3JlYXRlSGFzaCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eS5uYXZUb0hhc2godGhpcy5fb1JvdXRpbmdTZXJ2aWNlLmdldERlZmF1bHRDcmVhdGVIYXNoKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5kaXNwbGF5RXJyb3JQYWdlKHNFcnJvck1lc3NhZ2UsIG1QYXJhbWV0ZXJzLCB0aGlzLmdldEZDTExldmVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdGF0ZSBpcyBpbXBhY3RlZCBieSB0aGUgY29udGV4dFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGluZ1NlcnZpY2UuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KG9Db250ZXh0KTtcblx0fVxuXG5cdF9pc1ZpZXdQYXJ0T2ZSb3V0ZShyb3V0ZUluZm9ybWF0aW9uPzogUm91dGVJbmZvcm1hdGlvbik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFUYXJnZXRzID0gcm91dGVJbmZvcm1hdGlvbj8udGFyZ2V0cztcblx0XHRpZiAoIWFUYXJnZXRzIHx8ICFhVGFyZ2V0cy5pbmNsdWRlcyh0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24udGFyZ2V0TmFtZSkpIHtcblx0XHRcdC8vIElmIHRoZSB0YXJnZXQgZm9yIHRoaXMgdmlldyBoYXMgYSB2aWV3IGxldmVsIGdyZWF0ZXIgdGhhbiB0aGUgcm91dGUgbGV2ZWwsIGl0IG1lYW5zIHRoaXMgdmlldyBjb21lcyBcImFmdGVyXCIgdGhlIHJvdXRlXG5cdFx0XHQvLyBpbiB0ZXJtcyBvZiBuYXZpZ2F0aW9uLlxuXHRcdFx0Ly8gSW4gc3VjaCBjYXNlLCB3ZSByZW1vdmUgaXRzIGJpbmRpbmcgY29udGV4dCwgdG8gYXZvaWQgdGhpcyB2aWV3IHRvIGhhdmUgZGF0YSBpZiB3ZSBuYXZpZ2F0ZSB0byBpdCBsYXRlciBvblxuXHRcdFx0Ly8gVGhpcyBpcyBkb25lIGluIGEgdGltZW91dCB0byBhbGxvdyBmb3IgZm9jdXNvdXQgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgcHJvcGVybHkgaW4gY29sbGFib3JhdGl2ZSBkcmFmdFxuXHRcdFx0aWYgKCh0aGlzLl9vVGFyZ2V0SW5mb3JtYXRpb24udmlld0xldmVsID8/IDApID49IChyb3V0ZUluZm9ybWF0aW9uPy5yb3V0ZUxldmVsID8/IDApKSB7XG5cdFx0XHRcdHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UoKS5hZGRCaW5kaW5nQ2xlYW51cFByb21pc2UoXG5cdFx0XHRcdFx0bmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAocm91dGVJbmZvcm1hdGlvbj8ucm91dGVMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRoZSByb3V0ZSBoYXMgbGV2ZWwgMCAtLT4gd2UgbmVlZCB0byBsZWF2ZSB0aGUgY29sbGFib3JhdGlvbiBzZXNzaW9uIGFzIG5vIE9QIGlzIGRpc3BsYXllZFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYmFzZS5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzRm9yUHJldmlvdXNDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG51bGwpOyAvLyBUaGlzIGFsc28gY2FsbCBzZXRLZWVwQWxpdmUoZmFsc2UpIG9uIHRoZSBjdXJyZW50IGNvbnRleHRcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdF9idWlsZEJpbmRpbmdQYXRoKFxuXHRcdHJvdXRlQXJndW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBvYmplY3Q+LFxuXHRcdGJpbmRpbmdQYXR0ZXJuOiBzdHJpbmcsXG5cdFx0bmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mb1xuXHQpOiB7IHBhdGg6IHN0cmluZzsgZGVmZXJyZWQ6IGJvb2xlYW4gfSB7XG5cdFx0bGV0IHBhdGggPSBiaW5kaW5nUGF0dGVybi5yZXBsYWNlKFwiOj9xdWVyeTpcIiwgXCJcIik7XG5cdFx0bGV0IGRlZmVycmVkID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gcm91dGVBcmd1bWVudHMpIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9IHJvdXRlQXJndW1lbnRzW3NLZXldO1xuXG5cdFx0XHRpZiAodHlwZW9mIHNWYWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNWYWx1ZSA9PT0gXCIuLi5cIiAmJiBiaW5kaW5nUGF0dGVybi5pbmNsdWRlcyhgeyR7c0tleX19YCkpIHtcblx0XHRcdFx0ZGVmZXJyZWQgPSB0cnVlO1xuXHRcdFx0XHQvLyBTb21ldGltZXMgaW4gcHJlZmVycmVkTW9kZSA9IGNyZWF0ZSwgdGhlIGVkaXQgYnV0dG9uIGlzIHNob3duIGluIGJhY2tncm91bmQgd2hlbiB0aGVcblx0XHRcdFx0Ly8gYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgc2hvd3MgdXAsIHNldHRpbmcgYlRhcmdldEVkaXRhYmxlIHBhc3NlcyBlZGl0YWJsZSBhcyB0cnVlXG5cdFx0XHRcdC8vIHRvIG9uQmVmb3JlQmluZGluZyBpbiBfYmluZFRhcmdldFBhZ2UgZnVuY3Rpb25cblx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHBhdGggPSBwYXRoLnJlcGxhY2UoYHske3NLZXl9fWAsIHNWYWx1ZSk7XG5cdFx0fVxuXHRcdGlmICgocm91dGVBcmd1bWVudHNbXCI/cXVlcnlcIl0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik/LltcImktYWN0aW9uXCJdPy5pbmNsdWRlcyhcImNyZWF0ZVwiKSkge1xuXHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuYkFjdGlvbkNyZWF0ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gdGhlIGJpbmRpbmcgcGF0aCBpcyBhbHdheXMgYWJzb2x1dGVcblx0XHRpZiAocGF0aCAmJiBwYXRoWzBdICE9PSBcIi9cIikge1xuXHRcdFx0cGF0aCA9IGAvJHtwYXRofWA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgcGF0aCwgZGVmZXJyZWQgfTtcblx0fVxuXG5cdC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdC8vIE1ldGhvZHMgdG8gYmluZCB0aGUgcGFnZSB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZFxuXHQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhIHJvdXRlIGlzIG1hdGNoZWQuXG5cdCAqIEJ1aWxkcyB0aGUgYmluZGluZyBjb250ZXh0IGZyb20gdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycywgYW5kIGJpbmQgdGhlIHBhZ2UgYWNjb3JkaW5nbHkuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdF9vblJvdXRlTWF0Y2hlZChcblx0XHRvRXZlbnQ6IEV2ZW50PHtcblx0XHRcdHJvdXRlSW5mb3JtYXRpb24/OiBSb3V0ZUluZm9ybWF0aW9uO1xuXHRcdFx0cm91dGVQYXR0ZXJuOiBzdHJpbmc7XG5cdFx0XHRuYXZpZ2F0aW9uSW5mbzogUm91dGluZ05hdmlnYXRpb25JbmZvO1xuXHRcdFx0YXJndW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBvYmplY3Q+O1xuXHRcdH0+XG5cdCk6IHZvaWQge1xuXHRcdC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgZm9yIHRoaXMgdmlldyBpcyBwYXJ0IG9mIHRoZSBldmVudCB0YXJnZXRzIChpLmUuIGlzIGEgdGFyZ2V0IGZvciB0aGUgY3VycmVudCByb3V0ZSkuXG5cdFx0Ly8gSWYgbm90LCB3ZSBkb24ndCBuZWVkIHRvIGJpbmQgaXQgLS0+IHJldHVyblxuXHRcdGlmICghdGhpcy5faXNWaWV3UGFydE9mUm91dGUob0V2ZW50LmdldFBhcmFtZXRlcihcInJvdXRlSW5mb3JtYXRpb25cIikpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0cmlldmUgdGhlIGJpbmRpbmcgY29udGV4dCBwYXR0ZXJuXG5cdFx0bGV0IGJpbmRpbmdQYXR0ZXJuO1xuXHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCAmJiB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dFBhdHRlcm4pIHtcblx0XHRcdGJpbmRpbmdQYXR0ZXJuID0gdGhpcy5fb1BhZ2VDb21wb25lbnQuZ2V0QmluZGluZ0NvbnRleHRQYXR0ZXJuKCk7XG5cdFx0fVxuXHRcdGJpbmRpbmdQYXR0ZXJuID0gYmluZGluZ1BhdHRlcm4gPz8gdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLmNvbnRleHRQYXR0ZXJuO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXR0ZXJuID09PSBudWxsIHx8IGJpbmRpbmdQYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIERvbid0IGRvIHRoaXMgaWYgd2UgYWxyZWFkeSBnb3Qgc1RhcmdldCA9PSAnJywgd2hpY2ggaXMgYSB2YWxpZCB0YXJnZXQgcGF0dGVyblxuXHRcdFx0YmluZGluZ1BhdHRlcm4gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicm91dGVQYXR0ZXJuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgdGhlIHBhcmFtZXRlcnMgYnkgdGhlaXIgdmFsdWVzIGluIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0dGVyblxuXHRcdGNvbnN0IG1Bcmd1bWVudHMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpLmFyZ3VtZW50cztcblx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmF2aWdhdGlvbkluZm9cIik7XG5cdFx0Y29uc3QgeyBwYXRoLCBkZWZlcnJlZCB9ID0gdGhpcy5fYnVpbGRCaW5kaW5nUGF0aChtQXJndW1lbnRzLCBiaW5kaW5nUGF0dGVybiwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblxuXHRcdHRoaXMub25Sb3V0ZU1hdGNoZWQoKTtcblxuXHRcdGxldCBiaW5kUHJvbWlzZTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLl9vVmlldy5nZXRNb2RlbCgpO1xuXHRcdGlmIChkZWZlcnJlZCkge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kRGVmZXJyZWQocGF0aCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbiAmJlxuXHRcdFx0KHRoaXMuX29Sb3V0ZXJQcm94eS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJpLWFjdGlvbj1lZGl0XCIpIHx8ICh0aGlzLl9vUGFnZUNvbXBvbmVudD8uaXNPcGVuSW5FZGl0TW9kZT8uKCkgPz8gZmFsc2UpKVxuXHRcdCkge1xuXHRcdFx0YmluZFByb21pc2UgPSB0aGlzLl9iaW5kUGFnZUZvckVkaXQocGF0aCwgb01vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaW5kUHJvbWlzZSA9IHRoaXMuX2JpbmRQYWdlKHBhdGgsIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9XG5cblx0XHRiaW5kUHJvbWlzZVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uUm91dGVNYXRjaGVkRmluaXNoZWQoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIGR1cmluZyBwYWdlIGJpbmRpbmcgXCIgKyBlcnJvci50b1N0cmluZygpKTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS51cGRhdGVVSVN0YXRlRm9yVmlldyh0aGlzLl9vVmlldywgdGhpcy5nZXRGQ0xMZXZlbCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZlcnJlZCBiaW5kaW5nIChkdXJpbmcgb2JqZWN0IGNyZWF0aW9uKS5cblx0ICogQHBhcmFtIHRhcmdldFBhdGggVGhlIHBhdGggdG8gdGhlIGRlZmZlcmVkIGNvbnRleHRcblx0ICogQHBhcmFtIG5hdmlnYXRpb25QYXJhbWV0ZXJzIE5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9iaW5kRGVmZXJyZWQodGFyZ2V0UGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChudWxsLCB7IGVkaXRhYmxlOiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5iVGFyZ2V0RWRpdGFibGUgfSk7XG5cblx0XHRpZiAoIW5hdmlnYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIHx8IG5hdmlnYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzLm1vZGUgPT09IFwiRGVmZXJyZWRcIikge1xuXHRcdFx0Ly8gZWl0aGVyIHRoZSBjb250ZXh0IHNoYWxsIGJlIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBwYWdlIChkZWZlcnJlZCBDb250ZXh0KSBvciBpdCBzaGFsbFxuXHRcdFx0Ly8gYmUgY3JlYXRlZCBhc3luYyBidXQgdGhlIHVzZXIgcmVmcmVzaGVkIHRoZSBwYWdlIC8gYm9va21hcmtlZCB0aGlzIFVSTFxuXHRcdFx0Ly8gVE9ETzogY3VycmVudGx5IHRoZSB0YXJnZXQgY29tcG9uZW50IGNyZWF0ZXMgdGhpcyBkb2N1bWVudCBidXQgd2Ugc2hhbGwgbW92ZSB0aGlzIHRvXG5cdFx0XHQvLyBhIGNlbnRyYWwgcGxhY2Vcblx0XHRcdGlmICh0aGlzLl9vUGFnZUNvbXBvbmVudCAmJiB0aGlzLl9vUGFnZUNvbXBvbmVudC5jcmVhdGVEZWZlcnJlZENvbnRleHQpIHtcblx0XHRcdFx0dGhpcy5fb1BhZ2VDb21wb25lbnQuY3JlYXRlRGVmZXJyZWRDb250ZXh0KFxuXHRcdFx0XHRcdHRhcmdldFBhdGgsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRcdFx0ISFuYXZpZ2F0aW9uUGFyYW1ldGVycy5iQWN0aW9uQ3JlYXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIHRoZSBjb250ZXh0IHRvIGF2b2lkIHNob3dpbmcgb2xkIGRhdGFcblx0XHR0aGlzLl9zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblxuXHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSBwYWdlIGZyb20gYSBwYXRoLCBpZiB0aGUgYXBwIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdC5cblx0ICpcblx0ICogSWYgdGhlIGNvbnRleHQgcG9pbnRzIHRvIGFuIGFjdGl2ZSBlbnRpdHksIGl0IGlzIGRpcmVjdGx5IGNvbnZlcnRlZCB0byBkcmFmdCB1c2luZyB0aGUgRWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb24uXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEBwYXJhbSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIG9uY2UgdGhlIGJpbmRpbmcgaGFzIGJlZW4gc2V0IG9uIHRoZSBwYWdlXG5cdCAqL1xuXHRhc3luYyBfYmluZFBhZ2VGb3JFZGl0KHRhcmdldFBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYmluZFBhZ2VUb0NvbnRleHQobnVsbCwgbW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKSk7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRlY2huaWNhbFBhdGg6IHN0cmluZyA9IGF3YWl0IHJlc29sdmVQYXRoKHRhcmdldFBhdGgsIG1vZGVsLCB0aGlzLl9vUm91dGluZ1NlcnZpY2UsIHRoaXMuX29Sb3V0ZXIpO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBmb3Igc3RpY2t5ICYgc3RpY2t5IGVkaXQgc2Vzc2lvblxuXHRcdFx0Y29uc3QgaXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmlzU3RpY2t5RWRpdE1vZGUodGhpcy5iYXNlLmdldFZpZXcoKSk7XG5cdFx0XHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChtZXRhTW9kZWwpO1xuXHRcdFx0aWYgKHRlY2huaWNhbFBhdGguaW5jbHVkZXMoXCJJc0FjdGl2ZUVudGl0eT10cnVlXCIpIHx8IChpc1N0aWNreSAmJiAhaXNTdGlja3lFZGl0TW9kZSkpIHtcblx0XHRcdFx0Ly8gY3JlYXRlIGNvbnRleHQgb3IgdXNlIHRoZSBvbmUgdGhlIHVzZXIgY2xpY2tlZCBvblxuXHRcdFx0XHRjb25zdCBhY3RpdmVDb250ZXh0ID1cblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycy51c2VDb250ZXh0Py5nZXRQYXRoKCkgPT09IHRlY2huaWNhbFBhdGhcblx0XHRcdFx0XHRcdD8gbmF2aWdhdGlvblBhcmFtZXRlcnMudXNlQ29udGV4dFxuXHRcdFx0XHRcdFx0OiB0aGlzLl9jcmVhdGVDb250ZXh0KHRlY2huaWNhbFBhdGgsIG1vZGVsKTtcblxuXHRcdFx0XHQvLyBlZGl0IGRvY3VtZW50XG5cdFx0XHRcdHJldHVybiBhd2FpdCB0aGlzLmJhc2UuZWRpdEZsb3cuZWRpdERvY3VtZW50KGFjdGl2ZUNvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2JpbmRQYWdlVG9QYXRoKHRlY2huaWNhbFBhdGgsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdFx0dGhpcy5uYXZpZ2F0ZVRvTWVzc2FnZVBhZ2UocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0RBVEFfUkVDRUlWRURfRVJST1JcIiksIHtcblx0XHRcdFx0dGl0bGU6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IChlcnJvciBhcyBFcnJvcikubWVzc2FnZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgcGFnZSBmcm9tIGEgcGF0aC5cblx0ICogQHBhcmFtIHRhcmdldFBhdGggVGhlIHBhdGggdG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIG1vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCBvbmNlIHRoZSBiaW5kaW5nIG9uIHRoZSBwYWdlIGlzIHNldFxuXHQgKi9cblx0YXN5bmMgX2JpbmRQYWdlKHRhcmdldFBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIG5hdmlnYXRpb25QYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gXCJcIikge1xuXHRcdFx0Ly8gVGhlIHBhZ2UgYmluZGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LCB0byBtYWtlIHN1cmUgX29uUm91dGVNYXRjaGVkIGlzIGNhbGxlZCBmb3IgYWxsIHRhcmdldHMgYmVmb3JlLCBhbmQgdGhlIGJpbmRpbmcgY2xlYW51cCBwcm9taXNlcyBhcmUgcHJvcGVybHkgc3RvcmVkIGluIHRoZSByb3V0aW5nIHNlcnZpY2UuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG51bGwsIG1vZGVsLCBuYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxQYXRoID0gYXdhaXQgcmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgbW9kZWwsIHRoaXMuX29Sb3V0aW5nU2VydmljZSwgdGhpcy5fb1JvdXRlcik7XG5cdFx0XHR0aGlzLl9iaW5kUGFnZVRvUGF0aCh0ZWNobmljYWxQYXRoLCBtb2RlbCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe30pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHRoZSBwYWdlIGZyb20gYSBwYXRoLlxuXHQgKiBAcGFyYW0gc1RhcmdldFBhdGggVGhlIHBhdGggdG8gYnVpbGQgdGhlIGNvbnRleHQgKHRoaXMgaXMgYSBwYXRoIGluIHRoZSBtb2RlbCwgc28gb25seSB0ZWNobmljYWwga2V5cyBhcmUgYWxsb3dlZCkuXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb1BhdGgoc1RhcmdldFBhdGg6IHN0cmluZywgb01vZGVsOiBPRGF0YU1vZGVsLCBvTmF2aWdhdGlvblBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IG9DdXJyZW50Q29udGV4dCA9IHRoaXMuX2dldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRzQ3VycmVudFBhdGggPSBvQ3VycmVudENvbnRleHQgJiYgb0N1cnJlbnRDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9Vc2VDb250ZXh0ID0gb05hdmlnYXRpb25QYXJhbWV0ZXJzLnVzZUNvbnRleHQgYXMgQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblxuXHRcdC8vIFdlIHNldCB0aGUgYmluZGluZyBjb250ZXh0IG9ubHkgaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmVcblx0XHQvLyBvciBpZiB3ZSBoYXZlIGEgY29udGV4dCBhbHJlYWR5IHNlbGVjdGVkXG5cdFx0aWYgKG9Vc2VDb250ZXh0ICYmIG9Vc2VDb250ZXh0LmdldFBhdGgoKSA9PT0gc1RhcmdldFBhdGgpIHtcblx0XHRcdGlmIChvVXNlQ29udGV4dCAhPT0gb0N1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGxldCBzaG91bGRSZWZyZXNoQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0XHQvLyBXZSBhbHJlYWR5IGhhdmUgdGhlIGNvbnRleHQgdG8gYmUgdXNlZCwgYW5kIGl0J3Mgbm90IHRoZSBjdXJyZW50IG9uZVxuXG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgRkNMLCBpZiB3ZSdyZSByZXVzaW5nIGEgY29udGV4dCBmcm9tIGEgdGFibGUgKHRocm91Z2ggbmF2aWdhdGlvbiksIHdlIHJlZnJlc2ggaXQgdG8gYXZvaWQgb3V0ZGF0ZWQgZGF0YVxuXHRcdFx0XHQvLyBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBiZSBjb21wbGV0ZWQgKHJlcXVlc3RSZWZyZXNoKSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBnb2VzIGludG8gdGhlIHNhbWVcblx0XHRcdFx0Ly8gYmF0Y2ggYXMgdGhlIG9uZXMgZnJvbSBjb250cm9scyBpbiB0aGUgcGFnZS5cblx0XHRcdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkgJiYgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5Sb3dQcmVzcykge1xuXHRcdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG9Vc2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdFx0aWYgKCFvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgb1VzZUNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHRcdFx0c2hvdWxkUmVmcmVzaENvbnRleHQgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHR0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkgfHxcblx0XHRcdFx0XHRcdChNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgb1VzZUNvbnRleHQuZ2V0UGF0aCgpKSAmJlxuXHRcdFx0XHRcdFx0XHRNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBidXQgd2UncmUgaW4gY29sbGFib3JhdGlvbiBkcmFmdCwgd2UgZm9yY2UgdGhlIHJlZnJlc2ggKGRpc2NhcmRpbmcgcGVuZGluZyBjaGFuZ2VzKSBhcyB3ZSBuZWVkIHRvIGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXHRcdFx0XHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1AsIHRoZSB2aWV3IGlzIG5vdCBjb25uZWN0ZWQgeWV0IC0tPiBjaGVjayBpZiB3ZSdyZSBpbiBkcmFmdCB3aXRoIGNvbGxhYm9yYXRpb24gZnJvbSB0aGUgbWV0YW1vZGVsXG5cdFx0XHRcdFx0XHRvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRzaG91bGRSZWZyZXNoQ29udGV4dCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KG9Vc2VDb250ZXh0LCBvTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChzaG91bGRSZWZyZXNoQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuX29BcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhbeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIiB9XSwgb1VzZUNvbnRleHQsIG9Vc2VDb250ZXh0LmdldEJpbmRpbmcoKS5nZXRHcm91cElkKCkpXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoYENhbm5vdCByZWZyZXNoIGNvbnRleHQ6ICR7ZXJyfWApO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRoZSBzYW1lIGNvbnRleHQgYnV0IGFuIGVkaXRmbG93IGFjdGlvbiBoYXBwZW5lZCAoZS5nLiBDYW5jZWxEb2N1bWVudCBpbiBzdGlja3kgbW9kZSlcblx0XHRcdFx0Ly8gLS0+IFdlIG5lZWQgdG8gY2FsbCBvbkJlZm9yZS9BZnRlckJpbmRpbmcgdG8gcmVmcmVzaCB0aGUgb2JqZWN0IHBhZ2UgcHJvcGVybHlcblx0XHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwge1xuXHRcdFx0XHRcdGVkaXRhYmxlOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlRhcmdldEVkaXRhYmxlLFxuXHRcdFx0XHRcdGxpc3RCaW5kaW5nOiBvVXNlQ29udGV4dC5nZXRCaW5kaW5nKCksXG5cdFx0XHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRcdFx0cmVhc29uOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMucmVhc29uLFxuXHRcdFx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChvVXNlQ29udGV4dCwgeyByZWRpcmVjdGVkVG9Ob25EcmFmdDogb05hdmlnYXRpb25QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNDdXJyZW50UGF0aCAhPT0gc1RhcmdldFBhdGggfHwgb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiA9PT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29udGV4dCBmb3IgaXRzIHBhdGhcblx0XHRcdHRoaXMuX2JpbmRQYWdlVG9Db250ZXh0KHRoaXMuX2NyZWF0ZUNvbnRleHQoc1RhcmdldFBhdGgsIG9Nb2RlbCksIG9Nb2RlbCwgb05hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5BcHBTdGF0ZUNoYW5nZWQgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uUmVzdG9yZUhpc3RvcnkgJiZcblx0XHRcdEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkgJiZcblx0XHRcdCFvUm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpICYmXG5cdFx0XHRvQ3VycmVudENvbnRleHRcblx0XHQpIHtcblx0XHRcdHRoaXMuX3JlZnJlc2hCaW5kaW5nQ29udGV4dChvQ3VycmVudENvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBCaW5kcyB0aGUgcGFnZSB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIGJlIGJvdW5kXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBvTmF2aWdhdGlvblBhcmFtZXRlcnMgTmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRfYmluZFBhZ2VUb0NvbnRleHQob0NvbnRleHQ6IENvbnRleHQgfCBudWxsLCBvTW9kZWw6IE9EYXRhTW9kZWwsIG9OYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25JbmZvKTogdm9pZCB7XG5cdFx0aWYgKCFvQ29udGV4dCkge1xuXHRcdFx0dGhpcy5iZWZvcmVTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdHRoaXMuYWZ0ZXJTZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvUGFyZW50TGlzdEJpbmRpbmcgPSBvQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0aWYgKG9Sb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKCkpIHtcblx0XHRcdGlmICghb1BhcmVudExpc3RCaW5kaW5nIHx8ICFvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0Ly8gaWYgdGhlIHBhcmVudEJpbmRpbmcgaXMgbm90IGEgbGlzdEJpbmRpbmcsIHdlIGNyZWF0ZSBhIG5ldyBjb250ZXh0XG5cdFx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuX3NldEtlZXBBbGl2ZShcblx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvQ29udGV4dCAmJiAhdGhpcy5fb0FwcENvbXBvbmVudC5pc0V4aXRpbmcgJiYgb1Jvb3RWaWV3Q29udHJvbGxlci5pc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlIC8vIExvYWQgbWVzc2FnZXMsIG90aGVyd2lzZSB0aGV5IGRvbid0IGdldCByZWZyZXNoZWQgbGF0ZXIsIGUuZy4gZm9yIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdC8vIHNldEtlZXBBbGl2ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwYXJlbnQgbGlzdGJpbmRpbmcgZG9lc24ndCBoYXZlICQkb3duUmVxdWVzdD10cnVlXG5cdFx0XHRcdC8vIFRoaXMgY2FzZSBmb3IgY3VzdG9tIGZyYWdtZW50cyBpcyBzdXBwb3J0ZWQsIGJ1dCBhbiBlcnJvciBpcyBsb2dnZWQgdG8gbWFrZSB0aGUgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gYXBwYXJlbnRcblx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdGBWaWV3IGZvciAke29Db250ZXh0LmdldFBhdGgoKX0gd29uJ3QgYmUgc3luY2hyb25pemVkLiBQYXJlbnQgbGlzdEJpbmRpbmcgbXVzdCBoYXZlIGJpbmRpbmcgcGFyYW1ldGVyICQkb3duUmVxdWVzdD10cnVlYFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIW9QYXJlbnRMaXN0QmluZGluZyB8fCBvUGFyZW50TGlzdEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQgb3RoZXJ3aXNlIHdlIGdldCBlcnJvcnNcblx0XHRcdG9Db250ZXh0ID0gdGhpcy5fY3JlYXRlQ29udGV4dChvQ29udGV4dC5nZXRQYXRoKCksIG9Nb2RlbCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGJpbmRpbmcgY29udGV4dCBpcyBwYXJ0IG9mIGEgY29sbGFib3JhdGl2ZSBkcmFmdCwgd2UgY2FsbCBhZGRTZWxmIGJlZm9yZSBiaW5kaW5nIHRoZSBwYWdlIHNvIHRoYXQgdGhlIFNoYXJlIGFjdGlvblxuXHRcdC8vIGlzIHBhcnQgb2YgdGhlIHNhbWUgYmF0Y2ggYXMgdGhlIHBhZ2UgbG9hZCwgYW5kIHdlIGNhbiBnZXQgdGhlIGxpc3Qgb2YgcGFydGljaXBhdGluZyB1c2VycyBsYXRlclxuXHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpICYmIG9Db250ZXh0LmdldFBhdGgoKS5pbmNsdWRlcyhcIklzQWN0aXZlRW50aXR5PWZhbHNlXCIpKSB7XG5cdFx0XHR0aGlzLmJhc2UuY29sbGFib3JhdGl2ZURyYWZ0LmV4ZWN1dGVTaGFyZUFjdGlvbihvQ29udGV4dCk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgd2l0aCB0aGUgcHJvcGVyIGJlZm9yZS9hZnRlciBjYWxsYmFja3Ncblx0XHR0aGlzLmJlZm9yZVNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0LCB7XG5cdFx0XHRlZGl0YWJsZTogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJUYXJnZXRFZGl0YWJsZSxcblx0XHRcdGxpc3RCaW5kaW5nOiBvUGFyZW50TGlzdEJpbmRpbmcsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBvTmF2aWdhdGlvblBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCxcblx0XHRcdHJlYXNvbjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLnJlYXNvbixcblx0XHRcdHNob3dQbGFjZWhvbGRlcjogb05hdmlnYXRpb25QYXJhbWV0ZXJzLmJTaG93UGxhY2Vob2xkZXJcblx0XHR9KTtcblxuXHRcdHRoaXMuX3NldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHR0aGlzLmFmdGVyU2V0QmluZGluZ0NvbnRleHQob0NvbnRleHQsIHsgcmVkaXJlY3RlZFRvTm9uRHJhZnQ6IG9OYXZpZ2F0aW9uUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQgfSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGNvbnRleHQgZnJvbSBhIHBhdGguXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aFxuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0XG5cdCAqL1xuXHRfY3JlYXRlQ29udGV4dChzUGF0aDogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBDb250ZXh0IHtcblx0XHRjb25zdCBvUGFnZUNvbXBvbmVudCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LFxuXHRcdFx0c0VudGl0eVNldCA9IG9QYWdlQ29tcG9uZW50ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCAmJiBvUGFnZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdHNDb250ZXh0UGF0aCA9XG5cdFx0XHRcdChvUGFnZUNvbXBvbmVudCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCAmJiBvUGFnZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpKSB8fCAoc0VudGl0eVNldCAmJiBgLyR7c0VudGl0eVNldH1gKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9NZXRhTW9kZWwpLFxuXHRcdFx0bVBhcmFtZXRlcnM6IEJpbmRDb250ZXh0UGFyYW1ldGVycyA9IHtcblx0XHRcdFx0JCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiLFxuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiJGF1dG9cIixcblx0XHRcdFx0JCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZVxuXHRcdFx0fTtcblx0XHRpZiAodGhpcy5iYXNlLmlubGluZUVkaXRGbG93LmlzSW5saW5lRWRpdFBvc3NpYmxlKCkpIHtcblx0XHRcdC8vIGlmIGlubGluZSBlZGl0IGlzIGVuYWJsZWQgb24gdGhlIHBhZ2UgYW5kIHRoaXMgaXMgdGhlIGFjdGl2ZSBlbnRpdHksIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBncm91cCBpZCB0byBpbmxpbmVcblx0XHRcdG1QYXJhbWV0ZXJzLiQkdXBkYXRlR3JvdXBJZCA9IHNQYXRoLmluY2x1ZGVzKFwiSXNBY3RpdmVFbnRpdHk9dHJ1ZVwiKSA/IENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCA6IFwiJGF1dG9cIjtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBvZiBkcmFmdDogJHNlbGVjdCB0aGUgc3RhdGUgZmxhZ3MgKEhhc0FjdGl2ZUVudGl0eSwgSGFzRHJhZnRFbnRpdHksIGFuZCBJc0FjdGl2ZUVudGl0eSkgYW5kIHNlbWFudGljIGtleXMgKGZvciBjcmVhdGluZyB0aGUgc2VtYW50aWMgVVJMKVxuXHRcdGNvbnN0IG9EcmFmdFJvb3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgKTtcblx0XHRjb25zdCBvRHJhZnROb2RlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlYCk7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gc0NvbnRleHRQYXRoXG5cdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzQ29udGV4dFBhdGgpICYmIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0NvbnRleHRQYXRoKSlcblx0XHRcdDogbnVsbDtcblx0XHRjb25zdCBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzID0gTW9kZWxIZWxwZXIuZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyhcblx0XHRcdGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0Py50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0XG5cdFx0KTtcblx0XHRjb25zdCBzZW1hbnRpY0tleXMgPSBvRHJhZnRSb290XG5cdFx0XHQ/IGRhdGFNb2RlbE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5Py5tYXAoKGtleSkgPT4ga2V5LnZhbHVlKSA/PyBbXVxuXHRcdFx0OiBbXTtcblx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRpZiAob1Jvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0bVBhcmFtZXRlcnMuJCRncm91cElkID0gXCIkYXV0by5Xb3JrZXJzXCI7IC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGdyb3VwIElEIGFzIGZvciB0aGUgcGFyZW50IGxpc3QgYmluZGluZ1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLl9nZXRLZWVwQWxpdmVDb250ZXh0KG9Nb2RlbCwgc1BhdGgsIGZhbHNlLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSBrZWVwQWxpdmUgY29udGV4dCAke3NQYXRofWApO1xuXHRcdFx0fSBlbHNlIGlmIChvRHJhZnRSb290IHx8IG9EcmFmdE5vZGUpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvUmVxdWVzdCA9IFtcIkhhc0FjdGl2ZUVudGl0eVwiLCBcIkhhc0RyYWZ0RW50aXR5XCIsIFwiSXNBY3RpdmVFbnRpdHlcIl0uY29uY2F0KHNlbWFudGljS2V5cyk7XG5cdFx0XHRcdGlmIChvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkocHJvcGVydGllc1RvUmVxdWVzdCk7XG5cdFx0XHRcdFx0aWYgKG9EcmFmdFJvb3QpIHtcblx0XHRcdFx0XHRcdG9Db250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBkcmFmdCBhbmQgZWRpdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBwcm9wZXJ0aWVzIGFyZSByZXF1ZXN0ZWQgYWdhaW4gZXZlbiBpZiB0aGV5IGFyZSBpbiB0aGUgYmluZGluZydzIGNhY2hlXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdoZW4geW91IGVkaXQgYW5kIGdvIHRvIHRoZSBzYXZlZCB2ZXJzaW9uIHlvdSBoYXZlIG5vIHdheSBvZiBzd2l0Y2hpbmcgYmFjayB0byB0aGUgZWRpdCB2ZXJzaW9uXG5cdFx0XHRcdFx0b0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKG9EcmFmdFJvb3QgPyBwcm9wZXJ0aWVzVG9SZXF1ZXN0LmNvbmNhdChbXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YVwiXSkgOiBwcm9wZXJ0aWVzVG9SZXF1ZXN0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb0NvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb1NlbGVjdDogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChzQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpO1xuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKHNNZXNzYWdlc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEluIGNhc2Ugb2YgZHJhZnQ6ICRzZWxlY3QgdGhlIHN0YXRlIGZsYWdzIChIYXNBY3RpdmVFbnRpdHksIEhhc0RyYWZ0RW50aXR5LCBhbmQgSXNBY3RpdmVFbnRpdHkpXG5cdFx0XHRpZiAob0RyYWZ0Um9vdCB8fCBvRHJhZnROb2RlKSB7XG5cdFx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKFwiSGFzQWN0aXZlRW50aXR5XCIsIFwiSGFzRHJhZnRFbnRpdHlcIiwgXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRcdFx0cHJvcGVydGllc1RvU2VsZWN0LnB1c2goLi4uc2VtYW50aWNLZXlzKTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnRpZXNUb1NlbGVjdC5wdXNoKC4uLmFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMpO1xuXG5cdFx0XHRpZiAoaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQgJiYgb0RyYWZ0Um9vdCkge1xuXHRcdFx0XHRwcm9wZXJ0aWVzVG9TZWxlY3QucHVzaChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0QWRtaW5pc3RyYXRpdmVVc2VyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHJvcGVydGllc1RvU2VsZWN0Lmxlbmd0aCkge1xuXHRcdFx0XHRtUGFyYW1ldGVycy4kc2VsZWN0ID0gcHJvcGVydGllc1RvU2VsZWN0LmpvaW4oXCIsXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRjb25zdCBvUHJldmlvdXNCaW5kaW5nID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1ByZXZpb3VzQmluZGluZykge1xuXHRcdFx0XHRcdG9Nb2RlbC5yZXNldENoYW5nZXMob1ByZXZpb3VzQmluZGluZy5nZXRVcGRhdGVHcm91cElkKCkpO1xuXHRcdFx0XHRcdG9QcmV2aW91c0JpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9IaWRkZW5CaW5kaW5nID0gb01vZGVsLmJpbmRDb250ZXh0KHNQYXRoLCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdFx0b0hpZGRlbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlcXVlc3RlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLl9vVmlldyk7XG5cdFx0XHRcdHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKHRoaXMuX29WaWV3KTtcblx0XHRcdH0pO1xuXHRcdFx0b0hpZGRlbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiZGF0YVJlY2VpdmVkXCIsIHRoaXMub25EYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7XG5cdFx0XHRyZXR1cm4gb0hpZGRlbkJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGFzeW5jIG9uRGF0YVJlY2VpdmVkKG9FdmVudDogRXZlbnQ8eyBlcnJvcjogeyBzdGF0dXM/OiBudW1iZXI7IGNhdXNlPzogeyBzdGF0dXM/OiBudW1iZXIgfTsgbWVzc2FnZT86IHN0cmluZyB9IH0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZXJyb3IgPSBvRXZlbnQ/LmdldFBhcmFtZXRlcihcImVycm9yXCIpO1xuXHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuX29WaWV3KSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5fb1ZpZXcpO1xuXHRcdH1cblxuXHRcdGlmIChlcnJvcikge1xuXHRcdFx0Ly8gVE9ETzogaW4gY2FzZSBvZiA0MDQgdGhlIHRleHQgc2hhbGwgYmUgZGlmZmVyZW50XG5cdFx0XHRjb25zdCBtZXNzYWdlSGFuZGxlciA9IHRoaXMuYmFzZS5tZXNzYWdlSGFuZGxlcjtcblx0XHRcdGxldCBtUGFyYW1zOiBTaG93TWVzc2FnZXNQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRjb25zdCBlcnJvclN0YXR1cyA9IGVycm9yLnN0YXR1cyA/PyBlcnJvci5jYXVzZT8uc3RhdHVzO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdFx0aWYgKGVycm9yU3RhdHVzID09PSA1MDMpIHtcblx0XHRcdFx0XHRtUGFyYW1zID0ge1xuXHRcdFx0XHRcdFx0aXNJbml0aWFsTG9hZDUwM0Vycm9yOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2hlbGxCYWNrOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIGlmIChlcnJvclN0YXR1cyA9PT0gNDAwKSB7XG5cdFx0XHRcdFx0bVBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfREFUQV9SRUNFSVZFRF9FUlJPUl9ERVNDUklQVElPTlwiKSxcblx0XHRcdFx0XHRcdGlzRGF0YVJlY2VpdmVkRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRzaGVsbEJhY2s6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1QYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBlcnJvcj8ubWVzc2FnZSxcblx0XHRcdFx0XHRcdGlzRGF0YVJlY2VpdmVkRXJyb3I6IHRydWUsXG5cdFx0XHRcdFx0XHRzaGVsbEJhY2s6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgY29yZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRtUGFyYW1zLmNvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKG1QYXJhbXMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCB0aGlzLmJhc2UubWVzc2FnZUhhbmRsZXIucmVsZWFzZUhvbGRCeUNvbnRyb2wodGhpcy5fb1ZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyBzaWRlIGVmZmVjdHMgb24gYSBiaW5kaW5nIGNvbnRleHQgdG8gXCJyZWZyZXNoXCIgaXQuXG5cdCAqIFRPRE86IGdldCByaWQgb2YgdGhpcyBvbmNlIHByb3ZpZGVkIGJ5IHRoZSBtb2RlbFxuXHQgKiBhIHJlZnJlc2ggb24gdGhlIGJpbmRpbmcgY29udGV4dCBkb2VzIG5vdCB3b3JrIGluIGNhc2UgYSBjcmVhdGlvbiByb3cgd2l0aCBhIHRyYW5zaWVudCBjb250ZXh0IGlzXG5cdCAqIHVzZWQuIGFsc28gYSByZXF1ZXN0U2lkZUVmZmVjdHMgd2l0aCBhbiBlbXB0eSBwYXRoIHdvdWxkIGZhaWwgZHVlIHRvIHRoZSB0cmFuc2llbnQgY29udGV4dFxuXHQgKiB0aGVyZWZvcmUgd2UgZ2V0IGFsbCBkZXBlbmRlbnQgYmluZGluZ3MgKHZpYSBwcml2YXRlIG1vZGVsIG1ldGhvZCkgdG8gZGV0ZXJtaW5lIGFsbCBwYXRocyBhbmQgdGhlblxuXHQgKiByZXF1ZXN0IHRoZW0uXG5cdCAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgQ29udGV4dCB0byBiZSByZWZyZXNoZWRcblx0ICovXG5cdF9yZWZyZXNoQmluZGluZ0NvbnRleHQob0JpbmRpbmdDb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1BhZ2VDb21wb25lbnQgPSB0aGlzLl9vUGFnZUNvbXBvbmVudDtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRjb25zdCBzUm9vdENvbnRleHRQYXRoID0gb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBzRW50aXR5U2V0ID0gb1BhZ2VDb21wb25lbnQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0RW50aXR5U2V0ICYmIG9QYWdlQ29tcG9uZW50LmdldEVudGl0eVNldCgpO1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9XG5cdFx0XHQob1BhZ2VDb21wb25lbnQgJiYgb1BhZ2VDb21wb25lbnQuZ2V0Q29udGV4dFBhdGggJiYgb1BhZ2VDb21wb25lbnQuZ2V0Q29udGV4dFBhdGgoKSkgfHwgKHNFbnRpdHlTZXQgJiYgYC8ke3NFbnRpdHlTZXR9YCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNNZXNzYWdlc1BhdGg7XG5cdFx0Y29uc3QgYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IGFQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlID0ge1xuXHRcdFx0dGFyZ2V0UHJvcGVydGllczogW10sXG5cdFx0XHR0YXJnZXRFbnRpdGllczogW11cblx0XHR9O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0QmluZGluZ1BhdGhzKG9CaW5kaW5nOiBCaW5kaW5nKTogdm9pZCB7XG5cdFx0XHRsZXQgYURlcGVuZGVudEJpbmRpbmdzO1xuXHRcdFx0Y29uc3Qgc1JlbGF0aXZlUGF0aCA9IChvQmluZGluZy5nZXRDb250ZXh0KCk/LmdldFBhdGgoKSA/PyBcIlwiKS5yZXBsYWNlKHNSb290Q29udGV4dFBhdGgsIFwiXCIpOyAvLyBJZiBubyBjb250ZXh0LCB0aGlzIGlzIGFuIGFic29sdXRlIGJpbmRpbmcgc28gbm8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0Y29uc3Qgc1BhdGggPSAoc1JlbGF0aXZlUGF0aCA/IGAke3NSZWxhdGl2ZVBhdGguc2xpY2UoMSl9L2AgOiBzUmVsYXRpdmVQYXRoKSArIG9CaW5kaW5nLmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKG9CaW5kaW5nLmlzQTxPRGF0YUNvbnRleHRCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdC8vIGlmIChzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHQvLyBub3cgZ2V0IHRoZSBkZXBlbmRlbnQgYmluZGluZ3Ncblx0XHRcdFx0YURlcGVuZGVudEJpbmRpbmdzID0gb0JpbmRpbmcuZ2V0RGVwZW5kZW50QmluZGluZ3MoKTtcblx0XHRcdFx0aWYgKGFEZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0XHRcdC8vIGFzayB0aGUgZGVwZW5kZW50IGJpbmRpbmdzIChhbmQgb25seSB0aG9zZSB3aXRoIHRoZSBzcGVjaWZpZWQgZ3JvdXBJZFxuXHRcdFx0XHRcdC8vaWYgKGFEZXBlbmRlbnRCaW5kaW5ncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFEZXBlbmRlbnRCaW5kaW5ncykge1xuXHRcdFx0XHRcdFx0Z2V0QmluZGluZ1BhdGhzKGl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICghYU5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5wdXNoKHNQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZy5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAoIWFOYXZpZ2F0aW9uUHJvcGVydHlQYXRocy5pbmNsdWRlcyhzUGF0aCkpIHtcblx0XHRcdFx0XHRhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMucHVzaChzUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcuaXNBPE9EYXRhUHJvcGVydHlCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YVByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdFx0XHRpZiAoIWFQcm9wZXJ0eVBhdGhzLmluY2x1ZGVzKHNQYXRoKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0eVBhdGhzLnB1c2goc1BhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNDb250ZXh0UGF0aCkge1xuXHRcdFx0c01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpO1xuXHRcdH1cblxuXHRcdC8vIGJpbmRpbmcgb2YgdGhlIGNvbnRleHQgbXVzdCBoYXZlICQkUGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMgdHJ1ZSwgdGhpcyBib3VuZCBjb250ZXh0IG1heSBiZSBuZWVkZWQgdG8gYmUgZmV0Y2hlZCBmcm9tIHRoZSBkZXBlbmRlbnQgYmluZGluZ1xuXHRcdGdldEJpbmRpbmdQYXRocyhvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKTtcblxuXHRcdGxldCBpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBhTmF2aWdhdGlvblByb3BlcnR5UGF0aHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFOYXZpZ2F0aW9uUHJvcGVydHlQYXRoc1tpXVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzID0gYVByb3BlcnR5UGF0aHM7XG5cdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnB1c2goc01lc3NhZ2VzUGF0aCk7XG5cdFx0fVxuXHRcdC8vYWxsIHRoaXMgbG9naWMgdG8gYmUgcmVwbGFjZWQgd2l0aCBhIFNpZGVFZmZlY3RzIHJlcXVlc3QgZm9yIGFuIGVtcHR5IHBhdGggKHJlZnJlc2ggZXZlcnl0aGluZyksIGFmdGVyIHRlc3RpbmcgdHJhbnNpZW50IGNvbnRleHRzXG5cdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMgPSBvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcy5yZWR1Y2UoKHRhcmdldHM6IHN0cmluZ1tdLCB0YXJnZXRQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0aWYgKHRhcmdldFByb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IGluZGV4ID0gdGFyZ2V0UHJvcGVydHkuaW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdHRhcmdldHMucHVzaChpbmRleCA+IDAgPyB0YXJnZXRQcm9wZXJ0eS5zbGljZSgwLCBpbmRleCkgOiB0YXJnZXRQcm9wZXJ0eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFyZ2V0cztcblx0XHR9LCBbXSk7XG5cdFx0Ly8gT0RhdGEgbW9kZWwgd2lsbCB0YWtlIGNhcmUgb2YgZHVwbGljYXRlc1xuXHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFsuLi5vU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMsIC4uLm9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzXSwgb0JpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2Ugb3IgdGhlIGNvbXBvbmVudC5cblx0ICogQHJldHVybnMgVGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0X2dldEJpbmRpbmdDb250ZXh0KCk6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUGFnZUNvbXBvbmVudC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9vVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2Ugb3IgdGhlIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0X3NldEJpbmRpbmdDb250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBudWxsKTogdm9pZCB7XG5cdFx0bGV0IHByZXZpb3VzQ29udGV4dDogQ29udGV4dCwgdGFyZ2V0Q29udHJvbDogVmlldyB8IEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRpZiAodGhpcy5fb1BhZ2VDb21wb25lbnQpIHtcblx0XHRcdHByZXZpb3VzQ29udGV4dCA9IHRoaXMuX29QYWdlQ29tcG9uZW50LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdHRhcmdldENvbnRyb2wgPSB0aGlzLl9vUGFnZUNvbXBvbmVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJldmlvdXNDb250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdHRhcmdldENvbnRyb2wgPSB0aGlzLl9vVmlldztcblx0XHR9XG5cdFx0dGFyZ2V0Q29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRpZiAocHJldmlvdXNDb250ZXh0Py5pc0tlZXBBbGl2ZSgpICYmIHByZXZpb3VzQ29udGV4dCAhPT0gY29udGV4dCkge1xuXHRcdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdC8qIEJlZm9yZSBkZWxldGluZyB0aGUgYmluZGluZ0NvbnRleHQsIHdlIGVuc3VyZSBpdCdzIG5vdCBhbHNvIHVzZWQgaW4gYW5vdGhlciBwYWdlLiovXG5cdFx0XHRpZiAoIXJvb3RWaWV3Q29udHJvbGxlci5nZXRJbnN0YW5jZWRWaWV3cygpLnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dD8uKCkgPT09IHByZXZpb3VzQ29udGV4dCkpIHtcblx0XHRcdFx0dGhpcy5fc2V0S2VlcEFsaXZlKHByZXZpb3VzQ29udGV4dCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBmbGV4aWJsZSBjb2x1bW4gbGF5b3V0IChGQ0wpIGxldmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZpZXcgKC0xIGlmIHRoZSBhcHAgaXMgbm90IEZDTCkuXG5cdCAqIEByZXR1cm5zIFRoZSBsZXZlbFxuXHQgKi9cblx0Z2V0RkNMTGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fb1RhcmdldEluZm9ybWF0aW9uLkZDTExldmVsO1xuXHR9XG5cblx0X3NldEtlZXBBbGl2ZShcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRiS2VlcEFsaXZlOiBib29sZWFuLFxuXHRcdGZuQmVmb3JlRGVzdHJveT86IFBhcmFtZXRlcnM8Q29udGV4dFtcInNldEtlZXBBbGl2ZVwiXT5bMV0sXG5cdFx0YlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW5cblx0KTogdm9pZCB7XG5cdFx0aWYgKG9Db250ZXh0LmdldFBhdGgoKS5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdC8vIFdlIGtlZXAgdGhlIGNvbnRleHQgYWxpdmUgb25seSBpZiB0aGV5J3JlIHBhcnQgb2YgYSBjb2xsZWN0aW9uLCBpLmUuIGlmIHRoZSBwYXRoIGVuZHMgd2l0aCBhICcpJ1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBzTWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG9NZXRhTW9kZWwsIHNNZXRhUGF0aCk7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoYktlZXBBbGl2ZSwgZm5CZWZvcmVEZXN0cm95LCAhIXNNZXNzYWdlc1BhdGggJiYgYlJlcXVlc3RNZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEtlZXBBbGl2ZUNvbnRleHQoXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRiUmVxdWVzdE1lc3NhZ2VzPzogYm9vbGVhbixcblx0XHRwYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzXG5cdCk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdC8vIEdldCB0aGUgcGF0aCBmb3IgdGhlIGNvbnRleHQgdGhhdCBpcyByZWFsbHkga2VwdCBhbGl2ZSAocGFydCBvZiBhIGNvbGxlY3Rpb24pXG5cdFx0Ly8gaS5lLiByZW1vdmUgYWxsIHNlZ21lbnRzIG5vdCBlbmRpbmcgd2l0aCBhICcpJ1xuXHRcdGNvbnN0IGtlcHRBbGl2ZVNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgYWRkaXRpb25uYWxTZWdtZW50czogc3RyaW5nW10gPSBbXTtcblx0XHR3aGlsZSAoa2VwdEFsaXZlU2VnbWVudHMubGVuZ3RoICYmICFrZXB0QWxpdmVTZWdtZW50c1trZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggLSAxXS5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdGFkZGl0aW9ubmFsU2VnbWVudHMucHVzaChrZXB0QWxpdmVTZWdtZW50cy5wb3AoKSEpO1xuXHRcdH1cblxuXHRcdGlmIChrZXB0QWxpdmVTZWdtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2VwdEFsaXZlUGF0aCA9IGtlcHRBbGl2ZVNlZ21lbnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9LZWVwQWxpdmVDb250ZXh0ID0gb01vZGVsLmdldEtlZXBBbGl2ZUNvbnRleHQoa2VwdEFsaXZlUGF0aCwgYlJlcXVlc3RNZXNzYWdlcywgcGFyYW1ldGVycyk7XG5cblx0XHRpZiAoYWRkaXRpb25uYWxTZWdtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBvS2VlcEFsaXZlQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWRkaXRpb25uYWxTZWdtZW50cy5yZXZlcnNlKCk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbm5hbFBhdGggPSBhZGRpdGlvbm5hbFNlZ21lbnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0cmV0dXJuIG9Nb2RlbC5iaW5kQ29udGV4dChhZGRpdGlvbm5hbFBhdGgsIG9LZWVwQWxpdmVDb250ZXh0KS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU3dpdGNoZXMgYmV0d2VlbiBjb2x1bW4gYW5kIGZ1bGwtc2NyZWVuIG1vZGUgd2hlbiBGQ0wgaXMgdXNlZC5cblx0ICpcblx0ICovXG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHN3aXRjaEZ1bGxTY3JlZW4oKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1NvdXJjZSA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ZDTEhlbHBlck1vZGVsID0gb1NvdXJjZS5nZXRNb2RlbChcImZjbGhlbHBlclwiKSxcblx0XHRcdGJJc0Z1bGxTY3JlZW4gPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vaXNGdWxsU2NyZWVuXCIpLFxuXHRcdFx0c05leHRMYXlvdXQgPSBvRkNMSGVscGVyTW9kZWwuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdGJJc0Z1bGxTY3JlZW4gPyBcIi9hY3Rpb25CdXR0b25zSW5mby9leGl0RnVsbFNjcmVlblwiIDogXCIvYWN0aW9uQnV0dG9uc0luZm8vZnVsbFNjcmVlblwiXG5cdFx0XHQpLFxuXHRcdFx0b1Jvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvQ29udGV4dCA9IChvUm9vdFZpZXdDb250cm9sbGVyIGFzIEZjbENvbnRyb2xsZXIpLmdldFJpZ2h0bW9zdENvbnRleHRcblx0XHRcdD8gKG9Sb290Vmlld0NvbnRyb2xsZXIgYXMgRmNsQ29udHJvbGxlcikuZ2V0UmlnaHRtb3N0Q29udGV4dCgpIVxuXHRcdFx0OiBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHR0aGlzLmJhc2UuX3JvdXRpbmcubmF2aWdhdGVUb0NvbnRleHQob0NvbnRleHQsIHsgbGF5b3V0OiBzTmV4dExheW91dCB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRMb2cud2FybmluZyhcImNhbm5vdCBzd2l0Y2ggYmV0d2VlbiBjb2x1bW4gYW5kIGZ1bGxzY3JlZW5cIik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBjb2x1bW4gZm9yIHRoZSBjdXJyZW50IHZpZXcgaW4gYSBGQ0wuXG5cdCAqXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQmVmb3JlKVxuXHRhc3luYyBjbG9zZUNvbHVtbigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLl9vVmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5fb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uUGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0bm9QcmVzZXJ2YXRpb25DYWNoZTogdHJ1ZSxcblx0XHRcdGxheW91dDogdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuZ2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm8vY2xvc2VDb2x1bW5cIiksXG5cdFx0XHRjYWxsRXh0ZW5zaW9uOiB0cnVlXG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpPy5nZXRNb2RlbChcInVpXCIpPy5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLl9vQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdC5lbmFibGVkO1xuXG5cdFx0aWYgKCFpc0RvY3VtZW50TW9kaWZpZWQgJiYgaXNIaWRkZW5EcmFmdEVuYWJsZWQgJiYgb1ZpZXdEYXRhPy52aWV3TGV2ZWwgPT09IDEpIHtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRza2lwRGlzY2FyZFBvcG92ZXI6IHRydWUsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvbjogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdGF3YWl0IHRoaXMuYmFzZS5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH0gZWxzZSBpZiAob1ZpZXdEYXRhPy52aWV3TGV2ZWwgPT09IDEgJiYgTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTWV0YU1vZGVsLCBvQ29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQsIG5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcy5fb1ZpZXcuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCwgbmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHQvLyBSZW1vdmVzIHRyYW5zaXRpb24gbWVzc2FnZSBmb3IgdGhlIHNwZWNpZmllZCBjb250ZXh0XG5cdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQob0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRoZSB0cmFuc2l0aW9uIG1lc3NhZ2VzIG9mIHRoZSBjb250ZXh0IGZyb20gd2hlcmUgdGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkLlxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXNGb3JQcmV2aW91c0NvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcHJldmlvdXNDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAocHJldmlvdXNDb250ZXh0KSB7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQWxsVHJhbnNpdGlvbk1lc3NhZ2VzRm9yQ29udGV4dChwcmV2aW91c0NvbnRleHQpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcm5hbFJvdXRpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNENBO0FBQ0E7QUFDQTtBQUNBO0VBSEEsSUFLTUEsZUFBZSxJQUFBQyxJQUFBLEdBRHBCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQW9CakVDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FPaEJELGNBQWMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0F3Q2hCQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBQ2pCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQUMsS0FBQSxHQUtuQ0wsZUFBZSxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUNqQkosVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLEVBQUFHLEtBQUEsR0FLbkNQLGVBQWUsQ0FBQyxDQUFDLEVBQUFRLEtBQUEsR0FDakJOLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBSyxNQUFBLEdBV25DVCxlQUFlLENBQUMsQ0FBQyxFQUFBVSxNQUFBLEdBQ2pCUixVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsRUFBQU8sTUFBQSxHQWdDbkNYLGVBQWUsQ0FBQyxDQUFDLEVBQUFZLE1BQUEsR0E2Q2pCWixlQUFlLENBQUMsQ0FBQyxFQUFBYSxNQUFBLEdBbU5qQmIsZUFBZSxDQUFDLENBQUMsRUFBQWMsTUFBQSxHQUNqQkMsY0FBYyxDQUFDLENBQUMsRUFBQUMsTUFBQSxHQWlDaEJoQixlQUFlLENBQUMsQ0FBQyxFQUFBaUIsTUFBQSxHQUNqQkYsY0FBYyxDQUFDLENBQUMsRUFBQUcsTUFBQSxHQW1kaEJsQixlQUFlLENBQUMs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