@sapui5/sap.fe.core 1.121.3 → 1.121.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +54 -40
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +62 -38
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -174,7 +174,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
174
174
|
const oBindingContext = this.base.getView().getBindingContext();
|
|
175
175
|
const oMetaModel = oBindingContext && oBindingContext.getModel().getMetaModel();
|
|
176
176
|
if (this.base.getView().getViewData().converterType === "ObjectPage" && oMetaModel && !ModelHelper.isStickySessionSupported(oMetaModel) && !((navigationParameters === null || navigationParameters === void 0 ? void 0 : navigationParameters.navMode) === "explace")) {
|
|
177
|
-
draft.processDataLossOrDraftDiscardConfirmation(_doNavigate.bind(this), Function.prototype, this.base.getView().getBindingContext(), this.base.getView().getController(),
|
|
177
|
+
draft.processDataLossOrDraftDiscardConfirmation(_doNavigate.bind(this), Function.prototype, this.base.getView().getBindingContext(), this.base.getView().getController(), false, draft.NavigationType.ForwardNavigation);
|
|
178
178
|
} else {
|
|
179
179
|
_doNavigate();
|
|
180
180
|
}
|
|
@@ -773,4 +773,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
773
773
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareContextForExternalNavigation", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareContextForExternalNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getNavigationMode", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "getNavigationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateWithConfirmationDialog", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateWithConfirmationDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getEntitySet", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "getEntitySet"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeSensitiveData", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "removeSensitiveData"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateOutbound", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateOutbound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getOutboundParams", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "getOutboundParams"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onChevronPressNavigateOutBound", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onChevronPressNavigateOutBound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "keepNavigationPropertiesForNavigation", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "keepNavigationPropertiesForNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getSemanticAttributesWithoutNavigationProperties", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "getSemanticAttributesWithoutNavigationProperties"), _class2.prototype)), _class2)) || _class);
|
|
774
774
|
return InternalIntentBasedNavigation;
|
|
775
775
|
}, false);
|
|
776
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIl9vTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIl9vVmlldyIsImdldFZpZXciLCJuYXZpZ2F0ZSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJfZG9OYXZpZ2F0ZSIsIm9Db250ZXh0Iiwidk5hdmlnYXRpb25Db250ZXh0cyIsIm5hdmlnYXRpb25Db250ZXh0cyIsImFOYXZpZ2F0aW9uQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2U2VtYW50aWNPYmplY3RNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidk91dGJvdW5kUGFyYW1zIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib1RhcmdldEluZm8iLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNldEJpbmRpbmdDb250ZXh0IiwiYVNlbWFudGljQXR0cmlidXRlcyIsIm9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsImxlbmd0aCIsImZvckVhY2giLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQiLCJvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCIsImlzQSIsIm9TZW1hbnRpY0F0dHJpYnV0ZXMiLCJnZXRPYmplY3QiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJmaW5hbFNlbWFudGljQXR0cmlidXRlcyIsInByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib05hdkNvbnRleHQiLCJwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbiIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwdXNoIiwic2VtYW50aWNBdHRyaWJ1dGVzIiwiZGF0YSIsIm1ldGFQYXRoIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJvTW9kZWwiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRVcmwiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwidW5kZWZpbmVkIiwic2V0RmlsdGVyQ29udGV4dFVybCIsIl9hcHBseU91dGJvdW5kUGFyYW1zIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiYWRhcHROYXZpZ2F0aW9uQ29udGV4dCIsIl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJfcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyIsInNOYXZNb2RlIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwibVJlZnJlc2hTdHJhdGVnaWVzIiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJvSW50ZXJuYWxNb2RlbCIsImdldFZpZXdEYXRhIiwicmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlIiwibVZpZXdSZWZyZXNoU3RyYXRlZ2llcyIsIm1lcmdlT2JqZWN0cyIsIm1SZWZyZXNoU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQiLCJzZXRQcm9wZXJ0eSIsIm5hdk1vZGUiLCJvbkVycm9yIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiTWVzc2FnZUJveENsYXNzIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZXJyb3IiLCJnZXRUZXh0IiwidGl0bGUiLCJFcnJvciIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib01ldGFNb2RlbCIsImNvbnZlcnRlclR5cGUiLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJiaW5kIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJOYXZpZ2F0aW9uVHlwZSIsIkZvcndhcmROYXZpZ2F0aW9uIiwib0Rpc3RpbmN0S2V5cyIsInNDb250ZXh0UGF0aCIsImFNZXRhUGF0aFBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdCIsIkxvb2tVcE9iamVjdCIsInNMb29rVXBPYmplY3RNZXRhUGF0aCIsInNLZXkiLCJvTmV3TG9va1VwT2JqZWN0Iiwic01haW5FbnRpdHlTZXROYW1lIiwic01haW5FbnRpdHlUeXBlTmFtZSIsIm9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0Iiwic01haW5FbnRpdHlWYWx1ZVBhdGgiLCJzQ3VycmVudFZhbHVlUGF0aCIsInNMYXN0VmFsdWVQYXRoIiwic0Rpc3RpbmN0S2V5IiwiYUNvbmZsaWN0aW5nUGF0aHMiLCJzV2lubmVyVmFsdWVQYXRoIiwiaSIsInNQYXRoIiwic1BhdGhJbkNvbnRleHQiLCJyZXBsYWNlIiwic0VudGl0eVR5cGVOYW1lIiwic1ZhbHVlIiwiam9pbiIsImdldFByb3BlcnR5Iiwic1Byb3BlcnR5IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNob3VsZENvbnRpbnVlIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0IiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2ciLCJOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsImVudGl0eVR5cGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImFwcGxpY2FibGVDb250ZXh0cyIsIm9wZW4iLCJyZW1vdmVTZWxlY3RPcHRpb24iLCJvQXR0cmlidXRlcyIsInRyYW5zQWdncmVnYXRpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsIl9nZXRBZ2dyZWdhdGVzIiwiZ2V0RGlhZ25vc3RpY3MiLCJhUHJvcGVydGllcyIsIk9iamVjdCIsImtleXMiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJfZGVsZXRlQWdncmVnYXRlcyIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwiX2dldFByb3BlcnR5QW5ub3RhdGlvbnMiLCJQZXJzb25hbERhdGEiLCJJc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwiVUkiLCJFeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0IiwiQW5hbHl0aWNzIiwiTWVhc3VyZSIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsIm9GaWVsZENvbnRyb2wiLCJfaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlIiwiYWdncmVnYXRlcyIsInNQcm9wIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvRnVsbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIm9EaWFnbm9zdGljcyIsImNvbnZlcnRlckNvbnRleHQiLCJfZ2V0Q29udmVydGVyQ29udGV4dCIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsIm1hcCIsInRyYW5zQWdnIiwiTmFtZSIsIlZhbHVlIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGUiLCJxdWFsaWZpZXIiLCJvVmlld0RhdGEiLCJjb250ZXh0UGF0aCIsImZ1bGxDb250ZXh0UGF0aCIsIkNvbW1vblV0aWxzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgiLCJzRmllbGRDb250cm9sUGF0aCIsIm9BdHRyaWJ1dGUiLCJiSW5hcHBsaWNhYmxlIiwiYVBhcnRzIiwiaGFzT3duUHJvcGVydHkiLCJ2TWFwcGluZ3MiLCJvTWFwcGluZ3MiLCJKU09OIiwicGFyc2UiLCJpdGVtIiwic0xvY2FsUHJvcGVydHkiLCJzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIm9TZWxlY3RPcHRpb24iLCJnZXRTZWxlY3RPcHRpb24iLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwic3RvcmVGb2N1c0luZm9Jbkhpc3RvcnkiLCJmb2N1c0luZm8iLCJmb2N1c0NvbnRyb2wiLCJFbGVtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImZvY3VzQ29udHJvbElkIiwiZ2V0SWQiLCJmb2N1c01EQ1RhYmxlIiwiRlBNSGVscGVyIiwiZ2V0TWRjVGFibGUiLCJ0eXBlIiwiY29udHJvbElkIiwidGFibGVJZCIsImNvbnRleHRQYXRoRm9jdXMiLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwiYXNzaWduIiwic3RhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwic091dGJvdW5kIiwiYU5hdlBhcmFtcyIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm9PdXRib3VuZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIkxvZyIsIm91dGJvdW5kUGFyYW1zIiwicGFyYW1ldGVycyIsImdldE91dGJvdW5kUGFyYW1zIiwia2V5Iiwib1BhcmFtcyIsIm5hdlBhcmFtZXRlclZhbHVlIiwiYVBhcmFtZXRlcnMiLCJhU2VsZWN0UHJvcGVydGllcyIsImdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiYWRkU2VsZWN0T3B0aW9uIiwib091dGJvdW5kUGFyYW1zIiwib1BhcmFtc01hcHBpbmciLCJvTWFwcGluZyIsInZhbHVlIiwiZm9ybWF0Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvT3V0Ym91bmRzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvRGlzcGxheU91dGJvdW5kIiwib1JlZnJlc2hTdHJhdGVnaWVzIiwiaW50ZW50cyIsIm9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5IiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwiUmVmcmVzaFN0cmF0ZWd5VHlwZSIsIlNlbGYiLCJfZmVEZWZhdWx0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb250ZXh0IiwicGF0aHNUb1JldGFpbiIsImJLZWVwTmF2UHJvcGVydGllcyIsImtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24iLCJnZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYW5pZmVzdCIsImFwcCIsImNvbnNpZGVyTmF2aWdhdGlvblByb3BlcnRpZXNGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJyZXQiLCJuYXZQcm9wZXJ0aWVzIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZSIsIm5hdlByb3AiLCJuYXZQcm9wTmFtZSIsIm5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L05vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV4dGVuc2libGUsXG5cdGZpbmFsRXh0ZW5zaW9uLFxuXHRtZXRob2RPdmVycmlkZSxcblx0cHJpdmF0ZUV4dGVuc2lvbixcblx0cHVibGljRXh0ZW5zaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlZnJlc2hTdHJhdGVnaWVzLCBTT1JlZnJlc2hTdHJhdGVneSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZVJlZnJlc2hUeXBlc1wiO1xuaW1wb3J0IHsgUmVmcmVzaFN0cmF0ZWd5VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZVJlZnJlc2hUeXBlc1wiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5UGFyYW1ldGVyIH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbi8qKlxuICogTmF2aWdhdGlvbiBQYXJhbWV0ZXJzIHVzZWQgZHVyaW5nIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKi9cblx0bmF2aWdhdGlvbkNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBTZW1hbnRpY09iamVjdE1hcHBpbmcgb3IgU2VtYW50aWNPYmplY3RNYXBwaW5nIHRoYXQgYXBwbGllcyB0byB0aGlzIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdGRlZmF1bHRSZWZyZXNoU3RyYXRlZ3k/OiBvYmplY3Q7XG5cdHJlZnJlc2hTdHJhdGVnaWVzPzogUmVmcmVzaFN0cmF0ZWdpZXM7XG5cdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50IGFuZCBmb3Igd2hpY2ggdGhlIElCTiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0YXBwbGljYWJsZUNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFNpbmdsZSBpbnN0YW5jZSBvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSwgb3IgYWx0ZXJuYXRpdmVseSBhbiBvYmplY3Qgb3IgYXJyYXkgb2Ygb2JqZWN0cywgd2hpY2ggY2Fubm90IGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKiBcdGlmIGFuIGFycmF5IG9mIGNvbnRleHRzIGlzIHBhc3NlZCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YSBwYXRoIGFuZCBhY2NvcmRpbmdseSByZW1vdmUgdGhlIHNlbnNpdGl2ZSBkYXRhXG5cdCAqIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgZm9sbG93aW5nIGZvcm1hdCBpcyBleHBlY3RlZDpcblx0ICoge1xuXHQgKiBcdGRhdGE6IHtcblx0ICogXHRcdFByb2R1Y3RJRDogNzYzNCxcblx0ICogXHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKiBcdH0sXG5cdCAqIFx0bWV0YVBhdGg6IFwiL1NhbGVzT3JkZXJNYW5hZ2VcIlxuXHQgKiB9XG5cdCAqIFRoZSBtZXRhUGF0aCBpcyB1c2VkIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEuXG5cdCAqL1xuXHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdGxhYmVsPzogc3RyaW5nO1xuXHRuYXZNb2RlPzogc3RyaW5nO1xufTtcbi8qKlxuICoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uIENvbnRyb2xsZXIgZXh0ZW5zaW9ufVxuICpcbiAqIEBzaW5jZSAxLjg0LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxJbnRlcm5hbEJhc2VkTmF2aWdhdGlvblwiKVxuY2xhc3MgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIF9vTmF2aWdhdGlvblNlcnZpY2UhOiBOYXZpZ2F0aW9uU2VydmljZTtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKTtcblx0XHR0aGlzLl9vTWV0YU1vZGVsID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHR0aGlzLl9vVmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlcyBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvbiAoU2VtYW50aWNPYmplY3QtQWN0aW9uKSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIHNlbGVjdGlvbiB2YXJpYW50IGFmdGVyIHRoZSBhZGFwdGF0aW9uIGJ5IGEgY29uc3VtZXIuXG5cdCAqIFRoaXMgdGFrZXMgY2FyZSBvZiByZW1vdmluZyBhbnkgdGVjaG5pY2FsIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMgaWYgYW4gZXhwbGFjZSBvciBpbnBsYWNlIG5hdmlnYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBhY3Rpb24gIEFjdGlvbiBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVyc10gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGV4dGVybmFsIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHNdIFVzZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnQ6XG5cdCAqICAgIGEgc2luZ2xlIGluc3RhbmNlIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH1cblx0ICogICAgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH1cblx0ICogICAgYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9mIG9iamVjdHNcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1ldGFQYXRoIGFuZCB0byByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhXG5cdCAqXHRcdCAgSWYgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyBwYXNzZWQsIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGl4IGV4cGVjdGVkOlxuXHQgKlx0XHQgIHtcblx0ICpcdFx0XHRkYXRhOiB7XG5cdCAqXHQgXHRcdFx0UHJvZHVjdElEOiA3NjM0LFxuXHQgKlx0XHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKlx0XHRcdCB9LFxuXHQgKlx0XHRcdCBtZXRhUGF0aDogXCIvU2FsZXNPcmRlck1hbmFnZVwiXG5cdCAqICAgICAgICB9XG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nXSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFNlbWFudGljT2JqZWN0TWFwcGluZyBvciBTZW1hbnRpY09iamVjdE1hcHBpbmcgdGhhdCBhcHBsaWVzIHRvIHRoaXMgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzLmRlZmF1bHRSZWZyZXNoU3RyYXRlZ3ldIERlZmF1bHQgcmVmcmVzaCBzdHJhdGVneSB0byBiZSB1c2VkIGluIGNhc2Ugbm8gcmVmcmVzaCBzdHJhdGVneSBpcyBzcGVjaWZpZWQgZm9yIHRoZSBpbnRlbnQgaW4gdGhlIHZpZXcuXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMucmVmcmVzaFN0cmF0ZWdpZXNdXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXSBBZGRpdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycyBjb25maWd1cmVkIGluIHRoZSBjcm9zc0FwcE5hdmlnYXRpb24gb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZShzZW1hbnRpY09iamVjdDogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbmF2aWdhdGlvblBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHZvaWQge1xuXHRcdGNvbnN0IF9kb05hdmlnYXRlID0gKG9Db250ZXh0PzogQ29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgdk5hdmlnYXRpb25Db250ZXh0czogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXSB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cztcblx0XHRcdGNvbnN0IGFOYXZpZ2F0aW9uQ29udGV4dHM6IHVuZGVmaW5lZCB8IChPRGF0YVY0Q29udGV4dCB8IG9iamVjdClbXSA9XG5cdFx0XHRcdHZOYXZpZ2F0aW9uQ29udGV4dHMgJiYgIUFycmF5LmlzQXJyYXkodk5hdmlnYXRpb25Db250ZXh0cykgPyBbdk5hdmlnYXRpb25Db250ZXh0c10gOiB2TmF2aWdhdGlvbkNvbnRleHRzO1xuXHRcdFx0Y29uc3QgdlNlbWFudGljT2JqZWN0TWFwcGluZyA9IG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0dk91dGJvdW5kUGFyYW1zID0gbmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbmF2aWdhdGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRvVGFyZ2V0SW5mbzogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nOyBhY3Rpb246IHN0cmluZzsgcHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSA9IHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0YWN0aW9uOiBhY3Rpb25cblx0XHRcdFx0fSxcblx0XHRcdFx0b1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblxuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHRoaXMuX29WaWV3LnNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbWFudGljT2JqZWN0ICYmIGFjdGlvbikge1xuXHRcdFx0XHRsZXQgYVNlbWFudGljQXR0cmlidXRlczogdW5rbm93bltdID0gW10sXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0XHQvLyAxLiBnZXQgU2VtYW50aWNBdHRyaWJ1dGVzIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdGlmIChhTmF2aWdhdGlvbkNvbnRleHRzICYmIGFOYXZpZ2F0aW9uQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YU5hdmlnYXRpb25Db250ZXh0cy5mb3JFYWNoKChvTmF2aWdhdGlvbkNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdC8vIDEuMS5hIGlmIG5hdmlnYXRpb24gY29udGV4dCBpcyBpbnN0YW5jZSBvZiBzYXAudWkubW9kZS5vZGF0YS52NC5Db250ZXh0XG5cdFx0XHRcdFx0XHQvLyBlbHNlIGNoZWNrIGlmIG5hdmlnYXRpb24gY29udGV4dCBpcyBvZiB0eXBlIG9iamVjdFxuXHRcdFx0XHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0ID0gb05hdmlnYXRpb25Db250ZXh0IGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXNcblx0XHRcdFx0XHRcdFx0fCB7IGRhdGE6IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBtZXRhUGF0aDogc3RyaW5nIH1cblx0XHRcdFx0XHRcdFx0fCB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LmlzQSAmJlxuXHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuaXNBPE9EYXRhVjRDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gMS4xLmIgcmVtb3ZlIHNlbnNpdGl2ZSBkYXRhXG5cdFx0XHRcdFx0XHRcdGxldCBvU2VtYW50aWNBdHRyaWJ1dGVzID0gb05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSB0aGlzLl9vTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBhbHNvIHJlbW92ZSBzZW5zaXRpdmUgZGF0YSBmcm9tICBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0Y29uc3QgZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMgPSB0aGlzLnByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMoXG5cdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShmaW5hbFNlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb05hdkNvbnRleHQgPSB0aGlzLnByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGZpbmFsU2VtYW50aWNBdHRyaWJ1dGVzLFxuXHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0SW5mb1tcInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3RcIl0gPSBvTmF2Q29udGV4dC5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2gob05hdkNvbnRleHQuc2VtYW50aWNBdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdCEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIG9OYXZpZ2F0aW9uQ29udGV4dCA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YSBmcm9tIG9iamVjdFxuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEsIG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0Lm1ldGFQYXRoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCAmJiBBcnJheS5pc0FycmF5KG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIG9OYXZpZ2F0aW9uQ29udGV4dC5kYXRhIGNhbiBiZSBhcnJheSBhbHJlYWR5IGV4IDogW3tDdXN0b21lcjogXCIxMDAwMVwifSwge0N1c3RvbWVyOiBcIjEwMDkxXCJ9XVxuXHRcdFx0XHRcdFx0XHQvLyBoZW5jZSBhc3NpZ25pbmcgaXQgdG8gdGhlIGFTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhLFxuXHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0Lm1ldGFQYXRoXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gMi4xIE1lcmdlIGJhc2Ugc2VsZWN0aW9uIHZhcmlhbnQgYW5kIHNhbml0aXplZCBzZW1hbnRpYyBhdHRyaWJ1dGVzIGludG8gb25lIFNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0aWYgKGFTZW1hbnRpY0F0dHJpYnV0ZXMgJiYgYVNlbWFudGljQXR0cmlidXRlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyAzLiBBZGQgZmlsdGVyQ29udGV4dFVybCB0byBTViBzbyB0aGUgTmF2aWdhdGlvbkhhbmRsZXIgY2FuIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEgYmFzZWQgb24gdmlldyBlbnRpdHlTZXRcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRzRW50aXR5U2V0ID0gdGhpcy5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdFx0XHRzQ29udGV4dFVybCA9IHNFbnRpdHlTZXQgPyB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UuY29uc3RydWN0Q29udGV4dFVybChzRW50aXR5U2V0LCBvTW9kZWwpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoc0NvbnRleHRVcmwpIHtcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5zZXRGaWx0ZXJDb250ZXh0VXJsKHNDb250ZXh0VXJsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IE91dGJvdW5kIFBhcmFtZXRlcnMgdG8gdGhlIFNWXG5cdFx0XHRcdGlmICh2T3V0Ym91bmRQYXJhbXMpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gNC4gZ2l2ZSBhbiBvcHBvcnR1bml0eSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGluZmx1ZW5jZSB0aGUgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHRvQ29udHJvbGxlci5pbnRlbnRCYXNlZE5hdmlnYXRpb24uYWRhcHROYXZpZ2F0aW9uQ29udGV4dChvU2VsZWN0aW9uVmFyaWFudCwgb1RhcmdldEluZm8pO1xuXG5cdFx0XHRcdC8vIDUuIEFwcGx5IHNlbWFudGljIG9iamVjdCBtYXBwaW5ncyB0byB0aGUgU1Zcblx0XHRcdFx0aWYgKHZTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQsIHZTZW1hbnRpY09iamVjdE1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gNi4gcmVtb3ZlIHRlY2huaWNhbCBwYXJhbWV0ZXJzIGZyb20gU2VsZWN0aW9uIFZhcmlhbnRcblx0XHRcdFx0dGhpcy5fcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyhvU2VsZWN0aW9uVmFyaWFudCk7XG5cblx0XHRcdFx0Ly8gNy4gY2hlY2sgaWYgcHJvZ3JhbW1pbmcgbW9kZWwgaXMgc3RpY2t5IGFuZCBwYWdlIGlzIGVkaXRhYmxlXG5cdFx0XHRcdGxldCBzTmF2TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXROYXZpZ2F0aW9uTW9kZSgpO1xuXG5cdFx0XHRcdC8vIDguIFVwZGF0aW5nIHJlZnJlc2ggc3RyYXRlZ3kgaW4gaW50ZXJuYWwgbW9kZWxcblx0XHRcdFx0Y29uc3QgbVJlZnJlc2hTdHJhdGVnaWVzID0gKG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLnJlZnJlc2hTdHJhdGVnaWVzKSB8fCB7fSxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbCA9IG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0XHRcdGlmICgob1ZpZXcgJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKSkucmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtVmlld1JlZnJlc2hTdHJhdGVnaWVzID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKS5yZWZyZXNoU3RyYXRlZ3lPbkFwcFJlc3RvcmUgfHwge307XG5cdFx0XHRcdFx0XHRtZXJnZU9iamVjdHMobVJlZnJlc2hTdHJhdGVnaWVzLCBtVmlld1JlZnJlc2hTdHJhdGVnaWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbVJlZnJlc2hTdHJhdGVneSA9IEtlZXBBbGl2ZUhlbHBlci5nZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQobVJlZnJlc2hTdHJhdGVnaWVzLCBzZW1hbnRpY09iamVjdCwgYWN0aW9uKTtcblx0XHRcdFx0XHRpZiAobVJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlXCIsIG1SZWZyZXNoU3RyYXRlZ3kpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDkuIENoZWNrIGlmIG5hdk1vZGUgcGFyYW1ldGVyIGlzIHNldCBhbmQgdXNlIGl0XG5cdFx0XHRcdHNOYXZNb2RlID0gbmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgPyBuYXZpZ2F0aW9uUGFyYW1ldGVycz8ubmF2TW9kZSA6IHNOYXZNb2RlO1xuXG5cdFx0XHRcdC8vIDEwLiBOYXZpZ2F0ZSB2aWEgTmF2aWdhdGlvbkhhbmRsZXJcblx0XHRcdFx0Y29uc3Qgb25FcnJvciA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9NZXNzYWdlQm94XCJdLCBmdW5jdGlvbiAoTWVzc2FnZUJveENsYXNzOiB0eXBlb2YgTWVzc2FnZUJveCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3hDbGFzcy5lcnJvcihvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0hFTFBFUl9OQVZJR0FUSU9OX0VSUk9SX01FU1NBR0VcIiksIHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIilcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UubmF2aWdhdGUoXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvbkVycm9yLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTmF2TW9kZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2VtYW50aWMgT2JqZWN0L2FjdGlvbiBpcyBub3QgcHJvdmlkZWRcIik7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgJiZcblx0XHRcdG9NZXRhTW9kZWwgJiZcblx0XHRcdCFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCkgJiZcblx0XHRcdCEobmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgPT09IFwiZXhwbGFjZVwiKVxuXHRcdCkge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdF9kb05hdmlnYXRlLmJpbmQodGhpcyksXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9kb05hdmlnYXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByZXBhcmUgYXR0cmlidXRlcyB0byBiZSBwYXNzZWQgdG8gZXh0ZXJuYWwgbmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9TZW1hbnRpY0F0dHJpYnV0ZXMgQ29udGV4dCBkYXRhIGFmdGVyIHJlbW92aW5nIGFsbCBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBBY3R1YWwgY29udGV4dCBmcm9tIHdoaWNoIHRoZSBzZW1hbnRpY0F0dHJpYnV0ZXMgd2VyZSBkZXJpdmVkLlxuXHQgKiBAcmV0dXJucyBPYmplY3Qgb2YgcHJlcGFyZWQgYXR0cmlidXRlcyBmb3IgZXh0ZXJuYWwgbmF2aWdhdGlvbiBhbmQgbm8gY29uZmxpY3QgcHJvcGVydGllcy5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvQ29udGV4dDogQ29udGV4dFxuXHQpOiB7IHNlbWFudGljQXR0cmlidXRlczogdW5rbm93bjsgcHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9IHtcblx0XHQvLyAxLiBGaW5kIGFsbCBkaXN0aW5jdCBrZXlzIGluIHRoZSBvYmplY3QgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0Ly8gU3RvcmUgbWV0YSBwYXRoIGZvciBlYWNoIG9jY3VyZW5jZSBvZiB0aGUga2V5XG5cdFx0Y29uc3Qgb0Rpc3RpbmN0S2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge30sXG5cdFx0XHRzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc0NvbnRleHRQYXRoKSxcblx0XHRcdGFNZXRhUGF0aFBhcnRzID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cblx0XHRmdW5jdGlvbiBfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KExvb2tVcE9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNMb29rVXBPYmplY3RNZXRhUGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gTG9va1VwT2JqZWN0KSB7XG5cdFx0XHRcdC8vIG51bGwgY2FzZT8/XG5cdFx0XHRcdGlmIChMb29rVXBPYmplY3Rbc0tleV0gPT09IG51bGwgfHwgdHlwZW9mIExvb2tVcE9iamVjdFtzS2V5XSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGlmICghb0Rpc3RpbmN0S2V5c1tzS2V5XSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYga2V5IGlzIGZvdW5kIGZvciB0aGUgZmlyc3QgdGltZSB0aGVuIGNyZWF0ZSBhcnJheVxuXHRcdFx0XHRcdFx0b0Rpc3RpbmN0S2V5c1tzS2V5XSA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBwdXNoIHBhdGggdG8gYXJyYXlcblx0XHRcdFx0XHRvRGlzdGluY3RLZXlzW3NLZXldLnB1c2goc0xvb2tVcE9iamVjdE1ldGFQYXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiBhIG5lc3RlZCBvYmplY3QgaXMgZm91bmRcblx0XHRcdFx0XHRjb25zdCBvTmV3TG9va1VwT2JqZWN0ID0gTG9va1VwT2JqZWN0W3NLZXldO1xuXHRcdFx0XHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qob05ld0xvb2tVcE9iamVjdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c0xvb2tVcE9iamVjdE1ldGFQYXRofS8ke3NLZXl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KG9TZW1hbnRpY0F0dHJpYnV0ZXMsIHNNZXRhUGF0aCk7XG5cblx0XHQvLyAyLiBEZXRlcm1pbmUgZGlzdGluY3Qga2V5IHZhbHVlIGFuZCBhZGQgY29uZmxpY3RlZCBwYXRocyB0byBzZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdFx0Y29uc3Qgc01haW5FbnRpdHlTZXROYW1lID0gYU1ldGFQYXRoUGFydHNbMF0sXG5cdFx0XHRzTWFpbkVudGl0eVR5cGVOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NNYWluRW50aXR5U2V0TmFtZX0vQHNhcHVpLm5hbWVgKSxcblx0XHRcdG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0bGV0IHNNYWluRW50aXR5VmFsdWVQYXRoLCBzQ3VycmVudFZhbHVlUGF0aCwgc0xhc3RWYWx1ZVBhdGg7XG5cdFx0Zm9yIChjb25zdCBzRGlzdGluY3RLZXkgaW4gb0Rpc3RpbmN0S2V5cykge1xuXHRcdFx0Y29uc3QgYUNvbmZsaWN0aW5nUGF0aHMgPSBvRGlzdGluY3RLZXlzW3NEaXN0aW5jdEtleV07XG5cdFx0XHRsZXQgc1dpbm5lclZhbHVlUGF0aDtcblx0XHRcdC8vIEZpbmQgd2lubmVyIHZhbHVlIGZvciBlYWNoIGRpc3RpbmN0IGtleSBpbiBjYXNlIG9mIGNvbmZsaWN0IGJ5IHRoZSBmb2xsb3dpbmcgcnVsZTpcblxuXHRcdFx0Ly8gLT4gQS4gaWYgYW55IG1ldGEgcGF0aCBmb3IgYSBkaXN0aW5jdCBrZXkgaXMgdGhlIHNhbWUgYXMgbWFpbiBlbnRpdHkgdGFrZSB0aGF0IGFzIHRoZSB2YWx1ZVxuXHRcdFx0Ly8gLT4gQi4gaWYgQSBpcyBub3QgbWV0IGtlZXAgdGhlIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoc01ldGFQYXRoID09PSBwYXRoIG9mIGRpc3RpbmNlIGtleSlcblx0XHRcdC8vIC0+IEMuIGlmIEEsIEIgb3IgQyBhcmUgbm90IG1ldCB0YWtlIHRoZSBsYXN0IHBhdGggZm9yIHZhbHVlXG5cdFx0XHRpZiAoYUNvbmZsaWN0aW5nUGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBjb25mbGljdFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzW2ldO1xuXHRcdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdFx0c1BhdGhJbkNvbnRleHQgPSAoc1BhdGhJbkNvbnRleHQgPT09IFwiXCIgPyBzUGF0aEluQ29udGV4dCA6IGAke3NQYXRoSW5Db250ZXh0fS9gKSArIHNEaXN0aW5jdEtleTtcblx0XHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH0vQHNhcHVpLm5hbWVgKTtcblx0XHRcdFx0XHQvLyBydWxlIEFcblxuXHRcdFx0XHRcdC8vIHJ1bGUgQVxuXHRcdFx0XHRcdGlmIChzRW50aXR5VHlwZU5hbWUgPT09IHNNYWluRW50aXR5VHlwZU5hbWUpIHtcblx0XHRcdFx0XHRcdHNNYWluRW50aXR5VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBCXG5cdFx0XHRcdFx0aWYgKHNQYXRoID09PSBzTWV0YVBhdGgpIHtcblx0XHRcdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBDXG5cdFx0XHRcdFx0c0xhc3RWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblxuXHRcdFx0XHRcdC8vIGFkZCBjb25mbGljdGVkIHBhdGggdG8gc2VtYW50aWMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhdGggcG9pbnRzIHRvIG1haW4gZW50aXR5IGFuZCBwcmVmaXggYXR0cmlidXRlIG5hbWVzIGFjY29yZGluZ2x5XG5cdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlc1tcblx0XHRcdFx0XHRcdGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLlwiKVxuXHRcdFx0XHRcdF0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aEluQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQSB8fCBCIHx8IENcblx0XHRcdFx0c1dpbm5lclZhbHVlUGF0aCA9IHNNYWluRW50aXR5VmFsdWVQYXRoIHx8IHNDdXJyZW50VmFsdWVQYXRoIHx8IHNMYXN0VmFsdWVQYXRoO1xuXHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW3NEaXN0aW5jdEtleV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzV2lubmVyVmFsdWVQYXRoIGFzIHN0cmluZyk7XG5cdFx0XHRcdHNNYWluRW50aXR5VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRzQ3VycmVudFZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0c0xhc3RWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBubyBjb25mbGljdCwgYWRkIGRpc3RpbmN0IGtleSB3aXRob3V0IGFkZGluZyBwYXRoc1xuXHRcdFx0XHRjb25zdCBzUGF0aCA9IGFDb25mbGljdGluZ1BhdGhzWzBdOyAvLyBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgb25lIGFuZCBoZW5jZSBubyBjb25mbGljdFxuXHRcdFx0XHRsZXQgc1BhdGhJbkNvbnRleHQgPSBzUGF0aC5yZXBsYWNlKHNQYXRoID09PSBzTWV0YVBhdGggPyBzTWV0YVBhdGggOiBgJHtzTWV0YVBhdGh9L2AsIFwiXCIpO1xuXHRcdFx0XHRzUGF0aEluQ29udGV4dCA9IChzUGF0aEluQ29udGV4dCA9PT0gXCJcIiA/IHNQYXRoSW5Db250ZXh0IDogYCR7c1BhdGhJbkNvbnRleHR9L2ApICsgc0Rpc3RpbmN0S2V5O1xuXHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW3NEaXN0aW5jdEtleV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aEluQ29udGV4dCk7XG5cdFx0XHRcdG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NEaXN0aW5jdEtleV0gPSBgJHtzTWV0YVBhdGh9LyR7c1BhdGhJbkNvbnRleHR9YFxuXHRcdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNWYWx1ZSAhPSBcIlwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIuXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyAzLiBSZW1vdmUgYWxsIE5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdGZvciAoY29uc3Qgc1Byb3BlcnR5IGluIG9TZW1hbnRpY0F0dHJpYnV0ZXMpIHtcblx0XHRcdGlmIChvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV0gIT09IG51bGwgJiYgdHlwZW9mIG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRkZWxldGUgb1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VtYW50aWNBdHRyaWJ1dGVzOiBvU2VtYW50aWNBdHRyaWJ1dGVzLFxuXHRcdFx0cHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogb1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBOYXZpZ2F0aW9uIG1vZGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIG1vZGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRnZXROYXZpZ2F0aW9uTW9kZSgpOiB1bmRlZmluZWQge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIGZvciBuYXZpZ2F0aW9uIHRvIGEgZ2l2ZW4gaW50ZW50IChTZW1hbnRpY09iamVjdC1BY3Rpb24pIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQsIHVzaW5nIGEgZGlhbG9nIHRoYXQgc2hvd3MgdGhlIGNvbnRleHRzIHdoaWNoIGNhbm5vdCBiZSBwYXNzZWRcblx0ICogSWYgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgcHJvdmlkZWQsIHRoaXMgc2V0dGluZyBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIHNlbGVjdGlvbiB2YXJpYW50IGFmdGVyIGFkYXB0YXRpb24gYnkgYSBjb25zdW1lci5cblx0ICogVGhpcyBzZXR0aW5nIGFsc28gcmVtb3ZlcyBhbnkgdGVjaG5pY2FsIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMgaWYgYW4gaW5wbGFjZSBvciBleHBsYWNlIG5hdmlnYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0IGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gc0FjdGlvbiAgQWN0aW9uIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gW21OYXZpZ2F0aW9uUGFyYW1ldGVyc10gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGV4dGVybmFsIG5hdmlnYXRpb25cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBuYXZpZ2F0ZVdpdGhDb25maXJtYXRpb25EaWFsb2coXG5cdFx0c1NlbWFudGljT2JqZWN0OiBzdHJpbmcsXG5cdFx0c0FjdGlvbjogc3RyaW5nLFxuXHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBzaG91bGRDb250aW51ZSA9IHRydWU7XG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycz8ubm90QXBwbGljYWJsZUNvbnRleHRzICYmIG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHM/Lmxlbmd0aCA+PSAxKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXRQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxFbnRpdHlTZXQ+KGVudGl0eVNldFBhdGgpLnRhcmdldCE7XG5cdFx0XHQvLyBTaG93IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSBhbmQgd2lsbCBub3QgdGhlcmVmb3JlIGJlIHByb2Nlc3NlZFxuXHRcdFx0Y29uc3Qgbm90QXBwbGljYWJsZUNvbnRleHRzRGlhbG9nID0gbmV3IE5vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nKHtcblx0XHRcdFx0dGl0bGU6IFwiXCIsXG5cdFx0XHRcdGVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMuZ2V0VmlldygpKSxcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzOiBtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzXG5cdFx0XHR9KTtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMuYXBwbGljYWJsZUNvbnRleHRzO1xuXHRcdFx0c2hvdWxkQ29udGludWUgPSBhd2FpdCBub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2cub3Blbih0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdGlmIChzaG91bGRDb250aW51ZSkge1xuXHRcdFx0dGhpcy5uYXZpZ2F0ZShzU2VtYW50aWNPYmplY3QsIHNBY3Rpb24sIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0X3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQpOiB2b2lkIHtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJAb2RhdGEuY29udGV4dFwiKTtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJAb2RhdGEubWV0YWRhdGFFdGFnXCIpO1xuXHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIlNBUF9fTWVzc2FnZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldGVkIEVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEVudGl0eSBzZXQgbmFtZVxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRnZXRFbnRpdHlTZXQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXQhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgc2Vuc2l0aXZlIGRhdGEgZnJvbSB0aGUgc2VtYW50aWMgYXR0cmlidXRlIHdpdGggcmVzcGVjdCB0byB0aGUgZW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXMgQ29udGV4dCBkYXRhXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGggTWV0YSBwYXRoIHRvIHJlYWNoIHRoZSBlbnRpdHlTZXQgaW4gdGhlIE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBzZW1hbnRpYyBBdHRyaWJ1dGVzXG5cdCAqL1xuXHQvLyBUTy1ETyBhZGQgdW5pdCB0ZXN0cyBmb3IgdGhpcyBmdW5jdGlvbiBpbiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gcXVuaXQuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXT4ob0F0dHJpYnV0ZXM6IFQsIHNNZXRhUGF0aDogc3RyaW5nKTogVCB7XG5cdFx0aWYgKG9BdHRyaWJ1dGVzKSB7XG5cdFx0XHRjb25zdCB7IHRyYW5zQWdncmVnYXRpb25zLCBjdXN0b21BZ2dyZWdhdGVzIH0gPSB0aGlzLl9nZXRBZ2dyZWdhdGVzKFxuXHRcdFx0XHRzTWV0YVBhdGgsXG5cdFx0XHRcdHRoaXMuYmFzZS5nZXRWaWV3KCksXG5cdFx0XHRcdHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXREaWFnbm9zdGljcygpXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgYVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvQXR0cmlidXRlcyk7XG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkob0F0dHJpYnV0ZXMpICYmIGFQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbXCJAb2RhdGEuY29udGV4dFwiXTtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiXTtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiU0FQX19NZXNzYWdlc1wiXTtcblx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFQcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdFx0aWYgKG9BdHRyaWJ1dGVzW2VsZW1lbnRdICYmIHR5cGVvZiBvQXR0cmlidXRlc1tlbGVtZW50XSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKG9BdHRyaWJ1dGVzW2VsZW1lbnRdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBgJHtzTWV0YVBhdGh9LyR7ZWxlbWVudH1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuaW5jbHVkZXMoXCJAb2RhdGEudHlwZVwiKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW2VsZW1lbnRdO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2RlbGV0ZUFnZ3JlZ2F0ZXMoWy4uLnRyYW5zQWdncmVnYXRpb25zLCAuLi5jdXN0b21BZ2dyZWdhdGVzXSwgZWxlbWVudCwgb0F0dHJpYnV0ZXMpO1xuXHRcdFx0XHRcdGNvbnN0IGFQcm9wZXJ0eUFubm90YXRpb25zID0gdGhpcy5fZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhlbGVtZW50LCBzTWV0YVBhdGgsIG9BdHRyaWJ1dGVzLCB0aGlzLl9vTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMuUGVyc29uYWxEYXRhPy5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlIHx8XG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLlVJPy5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0IHx8XG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLkFuYWx5dGljcz8uTWVhc3VyZVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMuQ29tbW9uPy5GaWVsZENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udHJvbCA9IGFQcm9wZXJ0eUFubm90YXRpb25zLkNvbW1vbi5GaWVsZENvbnRyb2wgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0JFBhdGg/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJiB0aGlzLl9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdLCBvQXR0cmlidXRlcykpXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0F0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSBuYXZpZ2F0aW9uIGRhdGEgaWYgaXQgaXMgYSBtZWFzdXJlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYWdncmVnYXRlcyBBcnJheSBvZiBBZ2dyZWdhdGVzXG5cdCAqIEBwYXJhbSBzUHJvcCBBdHRyaWJ1dGUgbmFtZVxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXMgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdCAqL1xuXHRfZGVsZXRlQWdncmVnYXRlcyhhZ2dyZWdhdGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgc1Byb3A6IHN0cmluZywgb0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXMgJiYgYWdncmVnYXRlcy5pbmNsdWRlcyhzUHJvcCkpIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tzUHJvcF07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByb3BlcnR5IGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1Byb3Bcblx0ICogQHBhcmFtIHNNZXRhUGF0aFxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWxcblx0ICogQHJldHVybnMgLSBUaGUgcHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICovXG5cdF9nZXRQcm9wZXJ0eUFubm90YXRpb25zKFxuXHRcdHNQcm9wOiBzdHJpbmcsXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0b0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob0F0dHJpYnV0ZXNbc1Byb3BdICYmIHNNZXRhUGF0aCAmJiAhc01ldGFQYXRoLmluY2x1ZGVzKFwidW5kZWZpbmVkXCIpKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NQcm9wfWApIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb0Z1bGxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvQ29udGV4dCk7XG5cdFx0XHRyZXR1cm4gb0Z1bGxDb250ZXh0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zIGFzIFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGFnZ3JlZ2F0ZXMgcGFydCBvZiB0aGUgRW50aXR5U2V0IG9yIEVudGl0eVR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBUaGUgYWdncmVnYXRlc1xuXHQgKi9cblx0X2dldEFnZ3JlZ2F0ZXMoXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzXG5cdCk6IHsgdHJhbnNBZ2dyZWdhdGlvbnM6IHN0cmluZ1tdOyBjdXN0b21BZ2dyZWdhdGVzOiBzdHJpbmdbXSB9IHtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5fZ2V0Q29udmVydGVyQ29udGV4dChzTWV0YVBhdGgsIG9WaWV3LCBvRGlhZ25vc3RpY3MpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRjb25zdCBpc0FuYWx5dGljc1N1cHBvcnRlZCA9IGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCk7XG5cdFx0bGV0IHRyYW5zQWdncmVnYXRpb25zLCBjdXN0b21BZ2dyZWdhdGVzO1xuXHRcdGlmIChpc0FuYWx5dGljc1N1cHBvcnRlZCkge1xuXHRcdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRUcmFuc0FnZ3JlZ2F0aW9ucygpO1xuXHRcdFx0aWYgKHRyYW5zQWdncmVnYXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPSB0cmFuc0FnZ3JlZ2F0aW9ucy5tYXAoKHRyYW5zQWdnOiB7IE5hbWU/OiBzdHJpbmc7IFZhbHVlPzogc3RyaW5nIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdHJhbnNBZ2cuTmFtZSB8fCB0cmFuc0FnZy5WYWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0XHRcdGlmIChjdXN0b21BZ2dyZWdhdGVzPy5sZW5ndGgpIHtcblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlcyA9IGN1c3RvbUFnZ3JlZ2F0ZXMubWFwKChjdXN0b21BZ2dyZWdhdGUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gY3VzdG9tQWdncmVnYXRlLnF1YWxpZmllcjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRyYW5zQWdncmVnYXRpb25zID0gdHJhbnNBZ2dyZWdhdGlvbnMgPyB0cmFuc0FnZ3JlZ2F0aW9ucyA6IFtdO1xuXHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBjdXN0b21BZ2dyZWdhdGVzID8gKGN1c3RvbUFnZ3JlZ2F0ZXMgYXMgc3RyaW5nW10pIDogW107XG5cdFx0cmV0dXJuIHsgdHJhbnNBZ2dyZWdhdGlvbnMsIGN1c3RvbUFnZ3JlZ2F0ZXMgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGNvbnZlcnRlckNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q29udmVydGVyQ29udGV4dChzTWV0YVBhdGg6IHN0cmluZywgb1ZpZXc6IEZFVmlldywgb0RpYWdub3N0aWNzOiBEaWFnbm9zdGljcyk6IENvbnZlcnRlckNvbnRleHQge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IG9WaWV3LmdldFZpZXdEYXRhKCk7XG5cdFx0bGV0IHNFbnRpdHlTZXQgPSBvVmlld0RhdGEuZW50aXR5U2V0O1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9WaWV3RGF0YS5jb250ZXh0UGF0aDtcblx0XHRpZiAoc0NvbnRleHRQYXRoICYmICghc0VudGl0eVNldCB8fCBzRW50aXR5U2V0LmluY2x1ZGVzKFwiL1wiKSkpIHtcblx0XHRcdHNFbnRpdHlTZXQgPSBvVmlld0RhdGE/LmZ1bGxDb250ZXh0UGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0fVxuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aChzTWV0YVBhdGgsIG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIHNFbnRpdHlTZXQhLCBvRGlhZ25vc3RpY3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHBhdGgtYmFzZWQgRmllbGRDb250cm9sIGV2YWx1YXRlcyB0byBpbmFwcGxpY2FibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRmllbGRDb250cm9sUGF0aCBGaWVsZCBjb250cm9sIHBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGUgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpbmFwcGxpY2FibGVcblx0ICovXG5cdF9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUoc0ZpZWxkQ29udHJvbFBhdGg6IHN0cmluZywgb0F0dHJpYnV0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcblx0XHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNGaWVsZENvbnRyb2xQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHQvLyBzZW5zaXRpdmUgZGF0YSBpcyByZW1vdmVkIG9ubHkgaWYgdGhlIHBhdGggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC5cblx0XHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGJJbmFwcGxpY2FibGUgPSAhIShcblx0XHRcdFx0b0F0dHJpYnV0ZVthUGFydHNbMF1dICYmXG5cdFx0XHRcdChvQXR0cmlidXRlW2FQYXJ0c1swXV0gYXMgb2JqZWN0KS5oYXNPd25Qcm9wZXJ0eShhUGFydHNbMV0pICYmXG5cdFx0XHRcdChvQXR0cmlidXRlW2FQYXJ0c1swXV0gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPilbYVBhcnRzWzFdXSA9PT0gMFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YkluYXBwbGljYWJsZSA9IG9BdHRyaWJ1dGVbc0ZpZWxkQ29udHJvbFBhdGhdID09PSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gYkluYXBwbGljYWJsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmVwbGFjZSBMb2NhbCBQcm9wZXJ0aWVzIHdpdGggU2VtYW50aWMgT2JqZWN0IG1hcHBpbmdzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uVmFyaWFudCBjb25zaXN0aW5nIG9mIGZpbHRlcmJhciwgVGFibGUgYW5kIFBhZ2UgQ29udGV4dFxuXHQgKiBAcGFyYW0gdk1hcHBpbmdzIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHNlbWFudGljIG9iamVjdCBtYXBwaW5nXG5cdCAqIEByZXR1cm5zIC0gTW9kaWZpZWQgU2VsZWN0aW9uVmFyaWFudCB3aXRoIExvY2FsUHJvcGVydHkgcmVwbGFjZWQgd2l0aCBTZW1hbnRpY09iamVjdFByb3BlcnRpZXMuXG5cdCAqL1xuXHRfYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IG9iamVjdCB8IHN0cmluZyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIG9NYXBwaW5ncykge1xuXHRcdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0XHQoaXRlbVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgaXRlbVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdKSB8fFxuXHRcdFx0XHQoaXRlbVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0XHRpdGVtW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSB8fCBpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRpZiAob1NlbGVjdE9wdGlvbikge1xuXHRcdFx0XHQvL0NyZWF0ZSBhIG5ldyBTZWxlY3RPcHRpb24gd2l0aCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSBhcyB0aGUgcHJvcGVydHkgTmFtZSBhbmQgcmVtb3ZlIHRoZSBvbGRlciBvbmVcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSwgb1NlbGVjdE9wdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc3RvcmUgdGhlIGZvY3VzSW5mb3JtYXRpb24gdG8gdGhlIGhpc3Rvcnkgb2JqZWN0LlxuXHQgKi9cblx0cHJvdGVjdGVkIHN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5KCk6IHZvaWQge1xuXHRcdGxldCBmb2N1c0luZm8gPSBudWxsO1xuXHRcdGNvbnN0IGZvY3VzQ29udHJvbCA9IEVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpO1xuXHRcdGNvbnN0IGZvY3VzQ29udHJvbElkID0gZm9jdXNDb250cm9sPy5nZXRJZCgpO1xuXHRcdGNvbnN0IGZvY3VzTURDVGFibGUgPSBmb2N1c0NvbnRyb2wgJiYgRlBNSGVscGVyLmdldE1kY1RhYmxlKGZvY3VzQ29udHJvbCk7XG5cdFx0aWYgKGZvY3VzQ29udHJvbD8uaXNBKFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRmb2N1c0luZm8gPSB7XG5cdFx0XHRcdHR5cGU6IFwiQ29udHJvbFwiLFxuXHRcdFx0XHRjb250cm9sSWQ6IGZvY3VzQ29udHJvbElkXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoZm9jdXNNRENUYWJsZSkge1xuXHRcdFx0Zm9jdXNJbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIlJvd1wiLFxuXHRcdFx0XHR0YWJsZUlkOiBmb2N1c01EQ1RhYmxlLmdldElkKCksXG5cdFx0XHRcdGNvbnRleHRQYXRoRm9jdXM6IGZvY3VzQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHRcdH07XG5cdFx0fVxuXHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oe30sIGhpc3Rvcnkuc3RhdGUsIHsgZm9jdXNJbmZvOiBmb2N1c0luZm8gfSksIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhbiBPdXRib3VuZCBwcm92aWRlZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBzT3V0Ym91bmQgSWRlbnRpZmllciB0byBsb2NhdGlvbiB0aGUgb3V0Ym91bmQgaW4gdGhlIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBtTmF2aWdhdGlvblBhcmFtZXRlcnMgT3B0aW9uYWwgbWFwIGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50XG5cdCAqIEBzaW5jZSAxLjg2LjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZU91dGJvdW5kKHNPdXRib3VuZDogc3RyaW5nLCBtTmF2aWdhdGlvblBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duIHwgdW5rbm93bltdPik6IHZvaWQge1xuXHRcdHRoaXMuc3RvcmVGb2N1c0luZm9Jbkhpc3RvcnkoKTtcblx0XHRsZXQgYU5hdlBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG9NYW5pZmVzdEVudHJ5ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpLFxuXHRcdFx0b091dGJvdW5kID0gb01hbmlmZXN0RW50cnkuY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHM/LltzT3V0Ym91bmRdO1xuXHRcdGlmICghb091dGJvdW5kKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJPdXRib3VuZCBpcyBub3QgZGVmaW5lZCBpbiBtYW5pZmVzdCEhXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRzQWN0aW9uID0gb091dGJvdW5kLmFjdGlvbixcblx0XHRcdG91dGJvdW5kUGFyYW1zID0gb091dGJvdW5kLnBhcmFtZXRlcnMgJiYgdGhpcy5nZXRPdXRib3VuZFBhcmFtcyhvT3V0Ym91bmQucGFyYW1ldGVycyk7XG5cblx0XHRpZiAobU5hdmlnYXRpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRhTmF2UGFyYW1zID0gW107XG5cdFx0XHRPYmplY3Qua2V5cyhtTmF2aWdhdGlvblBhcmFtZXRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGxldCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdFx0XHRjb25zdCBuYXZQYXJhbWV0ZXJWYWx1ZSA9IG1OYXZpZ2F0aW9uUGFyYW1ldGVycyFba2V5XTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobmF2UGFyYW1ldGVyVmFsdWUpKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIG5hdlBhcmFtZXRlclZhbHVlKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRvUGFyYW1zW2tleV0gPSBpdGVtO1xuXHRcdFx0XHRcdFx0YU5hdlBhcmFtcz8ucHVzaChvUGFyYW1zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1BhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdG9QYXJhbXNba2V5XSA9IG5hdlBhcmFtZXRlclZhbHVlIGFzIHN0cmluZztcblx0XHRcdFx0XHRhTmF2UGFyYW1zPy5wdXNoKG9QYXJhbXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFOYXZQYXJhbXMgfHwgb3V0Ym91bmRQYXJhbXMpIHtcblx0XHRcdG1OYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiB7XG5cdFx0XHRcdFx0ZGF0YTogYU5hdlBhcmFtcyB8fCBvdXRib3VuZFBhcmFtc1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShzU2VtYW50aWNPYmplY3QsIHNBY3Rpb24sIG1OYXZpZ2F0aW9uUGFyYW1ldGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGFwcGx5IG91dGJvdW5kIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb25WYXJpYW50IGNvbnNpc3Rpbmcgb2YgYSBmaWx0ZXIgYmFyLCBhIHRhYmxlLCBhbmQgYSBwYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIHZPdXRib3VuZFBhcmFtcyBPdXRib3VuZCBQcm9wZXJ0aWVzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdCAqIEByZXR1cm5zIC0gVGhlIG1vZGlmaWVkIFNlbGVjdGlvblZhcmlhbnQgd2l0aCBvdXRib3VuZCBwYXJhbWV0ZXJzLlxuXHQgKi9cblx0X2FwcGx5T3V0Ym91bmRQYXJhbXMob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZPdXRib3VuZFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXModk91dGJvdW5kUGFyYW1zKTtcblx0XHRjb25zdCBhU2VsZWN0UHJvcGVydGllcyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmICghYVNlbGVjdFByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5hZGRTZWxlY3RPcHRpb24oa2V5LCBcIklcIiwgXCJFUVwiLCB2T3V0Ym91bmRQYXJhbXNba2V5XSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIG91dGJvdW5kIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBvT3V0Ym91bmRQYXJhbXMgUGFyYW1ldGVycyBkZWZpbmVkIGluIHRoZSBvdXRib3VuZHMuIE9ubHkgXCJwbGFpblwiIGlzIHN1cHBvcnRlZFxuXHQgKiBAcmV0dXJucyBQYXJhbWV0ZXJzIHdpdGggdGhlIGtleS1WYWx1ZSBwYWlyXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0T3V0Ym91bmRQYXJhbXMob091dGJvdW5kUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnlQYXJhbWV0ZXI+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG5cdFx0Y29uc3Qgb1BhcmFtc01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRpZiAob091dGJvdW5kUGFyYW1zKSB7XG5cdFx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZFBhcmFtcykgfHwgW107XG5cdFx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gb091dGJvdW5kUGFyYW1zW2tleV07XG5cdFx0XHRcdFx0aWYgKG9NYXBwaW5nLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLmZvcm1hdCA9PT0gXCJwbGFpblwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9QYXJhbXNNYXBwaW5nW2tleV0pIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc01hcHBpbmdba2V5XSA9IG9NYXBwaW5nLnZhbHVlLnZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUGFyYW1zTWFwcGluZztcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udHJvbGxlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmF2TW9kZSBPcGVucyBpbiBuZXcgdGFiIG9yIHdpbmRvdyB3aGVuIHNldCB0byAnZXhwbGFjZScuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqL1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10gfCB1bmRlZmluZWQsXG5cdFx0c0NyZWF0ZVBhdGg6IHN0cmluZyxcblx0XHRuYXZNb2RlPzogc3RyaW5nXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9PdXRib3VuZHMgPSBvQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpO1xuXHRcdGNvbnN0IG9EaXNwbGF5T3V0Ym91bmQgPSBvT3V0Ym91bmRzW3NPdXRib3VuZFRhcmdldF07XG5cdFx0bGV0IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblx0XHRpZiAob0Rpc3BsYXlPdXRib3VuZCAmJiBvRGlzcGxheU91dGJvdW5kLnNlbWFudGljT2JqZWN0ICYmIG9EaXNwbGF5T3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRjb25zdCBvUmVmcmVzaFN0cmF0ZWdpZXM6IFJlZnJlc2hTdHJhdGVnaWVzID0ge1xuXHRcdFx0XHRpbnRlbnRzOiB7fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5OiBTT1JlZnJlc2hTdHJhdGVneSA9IHt9O1xuXHRcdFx0bGV0IHNNZXRhUGF0aDtcblx0XHRcdGxldCBuYXZpZ2F0aW9uQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHMgPSBvQ29udGV4dDtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHRbMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250ZXh0LmlzQSAmJiBvQ29udGV4dC5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cyA9IFtvQ29udGV4dF07XG5cdFx0XHRcdH1cblx0XHRcdFx0b0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3lbc01ldGFQYXRoXSA9IFJlZnJlc2hTdHJhdGVneVR5cGUuU2VsZjtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLl9mZURlZmF1bHQgPSBvRGVmYXVsdFJlZnJlc2hTdHJhdGVneTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNDcmVhdGVQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtvRGlzcGxheU91dGJvdW5kLnNlbWFudGljT2JqZWN0fS0ke29EaXNwbGF5T3V0Ym91bmQuYWN0aW9ufWA7XG5cdFx0XHRcdG9SZWZyZXNoU3RyYXRlZ2llcy5pbnRlbnRzIVtzS2V5XSA9IHt9O1xuXHRcdFx0XHRvUmVmcmVzaFN0cmF0ZWdpZXMuaW50ZW50cyFbc0tleV0hW3NDcmVhdGVQYXRoXSA9IFJlZnJlc2hTdHJhdGVneVR5cGUuU2VsZjtcblx0XHRcdH1cblx0XHRcdGlmIChvRGlzcGxheU91dGJvdW5kICYmIG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb0Rpc3BsYXlPdXRib3VuZC5wYXJhbWV0ZXJzICYmIHRoaXMuZ2V0T3V0Ym91bmRQYXJhbXMob0Rpc3BsYXlPdXRib3VuZC5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdCwgb0Rpc3BsYXlPdXRib3VuZC5hY3Rpb24sIHtcblx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBuYXZpZ2F0aW9uQ29udGV4dHMsXG5cdFx0XHRcdHJlZnJlc2hTdHJhdGVnaWVzOiBvUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRuYXZNb2RlOiBuYXZNb2RlXG5cdFx0XHR9KTtcblxuXHRcdFx0Ly9UT0RPOiBjaGVjayB3aHkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpcyByZXF1aXJlZFxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYG91dGJvdW5kIHRhcmdldCAke3NPdXRib3VuZFRhcmdldH0gbm90IGZvdW5kIGluIGNyb3NzIG5hdmlnYXRpb24gZGVmaW5pdGlvbiBvZiBtYW5pZmVzdGApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBzZW1hbnRpYyBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHNlbWFudGljQXR0cmlidXRlcyBTZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBwYXRoc1RvUmV0YWluIE5hdmlnYXRpb24gcHJvcGVydGllcyB0byBiZSByZXRhaW5lZCBpbiBjYXNlIG9mIGxpbmtzXG5cdCAqIEByZXR1cm5zIFByb2Nlc3NlZCBzZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdCAqL1xuXHRwcm9jZXNzU2VtYW50aWNBdHRyaWJ1dGVzKGNvbnRleHQ6IENvbnRleHQsIHNlbWFudGljQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHBhdGhzVG9SZXRhaW4/OiBBcnJheTxzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRcdGNvbnN0IGJLZWVwTmF2UHJvcGVydGllcyA9IHRoaXMua2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpO1xuXHRcdGlmICghYktlZXBOYXZQcm9wZXJ0aWVzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMoY29udGV4dCwgcGF0aHNUb1JldGFpbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzZW1hbnRpY0F0dHJpYnV0ZXM7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIG5hdmlnYXRpb24gcHJvcGVydGllcyBoYXMgdG8gYmUgY29uc2lkZXJlZCBmb3IgdGhlIGV4dGVybmFsIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaGFzIHRvIGJlIGNvbnNpZGVyZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRrZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdGxldCBiS2VlcE5hdlByb3BlcnRpZXMgPSBmYWxzZTtcblx0XHRjb25zdCBtYW5pZmVzdCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRcdGJLZWVwTmF2UHJvcGVydGllcyA9IG1hbmlmZXN0Py5hcHA/LmNvbnNpZGVyTmF2aWdhdGlvblByb3BlcnRpZXNGb3JFeHRlcm5hbE5hdmlnYXRpb24gfHwgZmFsc2U7XG5cdFx0cmV0dXJuIGJLZWVwTmF2UHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgc2VtYW50aWMgYXR0cmlidXRlcyBmcm9tIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHBhdGhzVG9SZXRhaW4gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIHJldGFpbmVkIGluIGNhc2Ugb2YgbGlua3Ncblx0ICogQHJldHVybnMgU2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFNlbWFudGljQXR0cmlidXRlc1dpdGhvdXROYXZpZ2F0aW9uUHJvcGVydGllcyhjb250ZXh0OiBDb250ZXh0LCBwYXRoc1RvUmV0YWluPzogQXJyYXk8c3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dFBhdGgpLFxuXHRcdFx0cmV0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCBuYXZQcm9wZXJ0aWVzID0gdGhpcy5nZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlKG1ldGFNb2RlbCwgbWV0YVBhdGgpO1xuXHRcdGlmIChuYXZQcm9wZXJ0aWVzICYmIG5hdlByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0bmF2UHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0Y29uc3QgbmF2UHJvcE5hbWUgPSBuYXZQcm9wLm5hbWU7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHBhdGhzVG9SZXRhaW4pICYmIHBhdGhzVG9SZXRhaW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vIFdlIGNvbnNpZGVyIDEuMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgc2VtYW50aWMgbGlua3MgdG8gYmUgcGFzc2VkIGFzIHBhcnQgb2YgY29udGV4dFxuXHRcdFx0XHRcdGlmIChyZXQuaGFzT3duUHJvcGVydHkobmF2UHJvcE5hbWUpICYmIHJldFtuYXZQcm9wTmFtZV0pIHtcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHJldFtuYXZQcm9wTmFtZV0pLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAke25hdlByb3BOYW1lfS8ke2tleX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoIXBhdGhzVG9SZXRhaW4/LmluY2x1ZGVzKHByb3BlcnR5UGF0aCkgJiYgcmV0W25hdlByb3BOYW1lXS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV1ba2V5XTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMocmV0W25hdlByb3BOYW1lXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocmV0Lmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSkge1xuXHRcdFx0XHRcdGRlbGV0ZSByZXRbbmF2UHJvcE5hbWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZyb20gZW50aXR5VHlwZSB1c2luZyBtZXRhbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBNZXRhUGF0aFxuXHQgKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0ICovXG5cdGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbUVudGl0eVR5cGUobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgbWV0YVBhdGg6IHN0cmluZyk6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdIHtcblx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxFbnRpdHlUeXBlPihgJHttZXRhUGF0aH0vYCkudGFyZ2V0ITtcblx0XHRyZXR1cm4gZW50aXR5VHlwZT8ubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkEsSUFNTUEsNkJBQTZCLFdBRGxDQyxjQUFjLENBQUMsa0VBQWtFLENBQUMsVUFZakZDLGNBQWMsRUFBRSxVQWtDaEJDLGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFVBNktoQkQsZUFBZSxFQUFFLFVBQ2pCQyxjQUFjLEVBQUUsVUFvSGhCRCxlQUFlLEVBQUUsVUFDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLE9BQU8sQ0FBQyxVQWNyQ0osZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0FzQ2hCSSxnQkFB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
|
|
776
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJwcml2YXRlRXh0ZW5zaW9uIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIl9vTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIl9vVmlldyIsImdldFZpZXciLCJuYXZpZ2F0ZSIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGlvblBhcmFtZXRlcnMiLCJfZG9OYXZpZ2F0ZSIsIm9Db250ZXh0Iiwidk5hdmlnYXRpb25Db250ZXh0cyIsIm5hdmlnYXRpb25Db250ZXh0cyIsImFOYXZpZ2F0aW9uQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2U2VtYW50aWNPYmplY3RNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidk91dGJvdW5kUGFyYW1zIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib1RhcmdldEluZm8iLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNldEJpbmRpbmdDb250ZXh0IiwiYVNlbWFudGljQXR0cmlidXRlcyIsIm9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsImxlbmd0aCIsImZvckVhY2giLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQiLCJvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCIsImlzQSIsIm9TZW1hbnRpY0F0dHJpYnV0ZXMiLCJnZXRPYmplY3QiLCJzTWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJmaW5hbFNlbWFudGljQXR0cmlidXRlcyIsInByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib05hdkNvbnRleHQiLCJwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbiIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwdXNoIiwic2VtYW50aWNBdHRyaWJ1dGVzIiwiZGF0YSIsIm1ldGFQYXRoIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJvTW9kZWwiLCJzRW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0Iiwic0NvbnRleHRVcmwiLCJjb25zdHJ1Y3RDb250ZXh0VXJsIiwidW5kZWZpbmVkIiwic2V0RmlsdGVyQ29udGV4dFVybCIsIl9hcHBseU91dGJvdW5kUGFyYW1zIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiYWRhcHROYXZpZ2F0aW9uQ29udGV4dCIsIl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJfcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyIsInNOYXZNb2RlIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwibVJlZnJlc2hTdHJhdGVnaWVzIiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJvSW50ZXJuYWxNb2RlbCIsImdldFZpZXdEYXRhIiwicmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlIiwibVZpZXdSZWZyZXNoU3RyYXRlZ2llcyIsIm1lcmdlT2JqZWN0cyIsIm1SZWZyZXNoU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQiLCJzZXRQcm9wZXJ0eSIsIm5hdk1vZGUiLCJvbkVycm9yIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiTWVzc2FnZUJveENsYXNzIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZXJyb3IiLCJnZXRUZXh0IiwidGl0bGUiLCJFcnJvciIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib01ldGFNb2RlbCIsImNvbnZlcnRlclR5cGUiLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJiaW5kIiwiRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJOYXZpZ2F0aW9uVHlwZSIsIkZvcndhcmROYXZpZ2F0aW9uIiwib0Rpc3RpbmN0S2V5cyIsInNDb250ZXh0UGF0aCIsImFNZXRhUGF0aFBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdCIsIkxvb2tVcE9iamVjdCIsInNMb29rVXBPYmplY3RNZXRhUGF0aCIsInNLZXkiLCJvTmV3TG9va1VwT2JqZWN0Iiwic01haW5FbnRpdHlTZXROYW1lIiwic01haW5FbnRpdHlUeXBlTmFtZSIsIm9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0Iiwic01haW5FbnRpdHlWYWx1ZVBhdGgiLCJzQ3VycmVudFZhbHVlUGF0aCIsInNMYXN0VmFsdWVQYXRoIiwic0Rpc3RpbmN0S2V5IiwiYUNvbmZsaWN0aW5nUGF0aHMiLCJzV2lubmVyVmFsdWVQYXRoIiwiaSIsInNQYXRoIiwic1BhdGhJbkNvbnRleHQiLCJyZXBsYWNlIiwic0VudGl0eVR5cGVOYW1lIiwic1ZhbHVlIiwiam9pbiIsImdldFByb3BlcnR5Iiwic1Byb3BlcnR5IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNob3VsZENvbnRpbnVlIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0IiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2ciLCJOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsImVudGl0eVR5cGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImFwcGxpY2FibGVDb250ZXh0cyIsIm9wZW4iLCJyZW1vdmVTZWxlY3RPcHRpb24iLCJvQXR0cmlidXRlcyIsInRyYW5zQWdncmVnYXRpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsIl9nZXRBZ2dyZWdhdGVzIiwiZ2V0RGlhZ25vc3RpY3MiLCJhUHJvcGVydGllcyIsIk9iamVjdCIsImtleXMiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJfZGVsZXRlQWdncmVnYXRlcyIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwiX2dldFByb3BlcnR5QW5ub3RhdGlvbnMiLCJQZXJzb25hbERhdGEiLCJJc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwiVUkiLCJFeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0IiwiQW5hbHl0aWNzIiwiTWVhc3VyZSIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsIm9GaWVsZENvbnRyb2wiLCJfaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlIiwiYWdncmVnYXRlcyIsInNQcm9wIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvRnVsbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIm9EaWFnbm9zdGljcyIsImNvbnZlcnRlckNvbnRleHQiLCJfZ2V0Q29udmVydGVyQ29udGV4dCIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsIm1hcCIsInRyYW5zQWdnIiwiTmFtZSIsIlZhbHVlIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGUiLCJxdWFsaWZpZXIiLCJvVmlld0RhdGEiLCJjb250ZXh0UGF0aCIsImZ1bGxDb250ZXh0UGF0aCIsIkNvbW1vblV0aWxzIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgiLCJzRmllbGRDb250cm9sUGF0aCIsIm9BdHRyaWJ1dGUiLCJiSW5hcHBsaWNhYmxlIiwiYVBhcnRzIiwiaGFzT3duUHJvcGVydHkiLCJ2TWFwcGluZ3MiLCJvTWFwcGluZ3MiLCJKU09OIiwicGFyc2UiLCJpdGVtIiwic0xvY2FsUHJvcGVydHkiLCJzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIm9TZWxlY3RPcHRpb24iLCJnZXRTZWxlY3RPcHRpb24iLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwic3RvcmVGb2N1c0luZm9Jbkhpc3RvcnkiLCJmb2N1c0luZm8iLCJmb2N1c0NvbnRyb2wiLCJFbGVtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImZvY3VzQ29udHJvbElkIiwiZ2V0SWQiLCJmb2N1c01EQ1RhYmxlIiwiRlBNSGVscGVyIiwiZ2V0TWRjVGFibGUiLCJ0eXBlIiwiY29udHJvbElkIiwidGFibGVJZCIsImNvbnRleHRQYXRoRm9jdXMiLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwiYXNzaWduIiwic3RhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwic091dGJvdW5kIiwiYU5hdlBhcmFtcyIsIm9NYW5pZmVzdEVudHJ5IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm9PdXRib3VuZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIkxvZyIsIm91dGJvdW5kUGFyYW1zIiwicGFyYW1ldGVycyIsImdldE91dGJvdW5kUGFyYW1zIiwia2V5Iiwib1BhcmFtcyIsIm5hdlBhcmFtZXRlclZhbHVlIiwiYVBhcmFtZXRlcnMiLCJhU2VsZWN0UHJvcGVydGllcyIsImdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiYWRkU2VsZWN0T3B0aW9uIiwib091dGJvdW5kUGFyYW1zIiwib1BhcmFtc01hcHBpbmciLCJvTWFwcGluZyIsInZhbHVlIiwiZm9ybWF0Iiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvT3V0Ym91bmRzIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvRGlzcGxheU91dGJvdW5kIiwib1JlZnJlc2hTdHJhdGVnaWVzIiwiaW50ZW50cyIsIm9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5IiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0IiwiUmVmcmVzaFN0cmF0ZWd5VHlwZSIsIlNlbGYiLCJfZmVEZWZhdWx0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb250ZXh0IiwicGF0aHNUb1JldGFpbiIsImJLZWVwTmF2UHJvcGVydGllcyIsImtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24iLCJnZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYW5pZmVzdCIsImFwcCIsImNvbnNpZGVyTmF2aWdhdGlvblByb3BlcnRpZXNGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJyZXQiLCJuYXZQcm9wZXJ0aWVzIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZSIsIm5hdlByb3AiLCJuYXZQcm9wTmFtZSIsIm5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L05vdEFwcGxpY2FibGVDb250ZXh0RGlhbG9nXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV4dGVuc2libGUsXG5cdGZpbmFsRXh0ZW5zaW9uLFxuXHRtZXRob2RPdmVycmlkZSxcblx0cHJpdmF0ZUV4dGVuc2lvbixcblx0cHVibGljRXh0ZW5zaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlZnJlc2hTdHJhdGVnaWVzLCBTT1JlZnJlc2hTdHJhdGVneSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZVJlZnJlc2hUeXBlc1wiO1xuaW1wb3J0IHsgUmVmcmVzaFN0cmF0ZWd5VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZVJlZnJlc2hUeXBlc1wiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9OYXZpZ2F0aW9uU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5UGFyYW1ldGVyIH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbi8qKlxuICogTmF2aWdhdGlvbiBQYXJhbWV0ZXJzIHVzZWQgZHVyaW5nIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKi9cblx0bmF2aWdhdGlvbkNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBTZW1hbnRpY09iamVjdE1hcHBpbmcgb3IgU2VtYW50aWNPYmplY3RNYXBwaW5nIHRoYXQgYXBwbGllcyB0byB0aGlzIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdGRlZmF1bHRSZWZyZXNoU3RyYXRlZ3k/OiBvYmplY3Q7XG5cdHJlZnJlc2hTdHJhdGVnaWVzPzogUmVmcmVzaFN0cmF0ZWdpZXM7XG5cdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHRvIGJlIHBhc3NlZCB0byB0aGUgaW50ZW50IGFuZCBmb3Igd2hpY2ggdGhlIElCTiBidXR0b24gaXMgZW5hYmxlZFxuXHQgKi9cblx0YXBwbGljYWJsZUNvbnRleHRzPzogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0LyoqXG5cdCAqIFNpbmdsZSBpbnN0YW5jZSBvciBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSwgb3IgYWx0ZXJuYXRpdmVseSBhbiBvYmplY3Qgb3IgYXJyYXkgb2Ygb2JqZWN0cywgd2hpY2ggY2Fubm90IGJlIHBhc3NlZCB0byB0aGUgaW50ZW50LlxuXHQgKiBcdGlmIGFuIGFycmF5IG9mIGNvbnRleHRzIGlzIHBhc3NlZCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YSBwYXRoIGFuZCBhY2NvcmRpbmdseSByZW1vdmUgdGhlIHNlbnNpdGl2ZSBkYXRhXG5cdCAqIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgZm9sbG93aW5nIGZvcm1hdCBpcyBleHBlY3RlZDpcblx0ICoge1xuXHQgKiBcdGRhdGE6IHtcblx0ICogXHRcdFByb2R1Y3RJRDogNzYzNCxcblx0ICogXHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKiBcdH0sXG5cdCAqIFx0bWV0YVBhdGg6IFwiL1NhbGVzT3JkZXJNYW5hZ2VcIlxuXHQgKiB9XG5cdCAqIFRoZSBtZXRhUGF0aCBpcyB1c2VkIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEuXG5cdCAqL1xuXHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXG5cdGxhYmVsPzogc3RyaW5nO1xuXHRuYXZNb2RlPzogc3RyaW5nO1xufTtcbi8qKlxuICoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5Db250cm9sbGVyRXh0ZW5zaW9uIENvbnRyb2xsZXIgZXh0ZW5zaW9ufVxuICpcbiAqIEBzaW5jZSAxLjg0LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxJbnRlcm5hbEJhc2VkTmF2aWdhdGlvblwiKVxuY2xhc3MgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIF9vTmF2aWdhdGlvblNlcnZpY2UhOiBOYXZpZ2F0aW9uU2VydmljZTtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKTtcblx0XHR0aGlzLl9vTWV0YU1vZGVsID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuX29BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHR0aGlzLl9vVmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCk7XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlcyBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvbiAoU2VtYW50aWNPYmplY3QtQWN0aW9uKSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIHNlbGVjdGlvbiB2YXJpYW50IGFmdGVyIHRoZSBhZGFwdGF0aW9uIGJ5IGEgY29uc3VtZXIuXG5cdCAqIFRoaXMgdGFrZXMgY2FyZSBvZiByZW1vdmluZyBhbnkgdGVjaG5pY2FsIHBhcmFtZXRlcnMgYW5kIGRldGVybWluZXMgaWYgYW4gZXhwbGFjZSBvciBpbnBsYWNlIG5hdmlnYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBhY3Rpb24gIEFjdGlvbiBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVyc10gT3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIGV4dGVybmFsIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHNdIFVzZXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbnRlbnQ6XG5cdCAqICAgIGEgc2luZ2xlIGluc3RhbmNlIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH1cblx0ICogICAgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH1cblx0ICogICAgYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9mIG9iamVjdHNcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1ldGFQYXRoIGFuZCB0byByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhXG5cdCAqXHRcdCAgSWYgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyBwYXNzZWQsIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGl4IGV4cGVjdGVkOlxuXHQgKlx0XHQgIHtcblx0ICpcdFx0XHRkYXRhOiB7XG5cdCAqXHQgXHRcdFx0UHJvZHVjdElEOiA3NjM0LFxuXHQgKlx0XHRcdFx0TmFtZTogXCJMYXB0b3BcIlxuXHQgKlx0XHRcdCB9LFxuXHQgKlx0XHRcdCBtZXRhUGF0aDogXCIvU2FsZXNPcmRlck1hbmFnZVwiXG5cdCAqICAgICAgICB9XG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nXSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFNlbWFudGljT2JqZWN0TWFwcGluZyBvciBTZW1hbnRpY09iamVjdE1hcHBpbmcgdGhhdCBhcHBsaWVzIHRvIHRoaXMgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzLmRlZmF1bHRSZWZyZXNoU3RyYXRlZ3ldIERlZmF1bHQgcmVmcmVzaCBzdHJhdGVneSB0byBiZSB1c2VkIGluIGNhc2Ugbm8gcmVmcmVzaCBzdHJhdGVneSBpcyBzcGVjaWZpZWQgZm9yIHRoZSBpbnRlbnQgaW4gdGhlIHZpZXcuXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMucmVmcmVzaFN0cmF0ZWdpZXNdXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXSBBZGRpdGlvbmFsIG5hdmlnYXRpb24gcGFyYW1ldGVycyBjb25maWd1cmVkIGluIHRoZSBjcm9zc0FwcE5hdmlnYXRpb24gb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRuYXZpZ2F0ZShzZW1hbnRpY09iamVjdDogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgbmF2aWdhdGlvblBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHZvaWQge1xuXHRcdGNvbnN0IF9kb05hdmlnYXRlID0gKG9Db250ZXh0PzogQ29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgdk5hdmlnYXRpb25Db250ZXh0czogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXSB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cztcblx0XHRcdGNvbnN0IGFOYXZpZ2F0aW9uQ29udGV4dHM6IHVuZGVmaW5lZCB8IChPRGF0YVY0Q29udGV4dCB8IG9iamVjdClbXSA9XG5cdFx0XHRcdHZOYXZpZ2F0aW9uQ29udGV4dHMgJiYgIUFycmF5LmlzQXJyYXkodk5hdmlnYXRpb25Db250ZXh0cykgPyBbdk5hdmlnYXRpb25Db250ZXh0c10gOiB2TmF2aWdhdGlvbkNvbnRleHRzO1xuXHRcdFx0Y29uc3QgdlNlbWFudGljT2JqZWN0TWFwcGluZyA9IG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0dk91dGJvdW5kUGFyYW1zID0gbmF2aWdhdGlvblBhcmFtZXRlcnMgJiYgbmF2aWdhdGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRvVGFyZ2V0SW5mbzogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nOyBhY3Rpb246IHN0cmluZzsgcHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSA9IHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0YWN0aW9uOiBhY3Rpb25cblx0XHRcdFx0fSxcblx0XHRcdFx0b1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblxuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHRoaXMuX29WaWV3LnNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNlbWFudGljT2JqZWN0ICYmIGFjdGlvbikge1xuXHRcdFx0XHRsZXQgYVNlbWFudGljQXR0cmlidXRlczogdW5rbm93bltdID0gW10sXG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSBuZXcgU2VsZWN0aW9uVmFyaWFudCgpO1xuXHRcdFx0XHQvLyAxLiBnZXQgU2VtYW50aWNBdHRyaWJ1dGVzIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdGlmIChhTmF2aWdhdGlvbkNvbnRleHRzICYmIGFOYXZpZ2F0aW9uQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0YU5hdmlnYXRpb25Db250ZXh0cy5mb3JFYWNoKChvTmF2aWdhdGlvbkNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdC8vIDEuMS5hIGlmIG5hdmlnYXRpb24gY29udGV4dCBpcyBpbnN0YW5jZSBvZiBzYXAudWkubW9kZS5vZGF0YS52NC5Db250ZXh0XG5cdFx0XHRcdFx0XHQvLyBlbHNlIGNoZWNrIGlmIG5hdmlnYXRpb24gY29udGV4dCBpcyBvZiB0eXBlIG9iamVjdFxuXHRcdFx0XHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0ID0gb05hdmlnYXRpb25Db250ZXh0IGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXNcblx0XHRcdFx0XHRcdFx0fCB7IGRhdGE6IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBtZXRhUGF0aDogc3RyaW5nIH1cblx0XHRcdFx0XHRcdFx0fCB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LmlzQSAmJlxuXHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuaXNBPE9EYXRhVjRDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gMS4xLmIgcmVtb3ZlIHNlbnNpdGl2ZSBkYXRhXG5cdFx0XHRcdFx0XHRcdGxldCBvU2VtYW50aWNBdHRyaWJ1dGVzID0gb05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSB0aGlzLl9vTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBhbHNvIHJlbW92ZSBzZW5zaXRpdmUgZGF0YSBmcm9tICBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0Y29uc3QgZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMgPSB0aGlzLnByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMoXG5cdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShmaW5hbFNlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb05hdkNvbnRleHQgPSB0aGlzLnByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdGZpbmFsU2VtYW50aWNBdHRyaWJ1dGVzLFxuXHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRvVGFyZ2V0SW5mb1tcInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3RcIl0gPSBvTmF2Q29udGV4dC5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2gob05hdkNvbnRleHQuc2VtYW50aWNBdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdCEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIG9OYXZpZ2F0aW9uQ29udGV4dCA9PT0gXCJvYmplY3RcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YSBmcm9tIG9iamVjdFxuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVTZW5zaXRpdmVEYXRhKG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEsIG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0Lm1ldGFQYXRoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdCAmJiBBcnJheS5pc0FycmF5KG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIG9OYXZpZ2F0aW9uQ29udGV4dC5kYXRhIGNhbiBiZSBhcnJheSBhbHJlYWR5IGV4IDogW3tDdXN0b21lcjogXCIxMDAwMVwifSwge0N1c3RvbWVyOiBcIjEwMDkxXCJ9XVxuXHRcdFx0XHRcdFx0XHQvLyBoZW5jZSBhc3NpZ25pbmcgaXQgdG8gdGhlIGFTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShcblx0XHRcdFx0XHRcdFx0XHRvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhLFxuXHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0Lm1ldGFQYXRoXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gMi4xIE1lcmdlIGJhc2Ugc2VsZWN0aW9uIHZhcmlhbnQgYW5kIHNhbml0aXplZCBzZW1hbnRpYyBhdHRyaWJ1dGVzIGludG8gb25lIFNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0aWYgKGFTZW1hbnRpY0F0dHJpYnV0ZXMgJiYgYVNlbWFudGljQXR0cmlidXRlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChcblx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyAzLiBBZGQgZmlsdGVyQ29udGV4dFVybCB0byBTViBzbyB0aGUgTmF2aWdhdGlvbkhhbmRsZXIgY2FuIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEgYmFzZWQgb24gdmlldyBlbnRpdHlTZXRcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5fb1ZpZXcuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRzRW50aXR5U2V0ID0gdGhpcy5nZXRFbnRpdHlTZXQoKSxcblx0XHRcdFx0XHRzQ29udGV4dFVybCA9IHNFbnRpdHlTZXQgPyB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UuY29uc3RydWN0Q29udGV4dFVybChzRW50aXR5U2V0LCBvTW9kZWwpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoc0NvbnRleHRVcmwpIHtcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5zZXRGaWx0ZXJDb250ZXh0VXJsKHNDb250ZXh0VXJsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IE91dGJvdW5kIFBhcmFtZXRlcnMgdG8gdGhlIFNWXG5cdFx0XHRcdGlmICh2T3V0Ym91bmRQYXJhbXMpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXMpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gNC4gZ2l2ZSBhbiBvcHBvcnR1bml0eSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGluZmx1ZW5jZSB0aGUgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHRvQ29udHJvbGxlci5pbnRlbnRCYXNlZE5hdmlnYXRpb24uYWRhcHROYXZpZ2F0aW9uQ29udGV4dChvU2VsZWN0aW9uVmFyaWFudCwgb1RhcmdldEluZm8pO1xuXG5cdFx0XHRcdC8vIDUuIEFwcGx5IHNlbWFudGljIG9iamVjdCBtYXBwaW5ncyB0byB0aGUgU1Zcblx0XHRcdFx0aWYgKHZTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHR0aGlzLl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQsIHZTZW1hbnRpY09iamVjdE1hcHBpbmcpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gNi4gcmVtb3ZlIHRlY2huaWNhbCBwYXJhbWV0ZXJzIGZyb20gU2VsZWN0aW9uIFZhcmlhbnRcblx0XHRcdFx0dGhpcy5fcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyhvU2VsZWN0aW9uVmFyaWFudCk7XG5cblx0XHRcdFx0Ly8gNy4gY2hlY2sgaWYgcHJvZ3JhbW1pbmcgbW9kZWwgaXMgc3RpY2t5IGFuZCBwYWdlIGlzIGVkaXRhYmxlXG5cdFx0XHRcdGxldCBzTmF2TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXROYXZpZ2F0aW9uTW9kZSgpO1xuXG5cdFx0XHRcdC8vIDguIFVwZGF0aW5nIHJlZnJlc2ggc3RyYXRlZ3kgaW4gaW50ZXJuYWwgbW9kZWxcblx0XHRcdFx0Y29uc3QgbVJlZnJlc2hTdHJhdGVnaWVzID0gKG5hdmlnYXRpb25QYXJhbWV0ZXJzICYmIG5hdmlnYXRpb25QYXJhbWV0ZXJzLnJlZnJlc2hTdHJhdGVnaWVzKSB8fCB7fSxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbCA9IG9WaWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0XHRcdGlmICgob1ZpZXcgJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKSkucmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtVmlld1JlZnJlc2hTdHJhdGVnaWVzID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKS5yZWZyZXNoU3RyYXRlZ3lPbkFwcFJlc3RvcmUgfHwge307XG5cdFx0XHRcdFx0XHRtZXJnZU9iamVjdHMobVJlZnJlc2hTdHJhdGVnaWVzLCBtVmlld1JlZnJlc2hTdHJhdGVnaWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbVJlZnJlc2hTdHJhdGVneSA9IEtlZXBBbGl2ZUhlbHBlci5nZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQobVJlZnJlc2hTdHJhdGVnaWVzLCBzZW1hbnRpY09iamVjdCwgYWN0aW9uKTtcblx0XHRcdFx0XHRpZiAobVJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlXCIsIG1SZWZyZXNoU3RyYXRlZ3kpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIDkuIENoZWNrIGlmIG5hdk1vZGUgcGFyYW1ldGVyIGlzIHNldCBhbmQgdXNlIGl0XG5cdFx0XHRcdHNOYXZNb2RlID0gbmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgPyBuYXZpZ2F0aW9uUGFyYW1ldGVycz8ubmF2TW9kZSA6IHNOYXZNb2RlO1xuXG5cdFx0XHRcdC8vIDEwLiBOYXZpZ2F0ZSB2aWEgTmF2aWdhdGlvbkhhbmRsZXJcblx0XHRcdFx0Y29uc3Qgb25FcnJvciA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9NZXNzYWdlQm94XCJdLCBmdW5jdGlvbiAoTWVzc2FnZUJveENsYXNzOiB0eXBlb2YgTWVzc2FnZUJveCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3hDbGFzcy5lcnJvcihvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0hFTFBFUl9OQVZJR0FUSU9OX0VSUk9SX01FU1NBR0VcIiksIHtcblx0XHRcdFx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JcIilcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHR0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UubmF2aWdhdGUoXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvbkVycm9yLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTmF2TW9kZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2VtYW50aWMgT2JqZWN0L2FjdGlvbiBpcyBub3QgcHJvdmlkZWRcIik7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuY29udmVydGVyVHlwZSA9PT0gXCJPYmplY3RQYWdlXCIgJiZcblx0XHRcdG9NZXRhTW9kZWwgJiZcblx0XHRcdCFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCkgJiZcblx0XHRcdCEobmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgPT09IFwiZXhwbGFjZVwiKVxuXHRcdCkge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdF9kb05hdmlnYXRlLmJpbmQodGhpcyksXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfZG9OYXZpZ2F0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcmVwYXJlIGF0dHJpYnV0ZXMgdG8gYmUgcGFzc2VkIHRvIGV4dGVybmFsIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBvU2VtYW50aWNBdHRyaWJ1dGVzIENvbnRleHQgZGF0YSBhZnRlciByZW1vdmluZyBhbGwgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQWN0dWFsIGNvbnRleHQgZnJvbSB3aGljaCB0aGUgc2VtYW50aWNBdHRyaWJ1dGVzIHdlcmUgZGVyaXZlZC5cblx0ICogQHJldHVybnMgT2JqZWN0IG9mIHByZXBhcmVkIGF0dHJpYnV0ZXMgZm9yIGV4dGVybmFsIG5hdmlnYXRpb24gYW5kIG5vIGNvbmZsaWN0IHByb3BlcnRpZXMuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0b1NlbWFudGljQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0b0NvbnRleHQ6IENvbnRleHRcblx0KTogeyBzZW1hbnRpY0F0dHJpYnV0ZXM6IHVua25vd247IHByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSB7XG5cdFx0Ly8gMS4gRmluZCBhbGwgZGlzdGluY3Qga2V5cyBpbiB0aGUgb2JqZWN0IFNlbWFudGljQXR0cmlidXRlc1xuXHRcdC8vIFN0b3JlIG1ldGEgcGF0aCBmb3IgZWFjaCBvY2N1cmVuY2Ugb2YgdGhlIGtleVxuXHRcdGNvbnN0IG9EaXN0aW5jdEtleXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9LFxuXHRcdFx0c0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNDb250ZXh0UGF0aCksXG5cdFx0XHRhTWV0YVBhdGhQYXJ0cyA9IHNNZXRhUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuXG5cdFx0ZnVuY3Rpb24gX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChMb29rVXBPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzTG9va1VwT2JqZWN0TWV0YVBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIExvb2tVcE9iamVjdCkge1xuXHRcdFx0XHQvLyBudWxsIGNhc2U/P1xuXHRcdFx0XHRpZiAoTG9va1VwT2JqZWN0W3NLZXldID09PSBudWxsIHx8IHR5cGVvZiBMb29rVXBPYmplY3Rbc0tleV0gIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRpZiAoIW9EaXN0aW5jdEtleXNbc0tleV0pIHtcblx0XHRcdFx0XHRcdC8vIGlmIGtleSBpcyBmb3VuZCBmb3IgdGhlIGZpcnN0IHRpbWUgdGhlbiBjcmVhdGUgYXJyYXlcblx0XHRcdFx0XHRcdG9EaXN0aW5jdEtleXNbc0tleV0gPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gcHVzaCBwYXRoIHRvIGFycmF5XG5cdFx0XHRcdFx0b0Rpc3RpbmN0S2V5c1tzS2V5XS5wdXNoKHNMb29rVXBPYmplY3RNZXRhUGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgYSBuZXN0ZWQgb2JqZWN0IGlzIGZvdW5kXG5cdFx0XHRcdFx0Y29uc3Qgb05ld0xvb2tVcE9iamVjdCA9IExvb2tVcE9iamVjdFtzS2V5XTtcblx0XHRcdFx0XHRfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KG9OZXdMb29rVXBPYmplY3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGAke3NMb29rVXBPYmplY3RNZXRhUGF0aH0vJHtzS2V5fWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0X2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChvU2VtYW50aWNBdHRyaWJ1dGVzLCBzTWV0YVBhdGgpO1xuXG5cdFx0Ly8gMi4gRGV0ZXJtaW5lIGRpc3RpbmN0IGtleSB2YWx1ZSBhbmQgYWRkIGNvbmZsaWN0ZWQgcGF0aHMgdG8gc2VtYW50aWMgYXR0cmlidXRlc1xuXHRcdGNvbnN0IHNNYWluRW50aXR5U2V0TmFtZSA9IGFNZXRhUGF0aFBhcnRzWzBdLFxuXHRcdFx0c01haW5FbnRpdHlUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzTWFpbkVudGl0eVNldE5hbWV9L0BzYXB1aS5uYW1lYCksXG5cdFx0XHRvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGxldCBzTWFpbkVudGl0eVZhbHVlUGF0aCwgc0N1cnJlbnRWYWx1ZVBhdGgsIHNMYXN0VmFsdWVQYXRoO1xuXHRcdGZvciAoY29uc3Qgc0Rpc3RpbmN0S2V5IGluIG9EaXN0aW5jdEtleXMpIHtcblx0XHRcdGNvbnN0IGFDb25mbGljdGluZ1BhdGhzID0gb0Rpc3RpbmN0S2V5c1tzRGlzdGluY3RLZXldO1xuXHRcdFx0bGV0IHNXaW5uZXJWYWx1ZVBhdGg7XG5cdFx0XHQvLyBGaW5kIHdpbm5lciB2YWx1ZSBmb3IgZWFjaCBkaXN0aW5jdCBrZXkgaW4gY2FzZSBvZiBjb25mbGljdCBieSB0aGUgZm9sbG93aW5nIHJ1bGU6XG5cblx0XHRcdC8vIC0+IEEuIGlmIGFueSBtZXRhIHBhdGggZm9yIGEgZGlzdGluY3Qga2V5IGlzIHRoZSBzYW1lIGFzIG1haW4gZW50aXR5IHRha2UgdGhhdCBhcyB0aGUgdmFsdWVcblx0XHRcdC8vIC0+IEIuIGlmIEEgaXMgbm90IG1ldCBrZWVwIHRoZSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQgKHNNZXRhUGF0aCA9PT0gcGF0aCBvZiBkaXN0aW5jZSBrZXkpXG5cdFx0XHQvLyAtPiBDLiBpZiBBLCBCIG9yIEMgYXJlIG5vdCBtZXQgdGFrZSB0aGUgbGFzdCBwYXRoIGZvciB2YWx1ZVxuXHRcdFx0aWYgKGFDb25mbGljdGluZ1BhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Ly8gY29uZmxpY3Rcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gYUNvbmZsaWN0aW5nUGF0aHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1BhdGggPSBhQ29uZmxpY3RpbmdQYXRoc1tpXTtcblx0XHRcdFx0XHRsZXQgc1BhdGhJbkNvbnRleHQgPSBzUGF0aC5yZXBsYWNlKHNQYXRoID09PSBzTWV0YVBhdGggPyBzTWV0YVBhdGggOiBgJHtzTWV0YVBhdGh9L2AsIFwiXCIpO1xuXHRcdFx0XHRcdHNQYXRoSW5Db250ZXh0ID0gKHNQYXRoSW5Db250ZXh0ID09PSBcIlwiID8gc1BhdGhJbkNvbnRleHQgOiBgJHtzUGF0aEluQ29udGV4dH0vYCkgKyBzRGlzdGluY3RLZXk7XG5cdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9L0BzYXB1aS5uYW1lYCk7XG5cdFx0XHRcdFx0Ly8gcnVsZSBBXG5cblx0XHRcdFx0XHQvLyBydWxlIEFcblx0XHRcdFx0XHRpZiAoc0VudGl0eVR5cGVOYW1lID09PSBzTWFpbkVudGl0eVR5cGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRzTWFpbkVudGl0eVZhbHVlUGF0aCA9IHNQYXRoSW5Db250ZXh0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHJ1bGUgQlxuXHRcdFx0XHRcdGlmIChzUGF0aCA9PT0gc01ldGFQYXRoKSB7XG5cdFx0XHRcdFx0XHRzQ3VycmVudFZhbHVlUGF0aCA9IHNQYXRoSW5Db250ZXh0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHJ1bGUgQ1xuXHRcdFx0XHRcdHNMYXN0VmFsdWVQYXRoID0gc1BhdGhJbkNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBhZGQgY29uZmxpY3RlZCBwYXRoIHRvIHNlbWFudGljIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHQvLyBjaGVjayBpZiB0aGUgY3VycmVudCBwYXRoIHBvaW50cyB0byBtYWluIGVudGl0eSBhbmQgcHJlZml4IGF0dHJpYnV0ZSBuYW1lcyBhY2NvcmRpbmdseVxuXHRcdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbXG5cdFx0XHRcdFx0XHRgJHtzTWV0YVBhdGh9LyR7c1BhdGhJbkNvbnRleHR9YFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNWYWx1ZSAhPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi5cIilcblx0XHRcdFx0XHRdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGhJbkNvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEEgfHwgQiB8fCBDXG5cdFx0XHRcdHNXaW5uZXJWYWx1ZVBhdGggPSBzTWFpbkVudGl0eVZhbHVlUGF0aCB8fCBzQ3VycmVudFZhbHVlUGF0aCB8fCBzTGFzdFZhbHVlUGF0aDtcblx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlc1tzRGlzdGluY3RLZXldID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoc1dpbm5lclZhbHVlUGF0aCBhcyBzdHJpbmcpO1xuXHRcdFx0XHRzTWFpbkVudGl0eVZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0c0N1cnJlbnRWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHNMYXN0VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gbm8gY29uZmxpY3QsIGFkZCBkaXN0aW5jdCBrZXkgd2l0aG91dCBhZGRpbmcgcGF0aHNcblx0XHRcdFx0Y29uc3Qgc1BhdGggPSBhQ29uZmxpY3RpbmdQYXRoc1swXTsgLy8gYmVjYXVzZSB0aGVyZSBpcyBvbmx5IG9uZSBhbmQgaGVuY2Ugbm8gY29uZmxpY3Rcblx0XHRcdFx0bGV0IHNQYXRoSW5Db250ZXh0ID0gc1BhdGgucmVwbGFjZShzUGF0aCA9PT0gc01ldGFQYXRoID8gc01ldGFQYXRoIDogYCR7c01ldGFQYXRofS9gLCBcIlwiKTtcblx0XHRcdFx0c1BhdGhJbkNvbnRleHQgPSAoc1BhdGhJbkNvbnRleHQgPT09IFwiXCIgPyBzUGF0aEluQ29udGV4dCA6IGAke3NQYXRoSW5Db250ZXh0fS9gKSArIHNEaXN0aW5jdEtleTtcblx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlc1tzRGlzdGluY3RLZXldID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGhJbkNvbnRleHQpO1xuXHRcdFx0XHRvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzRGlzdGluY3RLZXldID0gYCR7c01ldGFQYXRofS8ke3NQYXRoSW5Db250ZXh0fWBcblx0XHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5qb2luKFwiLlwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gMy4gUmVtb3ZlIGFsbCBOYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRmb3IgKGNvbnN0IHNQcm9wZXJ0eSBpbiBvU2VtYW50aWNBdHRyaWJ1dGVzKSB7XG5cdFx0XHRpZiAob1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldICE9PSBudWxsICYmIHR5cGVvZiBvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0ZGVsZXRlIG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljQXR0cmlidXRlczogb1NlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdHByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IG9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTmF2aWdhdGlvbiBtb2RlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBtb2RlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0Z2V0TmF2aWdhdGlvbk1vZGUoKTogdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFsbG93cyBmb3IgbmF2aWdhdGlvbiB0byBhIGdpdmVuIGludGVudCAoU2VtYW50aWNPYmplY3QtQWN0aW9uKSB3aXRoIHRoZSBwcm92aWRlZCBjb250ZXh0LCB1c2luZyBhIGRpYWxvZyB0aGF0IHNob3dzIHRoZSBjb250ZXh0cyB3aGljaCBjYW5ub3QgYmUgcGFzc2VkXG5cdCAqIElmIHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIHByb3ZpZGVkLCB0aGlzIHNldHRpbmcgaXMgYWxzbyBhcHBsaWVkIHRvIHRoZSBzZWxlY3Rpb24gdmFyaWFudCBhZnRlciBhZGFwdGF0aW9uIGJ5IGEgY29uc3VtZXIuXG5cdCAqIFRoaXMgc2V0dGluZyBhbHNvIHJlbW92ZXMgYW55IHRlY2huaWNhbCBwYXJhbWV0ZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGFuIGlucGxhY2Ugb3IgZXhwbGFjZSBuYXZpZ2F0aW9uIHNob3VsZCB0YWtlIHBsYWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdCBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIHNBY3Rpb24gIEFjdGlvbiBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIFttTmF2aWdhdGlvblBhcmFtZXRlcnNdIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBleHRlcm5hbCBuYXZpZ2F0aW9uXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKFxuXHRcdHNTZW1hbnRpY09iamVjdDogc3RyaW5nLFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRsZXQgc2hvdWxkQ29udGludWUgPSB0cnVlO1xuXHRcdGlmIChtTmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5vdEFwcGxpY2FibGVDb250ZXh0cyAmJiBtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzPy5sZW5ndGggPj0gMSkge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChtTmF2aWdhdGlvblBhcmFtZXRlcnMubm90QXBwbGljYWJsZUNvbnRleHRzWzBdLmdldFBhdGgoKSk7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RW50aXR5U2V0PihlbnRpdHlTZXRQYXRoKS50YXJnZXQhO1xuXHRcdFx0Ly8gU2hvdyB0aGUgY29udGV4dHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgYW5kIHdpbGwgbm90IHRoZXJlZm9yZSBiZSBwcm9jZXNzZWRcblx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVDb250ZXh0c0RpYWxvZyA9IG5ldyBOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyh7XG5cdFx0XHRcdHRpdGxlOiBcIlwiLFxuXHRcdFx0XHRlbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDogZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLmdldFZpZXcoKSksXG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0czogbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0c1xuXHRcdFx0fSk7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMubmF2aWdhdGlvbkNvbnRleHRzID0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzLmFwcGxpY2FibGVDb250ZXh0cztcblx0XHRcdHNob3VsZENvbnRpbnVlID0gYXdhaXQgbm90QXBwbGljYWJsZUNvbnRleHRzRGlhbG9nLm9wZW4odGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0XHRpZiAoc2hvdWxkQ29udGludWUpIHtcblx0XHRcdHRoaXMubmF2aWdhdGUoc1NlbWFudGljT2JqZWN0LCBzQWN0aW9uLCBtTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdF9yZW1vdmVUZWNobmljYWxQYXJhbWV0ZXJzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLmNvbnRleHRcIik7XG5cdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKFwiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiKTtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJTQVBfX01lc3NhZ2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXRlZCBFbnRpdHkgc2V0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBFbnRpdHkgc2V0IG5hbWVcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0Z2V0RW50aXR5U2V0KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0ITtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHNlbnNpdGl2ZSBkYXRhIGZyb20gdGhlIHNlbWFudGljIGF0dHJpYnV0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIENvbnRleHQgZGF0YVxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIE1ldGEgcGF0aCB0byByZWFjaCB0aGUgZW50aXR5U2V0IGluIHRoZSBNZXRhTW9kZWxcblx0ICogQHJldHVybnMgQXJyYXkgb2Ygc2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKi9cblx0Ly8gVE8tRE8gYWRkIHVuaXQgdGVzdHMgZm9yIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHF1bml0LlxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVtb3ZlU2Vuc2l0aXZlRGF0YTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10+KG9BdHRyaWJ1dGVzOiBULCBzTWV0YVBhdGg6IHN0cmluZyk6IFQge1xuXHRcdGlmIChvQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgeyB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcyB9ID0gdGhpcy5fZ2V0QWdncmVnYXRlcyhcblx0XHRcdFx0c01ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZXMpO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KG9BdHRyaWJ1dGVzKSAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGlmIChvQXR0cmlidXRlc1tlbGVtZW50XSAmJiB0eXBlb2Ygb0F0dHJpYnV0ZXNbZWxlbWVudF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShvQXR0cmlidXRlc1tlbGVtZW50XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c01ldGFQYXRofS8ke2VsZW1lbnR9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbGVtZW50LmluY2x1ZGVzKFwiQG9kYXRhLnR5cGVcIikpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9kZWxldGVBZ2dyZWdhdGVzKFsuLi50cmFuc0FnZ3JlZ2F0aW9ucywgLi4uY3VzdG9tQWdncmVnYXRlc10sIGVsZW1lbnQsIG9BdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRjb25zdCBhUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRoaXMuX2dldFByb3BlcnR5QW5ub3RhdGlvbnMoZWxlbWVudCwgc01ldGFQYXRoLCBvQXR0cmlidXRlcywgdGhpcy5fb01ldGFNb2RlbCk7XG5cdFx0XHRcdFx0aWYgKGFQcm9wZXJ0eUFubm90YXRpb25zKSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLlBlcnNvbmFsRGF0YT8uSXNQb3RlbnRpYWxseVNlbnNpdGl2ZSB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucy5VST8uRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dCB8fFxuXHRcdFx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucy5BbmFseXRpY3M/Lk1lYXN1cmVcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbZWxlbWVudF07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBhUHJvcGVydHlBbm5vdGF0aW9ucy5Db21tb24uRmllbGRDb250cm9sIGFzIHVua25vd24gYXMge1xuXHRcdFx0XHRcdFx0XHRcdCRFbnVtTWVtYmVyPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdCRQYXRoPzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0KG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXSAmJiBvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0uc3BsaXQoXCIvXCIpWzFdID09PSBcIkluYXBwbGljYWJsZVwiKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChvRmllbGRDb250cm9sW1wiJFBhdGhcIl0gJiYgdGhpcy5faXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSwgb0F0dHJpYnV0ZXMpKVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbZWxlbWVudF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9BdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgYXR0cmlidXRlIGZyb20gbmF2aWdhdGlvbiBkYXRhIGlmIGl0IGlzIGEgbWVhc3VyZS5cblx0ICpcblx0ICogQHBhcmFtIGFnZ3JlZ2F0ZXMgQXJyYXkgb2YgQWdncmVnYXRlc1xuXHQgKiBAcGFyYW0gc1Byb3AgQXR0cmlidXRlIG5hbWVcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzIFNlbWFudGljQXR0cmlidXRlc1xuXHQgKi9cblx0X2RlbGV0ZUFnZ3JlZ2F0ZXMoYWdncmVnYXRlczogc3RyaW5nW10gfCB1bmRlZmluZWQsIHNQcm9wOiBzdHJpbmcsIG9BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuXHRcdGlmIChhZ2dyZWdhdGVzICYmIGFnZ3JlZ2F0ZXMuaW5jbHVkZXMoc1Byb3ApKSB7XG5cdFx0XHRkZWxldGUgb0F0dHJpYnV0ZXNbc1Byb3BdO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBhbm5vdGF0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHNQcm9wXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9BdHRyaWJ1dGVzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIC0gVGhlIHByb3BlcnR5IGFubm90YXRpb25zXG5cdCAqL1xuXHRfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhcblx0XHRzUHJvcDogc3RyaW5nLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nLFxuXHRcdG9BdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG9BdHRyaWJ1dGVzW3NQcm9wXSAmJiBzTWV0YVBhdGggJiYgIXNNZXRhUGF0aC5pbmNsdWRlcyhcInVuZGVmaW5lZFwiKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NNZXRhUGF0aH0vJHtzUHJvcH1gKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGNvbnN0IG9GdWxsQ29udGV4dCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0NvbnRleHQpO1xuXHRcdFx0cmV0dXJuIG9GdWxsQ29udGV4dD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucyBhcyBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBhZ2dyZWdhdGVzIHBhcnQgb2YgdGhlIEVudGl0eVNldCBvciBFbnRpdHlUeXBlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc01ldGFQYXRoXG5cdCAqIEBwYXJhbSBvVmlld1xuXHQgKiBAcGFyYW0gb0RpYWdub3N0aWNzXG5cdCAqIEByZXR1cm5zIC0gVGhlIGFnZ3JlZ2F0ZXNcblx0ICovXG5cdF9nZXRBZ2dyZWdhdGVzKFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nLFxuXHRcdG9WaWV3OiBGRVZpZXcsXG5cdFx0b0RpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuXHQpOiB7IHRyYW5zQWdncmVnYXRpb25zOiBzdHJpbmdbXTsgY3VzdG9tQWdncmVnYXRlczogc3RyaW5nW10gfSB7XG5cdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IHRoaXMuX2dldENvbnZlcnRlckNvbnRleHQoc01ldGFQYXRoLCBvVmlldywgb0RpYWdub3N0aWNzKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgaXNBbmFseXRpY3NTdXBwb3J0ZWQgPSBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpO1xuXHRcdGxldCB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcztcblx0XHRpZiAoaXNBbmFseXRpY3NTdXBwb3J0ZWQpIHtcblx0XHRcdHRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0XHRcdGlmICh0cmFuc0FnZ3JlZ2F0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyYW5zQWdncmVnYXRpb25zID0gdHJhbnNBZ2dyZWdhdGlvbnMubWFwKCh0cmFuc0FnZzogeyBOYW1lPzogc3RyaW5nOyBWYWx1ZT86IHN0cmluZyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRyYW5zQWdnLk5hbWUgfHwgdHJhbnNBZ2cuVmFsdWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdFx0XHRpZiAoY3VzdG9tQWdncmVnYXRlcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBjdXN0b21BZ2dyZWdhdGVzLm1hcCgoY3VzdG9tQWdncmVnYXRlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN1c3RvbUFnZ3JlZ2F0ZS5xdWFsaWZpZXI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0cmFuc0FnZ3JlZ2F0aW9ucyA9IHRyYW5zQWdncmVnYXRpb25zID8gdHJhbnNBZ2dyZWdhdGlvbnMgOiBbXTtcblx0XHRjdXN0b21BZ2dyZWdhdGVzID0gY3VzdG9tQWdncmVnYXRlcyA/IChjdXN0b21BZ2dyZWdhdGVzIGFzIHN0cmluZ1tdKSA6IFtdO1xuXHRcdHJldHVybiB7IHRyYW5zQWdncmVnYXRpb25zLCBjdXN0b21BZ2dyZWdhdGVzIH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBjb252ZXJ0ZXJDb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc01ldGFQYXRoXG5cdCAqIEBwYXJhbSBvVmlld1xuXHQgKiBAcGFyYW0gb0RpYWdub3N0aWNzXG5cdCAqIEByZXR1cm5zIC0gQ29udmVydGVyQ29udGV4dFxuXHQgKi9cblx0X2dldENvbnZlcnRlckNvbnRleHQoc01ldGFQYXRoOiBzdHJpbmcsIG9WaWV3OiBGRVZpZXcsIG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3MpOiBDb252ZXJ0ZXJDb250ZXh0IHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdGxldCBzRW50aXR5U2V0ID0gb1ZpZXdEYXRhLmVudGl0eVNldDtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvVmlld0RhdGEuY29udGV4dFBhdGg7XG5cdFx0aWYgKHNDb250ZXh0UGF0aCAmJiAoIXNFbnRpdHlTZXQgfHwgc0VudGl0eVNldC5pbmNsdWRlcyhcIi9cIikpKSB7XG5cdFx0XHRzRW50aXR5U2V0ID0gb1ZpZXdEYXRhPy5mdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpWzFdO1xuXHRcdH1cblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgoc01ldGFQYXRoLCBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLCBzRW50aXR5U2V0ISwgb0RpYWdub3N0aWNzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBwYXRoLWJhc2VkIEZpZWxkQ29udHJvbCBldmFsdWF0ZXMgdG8gaW5hcHBsaWNhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ZpZWxkQ29udHJvbFBhdGggRmllbGQgY29udHJvbCBwYXRoXG5cdCAqIEBwYXJhbSBvQXR0cmlidXRlIFNlbWFudGljQXR0cmlidXRlc1xuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaW5hcHBsaWNhYmxlXG5cdCAqL1xuXHRfaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKHNGaWVsZENvbnRyb2xQYXRoOiBzdHJpbmcsIG9BdHRyaWJ1dGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG5cdFx0bGV0IGJJbmFwcGxpY2FibGUgPSBmYWxzZTtcblx0XHRjb25zdCBhUGFydHMgPSBzRmllbGRDb250cm9sUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0Ly8gc2Vuc2l0aXZlIGRhdGEgaXMgcmVtb3ZlZCBvbmx5IGlmIHRoZSBwYXRoIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQuXG5cdFx0aWYgKGFQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRiSW5hcHBsaWNhYmxlID0gISEoXG5cdFx0XHRcdG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSAmJlxuXHRcdFx0XHQob0F0dHJpYnV0ZVthUGFydHNbMF1dIGFzIG9iamVjdCkuaGFzT3duUHJvcGVydHkoYVBhcnRzWzFdKSAmJlxuXHRcdFx0XHQob0F0dHJpYnV0ZVthUGFydHNbMF1dIGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pW2FQYXJ0c1sxXV0gPT09IDBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW3NGaWVsZENvbnRyb2xQYXRoXSA9PT0gMDtcblx0XHR9XG5cdFx0cmV0dXJuIGJJbmFwcGxpY2FibGU7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJlcGxhY2UgTG9jYWwgUHJvcGVydGllcyB3aXRoIFNlbWFudGljIE9iamVjdCBtYXBwaW5ncy5cblx0ICpcblx0ICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50IFNlbGVjdGlvblZhcmlhbnQgY29uc2lzdGluZyBvZiBmaWx0ZXJiYXIsIFRhYmxlIGFuZCBQYWdlIENvbnRleHRcblx0ICogQHBhcmFtIHZNYXBwaW5ncyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ1xuXHQgKiBAcmV0dXJucyAtIE1vZGlmaWVkIFNlbGVjdGlvblZhcmlhbnQgd2l0aCBMb2NhbFByb3BlcnR5IHJlcGxhY2VkIHdpdGggU2VtYW50aWNPYmplY3RQcm9wZXJ0aWVzLlxuXHQgKi9cblx0X2FwcGx5U2VtYW50aWNPYmplY3RNYXBwaW5ncyhvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgdk1hcHBpbmdzOiBvYmplY3QgfCBzdHJpbmcpOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBvTWFwcGluZ3MgPSB0eXBlb2Ygdk1hcHBpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2TWFwcGluZ3MpIDogdk1hcHBpbmdzO1xuXHRcdGZvciAoY29uc3QgaXRlbSBvZiBvTWFwcGluZ3MpIHtcblx0XHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdFx0KGl0ZW1bXCJMb2NhbFByb3BlcnR5XCJdICYmIGl0ZW1bXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdFx0KGl0ZW1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl0gJiYgaXRlbVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdFx0aXRlbVtcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0gfHwgaXRlbVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb24gPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0aWYgKG9TZWxlY3RPcHRpb24pIHtcblx0XHRcdFx0Ly9DcmVhdGUgYSBuZXcgU2VsZWN0T3B0aW9uIHdpdGggc1NlbWFudGljT2JqZWN0UHJvcGVydHkgYXMgdGhlIHByb3BlcnR5IE5hbWUgYW5kIHJlbW92ZSB0aGUgb2xkZXIgb25lXG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIHRvIHRoZSBoaXN0b3J5IG9iamVjdC5cblx0ICovXG5cdHByb3RlY3RlZCBzdG9yZUZvY3VzSW5mb0luSGlzdG9yeSgpOiB2b2lkIHtcblx0XHRsZXQgZm9jdXNJbmZvID0gbnVsbDtcblx0XHRjb25zdCBmb2N1c0NvbnRyb2wgPSBFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKTtcblx0XHRjb25zdCBmb2N1c0NvbnRyb2xJZCA9IGZvY3VzQ29udHJvbD8uZ2V0SWQoKTtcblx0XHRjb25zdCBmb2N1c01EQ1RhYmxlID0gZm9jdXNDb250cm9sICYmIEZQTUhlbHBlci5nZXRNZGNUYWJsZShmb2N1c0NvbnRyb2wpO1xuXHRcdGlmIChmb2N1c0NvbnRyb2w/LmlzQShcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0Zm9jdXNJbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIkNvbnRyb2xcIixcblx0XHRcdFx0Y29udHJvbElkOiBmb2N1c0NvbnRyb2xJZFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKGZvY3VzTURDVGFibGUpIHtcblx0XHRcdGZvY3VzSW5mbyA9IHtcblx0XHRcdFx0dHlwZTogXCJSb3dcIixcblx0XHRcdFx0dGFibGVJZDogZm9jdXNNRENUYWJsZS5nZXRJZCgpLFxuXHRcdFx0XHRjb250ZXh0UGF0aEZvY3VzOiBmb2N1c0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHt9LCBoaXN0b3J5LnN0YXRlLCB7IGZvY3VzSW5mbzogZm9jdXNJbmZvIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYW4gT3V0Ym91bmQgcHJvdmlkZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc091dGJvdW5kIElkZW50aWZpZXIgdG8gbG9jYXRpb24gdGhlIG91dGJvdW5kIGluIHRoZSBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9wdGlvbmFsIG1hcCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudFxuXHQgKiBAc2luY2UgMS44Ni4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGVPdXRib3VuZChzT3V0Ym91bmQ6IHN0cmluZywgbU5hdmlnYXRpb25QYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IHVua25vd25bXT4pOiB2b2lkIHtcblx0XHR0aGlzLnN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5KCk7XG5cdFx0bGV0IGFOYXZQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdG9PdXRib3VuZCA9IG9NYW5pZmVzdEVudHJ5LmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzPy5bc091dGJvdW5kXTtcblx0XHRpZiAoIW9PdXRib3VuZCkge1xuXHRcdFx0TG9nLmVycm9yKFwiT3V0Ym91bmQgaXMgbm90IGRlZmluZWQgaW4gbWFuaWZlc3QhIVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0c0FjdGlvbiA9IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRvdXRib3VuZFBhcmFtcyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzICYmIHRoaXMuZ2V0T3V0Ym91bmRQYXJhbXMob091dGJvdW5kLnBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0YU5hdlBhcmFtcyA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb25QYXJhbWV0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRsZXQgb1BhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRcdFx0Y29uc3QgbmF2UGFyYW1ldGVyVmFsdWUgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMhW2tleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG5hdlBhcmFtZXRlclZhbHVlKSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBuYXZQYXJhbWV0ZXJWYWx1ZSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0b1BhcmFtc1trZXldID0gaXRlbTtcblx0XHRcdFx0XHRcdGFOYXZQYXJhbXM/LnB1c2gob1BhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9QYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRvUGFyYW1zW2tleV0gPSBuYXZQYXJhbWV0ZXJWYWx1ZSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0YU5hdlBhcmFtcz8ucHVzaChvUGFyYW1zKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhTmF2UGFyYW1zIHx8IG91dGJvdW5kUGFyYW1zKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czoge1xuXHRcdFx0XHRcdGRhdGE6IGFOYXZQYXJhbXMgfHwgb3V0Ym91bmRQYXJhbXNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoc1NlbWFudGljT2JqZWN0LCBzQWN0aW9uLCBtTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhcHBseSBvdXRib3VuZCBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uVmFyaWFudCBjb25zaXN0aW5nIG9mIGEgZmlsdGVyIGJhciwgYSB0YWJsZSwgYW5kIGEgcGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSB2T3V0Ym91bmRQYXJhbXMgT3V0Ym91bmQgUHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHQgKiBAcmV0dXJucyAtIFRoZSBtb2RpZmllZCBTZWxlY3Rpb25WYXJpYW50IHdpdGggb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICovXG5cdF9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKHZPdXRib3VuZFBhcmFtcyk7XG5cdFx0Y29uc3QgYVNlbGVjdFByb3BlcnRpZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRpZiAoIWFTZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKGtleSwgXCJJXCIsIFwiRVFcIiwgdk91dGJvdW5kUGFyYW1zW2tleV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBvdXRib3VuZCBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb091dGJvdW5kUGFyYW1zIFBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgb3V0Ym91bmRzLiBPbmx5IFwicGxhaW5cIiBpcyBzdXBwb3J0ZWRcblx0ICogQHJldHVybnMgUGFyYW1ldGVycyB3aXRoIHRoZSBrZXktVmFsdWUgcGFpclxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldE91dGJvdW5kUGFyYW1zKG9PdXRib3VuZFBhcmFtczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5UGFyYW1ldGVyPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXHRcdGNvbnN0IG9QYXJhbXNNYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0aWYgKG9PdXRib3VuZFBhcmFtcykge1xuXHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmRQYXJhbXMpIHx8IFtdO1xuXHRcdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZFBhcmFtc1trZXldO1xuXHRcdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwicGxhaW5cIikge1xuXHRcdFx0XHRcdFx0aWYgKCFvUGFyYW1zTWFwcGluZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNNYXBwaW5nW2tleV0gPSBvTWFwcGluZy52YWx1ZS52YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtc01hcHBpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2xsZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdk1vZGUgT3BlbnMgaW4gbmV3IHRhYiBvciB3aW5kb3cgd2hlbiBzZXQgdG8gJ2V4cGxhY2UnLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdIHwgdW5kZWZpbmVkLFxuXHRcdHNDcmVhdGVQYXRoOiBzdHJpbmcsXG5cdFx0bmF2TW9kZT86IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvT3V0Ym91bmRzID0gb0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKTtcblx0XHRjb25zdCBvRGlzcGxheU91dGJvdW5kID0gb091dGJvdW5kc1tzT3V0Ym91bmRUYXJnZXRdO1xuXHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cdFx0aWYgKG9EaXNwbGF5T3V0Ym91bmQgJiYgb0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvRGlzcGxheU91dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0Y29uc3Qgb1JlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHtcblx0XHRcdFx0aW50ZW50czoge31cblx0XHRcdH07XG5cdFx0XHRjb25zdCBvRGVmYXVsdFJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgPSB7fTtcblx0XHRcdGxldCBzTWV0YVBhdGg7XG5cdFx0XHRsZXQgbmF2aWdhdGlvbkNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob0NvbnRleHQpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzID0gb0NvbnRleHQ7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0WzBdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChvQ29udGV4dC5pc0EgJiYgb0NvbnRleHQuaXNBPE9EYXRhVjRDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHMgPSBbb0NvbnRleHRdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9EZWZhdWx0UmVmcmVzaFN0cmF0ZWd5W3NNZXRhUGF0aF0gPSBSZWZyZXNoU3RyYXRlZ3lUeXBlLlNlbGY7XG5cdFx0XHRcdG9SZWZyZXNoU3RyYXRlZ2llcy5fZmVEZWZhdWx0ID0gb0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3k7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzQ3JlYXRlUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzS2V5ID0gYCR7b0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdH0tJHtvRGlzcGxheU91dGJvdW5kLmFjdGlvbn1gO1xuXHRcdFx0XHRvUmVmcmVzaFN0cmF0ZWdpZXMuaW50ZW50cyFbc0tleV0gPSB7fTtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHMhW3NLZXldIVtzQ3JlYXRlUGF0aF0gPSBSZWZyZXNoU3RyYXRlZ3lUeXBlLlNlbGY7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0Rpc3BsYXlPdXRib3VuZCAmJiBvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyAmJiB0aGlzLmdldE91dGJvdW5kUGFyYW1zKG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3QsIG9EaXNwbGF5T3V0Ym91bmQuYWN0aW9uLCB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogbmF2aWdhdGlvbkNvbnRleHRzLFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llczogb1JlZnJlc2hTdHJhdGVnaWVzLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0bmF2TW9kZTogbmF2TW9kZVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vVE9ETzogY2hlY2sgd2h5IHJldHVybmluZyBhIHByb21pc2UgaXMgcmVxdWlyZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBvdXRib3VuZCB0YXJnZXQgJHtzT3V0Ym91bmRUYXJnZXR9IG5vdCBmb3VuZCBpbiBjcm9zcyBuYXZpZ2F0aW9uIGRlZmluaXRpb24gb2YgbWFuaWZlc3RgKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2VzcyB0aGUgc2VtYW50aWMgYXR0cmlidXRlcyBiYXNlZCBvbiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEBwYXJhbSBzZW1hbnRpY0F0dHJpYnV0ZXMgU2VtYW50aWMgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGF0aHNUb1JldGFpbiBOYXZpZ2F0aW9uIHByb3BlcnRpZXMgdG8gYmUgcmV0YWluZWQgaW4gY2FzZSBvZiBsaW5rc1xuXHQgKiBAcmV0dXJucyBQcm9jZXNzZWQgc2VtYW50aWMgYXR0cmlidXRlc1xuXHQgKi9cblx0cHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyhjb250ZXh0OiBDb250ZXh0LCBzZW1hbnRpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwYXRoc1RvUmV0YWluPzogQXJyYXk8c3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBiS2VlcE5hdlByb3BlcnRpZXMgPSB0aGlzLmtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24oKTtcblx0XHRpZiAoIWJLZWVwTmF2UHJvcGVydGllcykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U2VtYW50aWNBdHRyaWJ1dGVzV2l0aG91dE5hdmlnYXRpb25Qcm9wZXJ0aWVzKGNvbnRleHQsIHBhdGhzVG9SZXRhaW4pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc2VtYW50aWNBdHRyaWJ1dGVzO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaGFzIHRvIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGhhcyB0byBiZSBjb25zaWRlcmVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0a2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpOiBib29sZWFuIHtcblx0XHRsZXQgYktlZXBOYXZQcm9wZXJ0aWVzID0gZmFsc2U7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0XHRiS2VlcE5hdlByb3BlcnRpZXMgPSBtYW5pZmVzdD8uYXBwPy5jb25zaWRlck5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIHx8IGZhbHNlO1xuXHRcdHJldHVybiBiS2VlcE5hdlByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHNlbWFudGljIGF0dHJpYnV0ZXMgZnJvbSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEBwYXJhbSBwYXRoc1RvUmV0YWluIE5hdmlnYXRpb24gcHJvcGVydGllcyB0byBiZSByZXRhaW5lZCBpbiBjYXNlIG9mIGxpbmtzXG5cdCAqIEByZXR1cm5zIFNlbWFudGljIEF0dHJpYnV0ZXNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMoY29udGV4dDogQ29udGV4dCwgcGF0aHNUb1JldGFpbj86IEFycmF5PHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0Y29udGV4dFBhdGggPSBjb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHRQYXRoKSxcblx0XHRcdHJldCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgbmF2UHJvcGVydGllcyA9IHRoaXMuZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZShtZXRhTW9kZWwsIG1ldGFQYXRoKTtcblx0XHRpZiAobmF2UHJvcGVydGllcyAmJiBuYXZQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdG5hdlByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5hdlByb3BOYW1lID0gbmF2UHJvcC5uYW1lO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwYXRoc1RvUmV0YWluKSAmJiBwYXRoc1RvUmV0YWluLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHQvLyBXZSBjb25zaWRlciAxLjEgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHdoaWNoIGFyZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHNlbWFudGljIGxpbmtzIHRvIGJlIHBhc3NlZCBhcyBwYXJ0IG9mIGNvbnRleHRcblx0XHRcdFx0XHRpZiAocmV0Lmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSAmJiByZXRbbmF2UHJvcE5hbWVdKSB7XG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhyZXRbbmF2UHJvcE5hbWVdKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgJHtuYXZQcm9wTmFtZX0vJHtrZXl9YDtcblx0XHRcdFx0XHRcdFx0aWYgKCFwYXRoc1RvUmV0YWluPy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpICYmIHJldFtuYXZQcm9wTmFtZV0uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSByZXRbbmF2UHJvcE5hbWVdW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKHJldFtuYXZQcm9wTmFtZV0pLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHJldC5oYXNPd25Qcm9wZXJ0eShuYXZQcm9wTmFtZSkpIHtcblx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllcyBmcm9tIGVudGl0eVR5cGUgdXNpbmcgbWV0YW1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gbWV0YVBhdGggTWV0YVBhdGhcblx0ICogQHJldHVybnMgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG1ldGFQYXRoOiBzdHJpbmcpOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSB7XG5cdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RW50aXR5VHlwZT4oYCR7bWV0YVBhdGh9L2ApLnRhcmdldCE7XG5cdFx0cmV0dXJuIGVudGl0eVR5cGU/Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBLElBTU1BLDZCQUE2QixXQURsQ0MsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLFVBWWpGQyxjQUFjLEVBQUUsVUFrQ2hCQyxlQUFlLEVBQUUsVUFDakJDLGNBQWMsRUFBRSxVQTZLaEJELGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFVBb0hoQkQsZUFBZSxFQUFFLFVBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsVUFjckNKLGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBc0NoQkksZ0JB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
|
|
@@ -285,7 +285,7 @@ class InternalIntentBasedNavigation extends ControllerExtension {
|
|
|
285
285
|
Function.prototype,
|
|
286
286
|
this.base.getView().getBindingContext(),
|
|
287
287
|
this.base.getView().getController(),
|
|
288
|
-
|
|
288
|
+
false,
|
|
289
289
|
draft.NavigationType.ForwardNavigation
|
|
290
290
|
);
|
|
291
291
|
} else {
|