From 818bc37f3005c2455e55f83d9a4e3ac6e5fb9dc3 Mon Sep 17 00:00:00 2001 From: hormelcookies Date: Sun, 13 Sep 2020 23:49:52 -0700 Subject: [PATCH] Replace Dark Discord with a known good version --- BetterDiscordApp/dist/index.js | 6 ++--- BetterDiscordApp/dist/index.min.js.map | 2 +- LightcordApi/js/main.js | 2 +- LightcordApi/js/main.min.js.map | 2 +- .../core/app/BetterDiscord/index.js | 23 ++++++++++++++++++- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/BetterDiscordApp/dist/index.js b/BetterDiscordApp/dist/index.js index eb95871..645f607 100644 --- a/BetterDiscordApp/dist/index.js +++ b/BetterDiscordApp/dist/index.js @@ -4463,12 +4463,12 @@ let emojiSearch = BDModules.get(e => e.default && e.default.getDisambiguatedEmoj constructor(props){ super(props) } - render(){ + render(){ if(!userModule)userModule = BDModules.get(e => e.default && e.default.getCurrentUser)[0] if(!userModule)return React.createElement(classs, this.props) let user = userModule.default.getCurrentUser() if(!user.hasPremiumSubscription)return React.createElement(classs, this.props) - return React.createElement(classs, Object.assign({}, this.props, { + return React.createElement(classs, Object.assign({}, this.props, { emojiDescriptors: this.props.emojiDescriptors.map(e => { e.isDisabled = false }) @@ -12084,4 +12084,4 @@ module.exports = require("path"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0xheWVycy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3BsdWdpbkNlcnRpZmllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luTW9kdWxlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wb3BvdXRXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvYnVnX2h1bnRlci5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvY2lyY3VzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9zZXJ2ZXJDYXJkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcmVsb2FkSWNvbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NlY3Rpb25lZFNldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZXR0aW5nc0dyb3VwLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJTZXBhcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1vZHVsZVwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJub2RlLWZldGNoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInBhdGhcIiJdLCJuYW1lcyI6WyJtaW5pbXVtRGlzY29yZFZlcnNpb24iLCJjdXJyZW50RGlzY29yZFZlcnNpb24iLCJ3aW5kb3ciLCJEaXNjb3JkTmF0aXZlIiwicmVtb3RlQXBwIiwiZ2V0VmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJiYmRWZXJzaW9uIiwiYmJkQ2hhbmdlbG9nIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwidGl0bGUiLCJ0eXBlIiwiaXRlbXMiLCJzZXR0aW5ncyIsImlkIiwiaW5mbyIsImltcGxlbWVudGVkIiwiaGlkZGVuIiwiY2F0IiwiY2F0ZWdvcnkiLCJleHBlcmltZW50YWwiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJkZWZhdWx0Q29va2llIiwic2V0dGluZ3NDb29raWUiLCJzZXR0aW5nc1JQQyIsImRlZmF1bHRSUEMiLCJEYXRlIiwibm93IiwibGlnaHRjb3JkU2V0dGluZ3MiLCJkZWZhdWx0TGlnaHRjb3JkU2V0dGluZ3MiLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIkxheWVycyIsImxheWVycyIsIkJldHRlckRpc2NvcmQiLCJpc0luamVjdGVkIiwicXVlcnlTZWxlY3RvciIsImluamVjdCIsImNsYXNzTmFtZUxheWVycyIsInJlbW92ZURhIiwidjIiLCJXZWJwYWNrTW9kdWxlcyIsImZpbmQiLCJsYXllciIsIlJlYWN0SW5zdGFuY2UiLCJBcGkiLCJGaW5kUmVhY3QiLCJyZW5kZXIiLCJjYWxsIiwiY2xhc3NMaXN0IiwicHJvcHMiLCJjaGlsZHJlbiIsInNwbGl0IiwicHVzaCIsImpvaW4iLCJmb3JFYWNoIiwiZm9yY2VVcGRhdGUiLCJjcmVhdGVMYXllciIsInV1aWR2NCIsImxheSIsImluZGV4IiwiZmluZEluZGV4Iiwic3BsaWNlIiwicmVtb3ZlIiwiTGF5ZXJNb2R1bGVzIiwiTGF5ZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFuaW1hdGlvbiIsIm1vZHVsZXMiLCJWYWx1ZSIsImdldExheWVyIiwia2V5ZG93biIsIndoaWNoIiwiZGl2IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29tcG9uZW50RGlkTW91bnQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbEVudGVyIiwidGltaW5nIiwidG9WYWx1ZSIsImR1cmF0aW9uIiwiY29tcG9uZW50V2lsbExlYXZlIiwiaW50ZXJwb2xhdGlvbiIsImludGVycG9sYXRlIiwiaW5wdXRSYW5nZSIsIm91dHB1dFJhbmdlIiwic3R5bGUiLCJvcGFjaXR5IiwidHJhbnNmb3JtIiwic2NhbGUiLCJEaXYiLCJfX1NFQ1JFVF9FTU9USU9OX18iLCJjc3MiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwb3NpdGlvbiIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsImRpc3BsYXkiLCJvdmVyZmxvdyIsIldlYmtpdEJveE9yaWVudCIsIldlYmtpdEJveERpcmVjdGlvbiIsIm1zRmxleERpcmVjdGlvbiIsImZsZXhEaXJlY3Rpb24iLCJ6SW5kZXgiLCJwYWRkaW5nVG9wIiwiZmlsdGVyIiwiZGVmYXVsdFByb3BzIiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzIiwiZmluZE1vZHVsZUJ5UHJvdG90eXBlcyIsInByb3RvcyIsImZpbmRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsImZpbmRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJqUXVlcnkiLCJFbGVtZW50IiwibG9hZERhdGEiLCJwbHVnaW5OYW1lIiwiZ2V0UGx1Z2luRGF0YSIsImdldERhdGEiLCJzYXZlRGF0YSIsInNldFBsdWdpbkRhdGEiLCJzZXREYXRhIiwiZGVsZXRlRGF0YSIsImRlbGV0ZVBsdWdpbkRhdGEiLCJ3aGF0IiwibWV0aG9kTmFtZSIsIm9uUmVtb3ZlZCIsImNhbGxiYWNrIiwic3VwcHJlc3NFcnJvcnMiLCJtZXRob2QiLCJ0ZXN0SlNPTiIsImlzUGx1Z2luRW5hYmxlZCIsImlzVGhlbWVFbmFibGVkIiwiaXNTZXR0aW5nRW5hYmxlZCIsImVuYWJsZVNldHRpbmciLCJvbkNoYW5nZSIsImRpc2FibGVTZXR0aW5nIiwidG9nZ2xlU2V0dGluZyIsImdldEJERGF0YSIsInNldEJERGF0YSIsIm1ha2VBZGRvbkFQSSIsImNvb2tpZSIsImxpc3QiLCJtYW5hZ2VyIiwiQWRkb25BUEkiLCJmb2xkZXIiLCJpc0VuYWJsZWQiLCJ0b2dnbGUiLCJyZWxvYWQiLCJnZXRBbGwiLCJrIiwiYSIsIlBsdWdpbnMiLCJUaGVtZXMiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwiZ2V0U2VsZWN0b3JzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsImRlZmF1bHRDbGFzc05hbWUiLCJzZWxlY3RzIiwidXNlclNldHRpbmdzQWNjb3VudCIsInBheW1lbnRTb3VyY2VSb3ciLCJzdWJUZXh0IiwiZGVzY3JpcHRpb25XcmFwcGVyIiwidmlld0JvZHkiLCJ1c2VyU2V0dGluZ3NTZWN1cml0eSIsIkJsdXJQcml2YXRlIiwiZXJyb3IiLCJET01Ub29scyIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicGF0Y2hDbGFzc01vZHVsZXMiLCJub3JtYWxpemVFbGVtZW50IiwicGF0Y2hET01NZXRob2RzIiwibW9kdWxlIiwicGF0Y2hDbGFzc01vZHVsZSIsInVucGF0Y2hDbGFzc01vZHVsZSIsInNob3VsZElnbm9yZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwiQXJyYXkiLCJpc0FycmF5IiwiX19lc01vZHVsZSIsImJhc2VDbGFzc05hbWUiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsIm5vcm1hbENsYXNzIiwiY2FtZWxDYXNlIiwicyIsImkiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJjbGFzc2VzIiwiYyIsImNsZW4iLCJuZXdDbGFzcyIsImFkZCIsImNoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInRva2VuIiwidG9rZW5zIiwidCIsIkNvbG9yZWRUZXh0IiwiaW5qZWN0Q29sb3JlZFRleHQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIk1lc3NhZ2VDb21wb25lbnQiLCJiZWZvcmUiLCJtZXRob2RBcmd1bWVudHMiLCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50IiwibWVzc2FnZUNvbnRlbnQiLCJkaXNwbGF5TmFtZSIsIm9yaWdpbmFsVHlwZSIsIl9fb3JpZ2luYWxNZXRob2QiLCJyb2xlQ29sb3IiLCJjb2xvclN0cmluZyIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZWxlbSIsInNldFByb3BlcnR5IiwicGF0aCIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJyZXNvbHZlIiwiZWxlY3Ryb24iLCJzZW5kU3luYyIsIk1ldGFFcnJvciIsIm9yaWdpbmFsSlNSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJvcmlnaW5hbENTU1JlcXVpcmUiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJhZGRvbkNhY2hlIiwidGltZUNhY2hlIiwid2F0Y2hlcnMiLCJwYXRjaEV4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsInBsdWdpbnNGb2xkZXIiLCJfcGx1Z2luc0ZvbGRlciIsInJlYWxwYXRoU3luYyIsImRhdGFQYXRoIiwidGhlbWVzRm9sZGVyIiwiX3RoZW1lc0ZvbGRlciIsImxvYWRBZGRvbkNlcnRpZmllckNhY2hlIiwiZGF0YVN0b3JlIiwiZ2V0U2V0dGluZ0dyb3VwIiwic2V0U2V0dGluZ0dyb3VwIiwiZW5jcnlwdFNldHRpbmdzQ2FjaGUiLCJKU09OIiwicGFyc2UiLCJkZWNyeXB0U2V0dGluZ3NDYWNoZSIsImhhc2giLCJyZXN1bHQiLCJzdXNwZWN0Iiwic2F2ZUFkZG9uQ2FjaGUiLCJzdHJpbmdpZnkiLCJ3YXRjaENvbnRlbnQiLCJjb250ZW50VHlwZSIsImlzUGx1Z2luIiwiYmFzZUZvbGRlciIsImZpbGVFbmRpbmciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsIlByb21pc2UiLCJyIiwic2V0VGltZW91dCIsInN0YXRTeW5jIiwiZXJyIiwiY29kZSIsInVubG9hZFBsdWdpbiIsInVubG9hZFRoZW1lIiwiaXNGaWxlIiwic3RhdHMiLCJtdGltZSIsImdldFRpbWUiLCJsb2FkUGx1Z2luIiwibG9hZFRoZW1lIiwicmVsb2FkUGx1Z2luIiwicmVsb2FkVGhlbWUiLCJ1bndhdGNoQ29udGVudCIsImNsb3NlIiwiZXh0cmFjdE1ldGEiLCJmaXJzdExpbmUiLCJoYXNPbGRNZXRhIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIm1ldGEiLCJyYXdNZXRhIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwicGFyc2VkIiwiZm9ybWF0IiwiYmxvY2siLCJvdXQiLCJmaWVsZCIsImFjY3VtIiwibGluZSIsImNoYXJBdCIsImwiLCJzdWJzdHIiLCJzZWxmIiwib3JpZ2luYWxSZXF1aXJlIiwicG9zc2libGVQYXRoIiwiYmFzZW5hbWUiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3RyaXBCT00iLCJhZGRlZCIsImF0aW1lTXMiLCJtb2RpZmllZCIsIm10aW1lTXMiLCJzaXplIiwiX2NvbXBpbGUiLCJkaWRFeHBvcnQiLCJpc0VtcHR5IiwiZXhwb3J0cyIsIm1ha2VQbGFjZWhvbGRlclBsdWdpbiIsImdldE5hbWUiLCJnZXRBdXRob3IiLCJnZXREZXNjcmlwdGlvbiIsInNvdXJjZSIsIndlYnNpdGUiLCJsb2FkQ29udGVudCIsInByb2Nlc3NGaWxlIiwidGltZXN0YW1wIiwiZmlsZSIsImhhcm0iLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInN0YWNrIiwidW5sb2FkQ29udGVudCIsImNhY2hlIiwiaXNMb2FkZWQiLCJyZWxvYWRDb250ZW50IiwiY2FudFVubG9hZCIsImxvYWROZXdDb250ZW50IiwiYmFzZWRpciIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJjb250ZW50TGlzdCIsInZhbHVlcyIsInJlbW92ZWQiLCJmIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJsb2FkUGx1Z2lucyIsImxvYWRUaGVtZXMiLCJjb25maWciLCJoYXNTdGFydGVkIiwiZmxhdCIsInZlcnNpb24iLCJFRCIsIldlYlNvY2tldCIsInBhdGNoQXR0cmlidXRlcyIsImluaXRTZXR0aW5ncyIsImNoZWNrRm9yR3VpbGRzIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVTZXR0aW5ncyIsImNvbnRlbnRNYW5hZ2VyIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJBbmNob3IiLCJlbnN1cmVFeHBvcnRlZCIsInRoZW4iLCJEaXNjb3JkVGFnIiwiRGlzY29yZFRhZ0NvbXAiLCJiYWRnZURpdiIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJzZWN0aW9uIiwicG9wZWQiLCJwb3AiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwibW9kYWwiLCJpbm5lciIsInJlc3BvbnNpdmVXaWR0aE1vYmlsZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwic29jaWFsTW9kdWxlMSIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwibGluayIsImNsYXNzTmFtZUNvbG9yTXV0ZWQiLCJzaXplcyIsImNsYXNzTmFtZVZlcnNpb25IYXNoIiwiY29sb3JNdXRlZCIsInNpemUzMiIsInZlcnNpb25IYXNoIiwiYnJhbmNoIiwiYnVpbGRJbmZvIiwiYWRkaXRpb25hbCIsInJlYWN0Iiwic2l6ZTEyIiwiY29tbWl0Iiwib3JpZ2luYWxWZXJzaW9ucyIsImdldEd1aWxkQ2xhc3NlcyIsImd1aWxkc1dyYXBwZXIiLCJmaW5kQnlQcm9wcyIsImd1aWxkcyIsInBpbGwiLCJndWlsZExpc3RJdGVtc1BhdGNoIiwiR3VpbGRDbGFzc2VzIiwibGlzdEl0ZW1DbGFzcyIsImJsb2JDbGFzcyIsInJlYWN0SW5zdGFuY2UiLCJHdWlsZENvbXBvbmVudCIsInJldHVybiIsInRoaXNPYmplY3QiLCJndWlsZERhdGEiLCJ1bnJlYWQiLCJzZWxlY3RlZCIsImF1ZGlvIiwidmlkZW8iLCJiYWRnZSIsImFuaW1hdGFibGUiLCJndWlsZFBpbGxQYXRjaCIsImd1aWxkUGlsbCIsImhvdmVyZWQiLCJndWlsZFNlcGFyYXRvclBhdGNoIiwiR3VpbGRzIiwiZ3VpbGRDb21wb25lbnRzIiwiR3VpbGRTZXBhcmF0b3IiLCJTZXBhcmF0b3IiLCJBdHRhY2htZW50UGF0Y2giLCJBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImdldE5lc3RlZFByb3AiLCJwYXRjaCIsIm1lc3NhZ2VIZWFkZXJQYXRjaCIsIk1lc3NhZ2VIZWFkZXIiLCJjaGF0IiwibmV4dFRpY2siLCJnZXRFbGVtZW50QnlJZCIsImNoaWxkTm9kZXMiLCJibG9ja0RpdiIsImRpc3RhbnQiLCJnZXRCYWRnZXMiLCJiYWRnZXMiLCJzdmciLCJ3aWR0aCIsInNjb3BlcyIsInNjb3BlIiwiY29tcG9uZW50IiwiZGl2MiIsInJlYWN0RG9tIiwibWVtYmVyTGlzdFBhdGNoIiwiTWVtYmVyTGlzdEl0ZW0iLCJyZW5kZXJEZWNvcmF0b3JzIiwidXBkYXRlSW5qZWN0b3IiLCJpbmplY3Rpb25QYXRoIiwicmVsZWFzZUNoYW5uZWwiLCJnbG9iYWxzIiwiYXBwIiwiZ2V0UmVsZWFzZUNoYW5uZWwiLCJlbnYiLCJBUFBEQVRBIiwiSE9NRSIsIlhER19DT05GSUdfSE9NRSIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwic2V0dGluZ3NGaWxlIiwidW5saW5rU3luYyIsIl9pbmplY3Rpb25QYXRoIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJzZWxlY3RvciIsImdldFNlbGVjdG9yIiwiY2xhc3NMYXllciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJtZW51IiwiYXR0YWNoIiwiY20iLCJxdWVyeSIsImNvbnRhaW5lciIsImxheWVyQ29udGFpbmVyIiwiY21XcmFwIiwic3R5bGVGbGV4aWJsZSIsImFjY29tbW9kYXRlU2Nyb2xsYmFyIiwiYXBwZW5kIiwiY2xpZW50WSIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJmdWxsUGF0aCIsImVsIiwibmFtZXMiLCJwYXJlbnROb2RlIiwidW5zaGlmdCIsIm93bmVyRG9jdW1lbnQiLCJ0YWdOYW1lIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsInJlcyIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwiXyIsInVwZGF0ZSIsInBlcmZvcm1hbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZSIsInRpbWVGcmFjdGlvbiIsInByb2dyZXNzIiwiUSIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0Iiwic29tZSIsIm4iLCJub2RlVHlwZSIsImJhc2VFbGVtZW50IiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwibWF0Y2hlcyIsInByZXZpb3VzIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsIm51bSIsInBhcmVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJhdHRyaWJ1dGUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0IiwidGV4dENvbnRlbnQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJvbiIsImV2ZW50IiwiZGVsZWdhdGUiLCJuYW1lc3BhY2UiLCJoYXNEZWxlZ2F0ZSIsImV2ZW50RnVuYyIsImNhbmNlbCIsIm5ld0NhbmNlbCIsIm9uY2UiLCJfX29mZkFsbCIsIm1hdGNoRmlsdGVyIiwibGlzdGVuZXIiLCJkZWZhdWx0RmlsdGVyIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsIm5vZGVzIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJ3cmFwIiwiZG9tV3JhcHBlciIsInJlc29sdmVFbGVtZW50IiwiRW1vamlSZWdleCIsIkN1c3RvbUVtb2ppTW9kdWxlIiwiQ3VzdG9tRW1vamkiLCJFbW9qaU1vZHVsZUFwaSIsImdldEN1c3RvbUVtb2ppQnlJZCIsIkF1dG9jb21wbGV0ZU1vZHVsZSIsIkF1dG9Db21wbGV0aW9uVGVtcGxhdGVzIiwiZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyIsIkVtb2ppTW9kdWxlUXVlcnkiLCJxdWVyeUVtb2ppUmVzdWx0cyIsIk1lc3NhZ2VzIiwiRU1PSklfTUFUQ0hJTkciLCJndWlsZE1vZHVsZSIsImdldEd1aWxkIiwiZ2V0R3VpbGRzIiwiaXNGZXRjaGluZyIsImVtb2ppU2VhcmNoIiwiZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uQ2xpY2siLCJvbkhvdmVyIiwiUiIsInByZWZpeCIsIlRpdGxlIiwiRW1vamlGaWx0ZXJNb2R1bGUiLCJpc0Vtb2ppRGlzYWJsZWQiLCJpc1VzYWJsZSIsInVzYWJsZSIsInN1cnJvZ2F0ZXMiLCJkaXZlcnNpdHkiLCJ1c2VTdGF0ZSIsInVzZUZvcmNlVXBkYXRlIiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJ0ZXN0cyIsInRocmVhdHMiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwibm9fY29tbWVudHMiLCJzY3JwdCIsImhhc2hUb1VybCIsImNoZWNrSGFzaCIsIl9fcGF0aCIsImlzRnJvbUxvYWRlciIsImNyeXB0byIsImFsbG9jIiwiY3JlYXRlUmVhZFN0cmVhbSIsImNodW5rIiwiY29uY2F0IiwiaGFzaFJlc3VsdCIsImRpZ2VzdCIsInJlbmRlclRvRWxlbWVudHMiLCJmbG93ZXJTdGFyTW9kdWxlIiwiZmxvd2VyU3RhckNvbnRhaW5lciIsImNoaWxkTW9kdWxlIiwiY2hpbGRDb250YWluZXIiLCJib3JkZXJDb2xvciIsIm5leHROb2RlIiwiY29uZmlybVRleHQiLCJkYW5nZXIiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsInRvb2x0aXBXcmFwIiwidmlld0JveCIsIngiLCJ5IiwibWFzayIsImZpbGwiLCJwb2ludGVyRXZlbnRzIiwib2ZmaWNpYWwiLCJzcGFuIiwiZmxvYXQiLCJmbG93ZXJTdGFyIiwiZ2V0S2V5ZWRBcnJheSIsImJ1ZmZlciIsImluc3RhbGxQYXRoIiwiY3Vyc29yIiwic3Ryb2tlIiwic2F2ZSIsIk9iamVjdFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2VNb2R1bGUiLCJsb2NhbFN0b3JhZ2UiLCJpbXBsIiwiYnRvYSIsInNldEludGVydmFsIiwic2FmZUpTT05QYXJzZSIsImF0b2IiLCJnZW5lcmF0ZUtleSIsImRlY2lwaGVyIiwiZGVjcnlwdGVkIiwiZmluYWwiLCJjaXBoZXIiLCJlbmNyeXB0ZWQiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsInJlbW90ZSIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJkZWxldGUiLCJlZGl0Iiwic2hlbGwiLCJvcGVuSXRlbSIsInVwZGF0ZVBsdWdpbkxpc3QiLCJzYXZlZCIsIm5ld01lc3NhZ2UiLCJvbk1lc3NhZ2UiLCJvblN3aXRjaCIsInBvcG91dFdpbmRvdyIsIndpbmRvd3MiLCJNYXAiLCJwb3BvdXRNb2R1bGUiLCJnZXRXaW5kb3ciLCJzZXRJbW1lZGlhdGUiLCJiZEV2ZW50cyIsInJlbW92ZVRoZW1lcyIsImFwcGx5VGhlbWVzIiwidGhlbWVOYW1lIiwidGhlbWUiLCJleGlzdGluZyIsInVuZXNjYXBlIiwicmVtb3ZlQXR0cmlidXRlIiwiVjJfUHVibGljU2VydmVycyIsIl9hcHBlbmRCdXR0b24iLCJWMkNfUHVibGljU2VydmVycyIsInJvb3RJZCIsImJ1dHRvbiIsImJ0biIsImNpcmNsZUJ1dHRvbk1hc2siLCJjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lciIsImRvd25sb2FkUHJvZ3Jlc3MiLCJ0dXRvcmlhbENvbnRhaW5lciIsImFkZEJ1dHRvbiIsImd1aWxkUGF0Y2giLCJHdWlsZExpc3QiLCJ3ZWJwYWNrTW9kdWxlcyIsIkd1aWxkTGlzdE9sZCIsInJlbW92ZUJ1dHRvbiIsIkJEU2lkZWJhckhlYWRlciIsIlB1cmVDb21wb25lbnQiLCJzaWRlYmFyQ29tcG9uZW50cyIsIkhlYWRlciIsIkl0ZW0iLCJjaGFuZ2Vsb2dCdXR0b24iLCJIaXN0b3J5IiwicmVuZGVyZWQiLCJpc0NsZWFyaW5nQ2FjaGUiLCJWMl9TZXR0aW5nc1BhbmVsIiwidXBkYXRlU2V0dGluZ3MiLCJzaWRlYmFyIiwiVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIiwicmVnaXN0ZXJDb21wb25lbnRzIiwicmVnaXN0ZXIiLCJtYWtlQ29tcG9uZW50IiwibGlnaHRjb3JkQ29tcG9uZW50IiwiUHJlc2VuY2VDb21wb25lbnQiLCJBY2NvdW50SW5mb3NDb21wb25lbnQiLCJBcGlQcmV2aWV3Q29tcG9uZW50IiwiY29yZUNvbXBvbmVudCIsImN1c3RvbUNzc0NvbXBvbmVudCIsInJlbmRlckFkZG9uUGFuZSIsImNvcmVTZXR0aW5ncyIsImdldFNldHRpbmdzIiwiY2F0ZWdvcmllcyIsIlNldCIsInNlY3Rpb25zIiwiUHJlc2VuY2VTZXR0aW5ncyIsImNoZWNrZWQiLCJwdWJsaWNTZXJ2ZXJzTW9kdWxlIiwidm9pY2VNb2RlIiwidGZIb3VyIiwiY29sb3JlZFRleHQiLCJkTW9kZSIsIlNldHRpbmdzIiwiZGV2TW9kZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImlwY1JlbmRlcmVyIiwiQW50aUFkRE0iLCJibHVyUHJpdmF0ZSIsImRpc2FibGVUeXBpbmciLCJhcHBTZXR0aW5ncyIsInJlbGF1bmNoIiwiY29yZSIsIk5vdGlmaWNhdGlvbnNVc2VTaGltIiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJjaG9pY2VzIiwiYWN0dWFsIiwiZ2VuZXJhbCIsIlNldHRpbmdTdWJUaXRsZSIsIkRyb3Bkb3duIiwic2VhcmNoYWJsZSIsImNsZWFyYWJsZSIsImludm9rZSIsImFyZ3YiLCJzZXNzaW9uIiwiY2xlYXJDYWNoZSIsIlYyQ19QcmVzZW5jZVNldHRpbmdzIiwiVjJDX0FjY291bnRJbmZvcyIsIkFwaVByZXZpZXciLCJDc3NFZGl0b3IiLCJDb250ZW50TGlzdCIsIm9yaWdpbmFsUmVuZGVyIiwiZW51bWVyYWJsZSIsIkNhcmRMaXN0IiwiU2V0dGluZ0NvbXBvbmVudCIsInBhbmVscyIsInBhbmVsIiwiZ2V0Q29tcG9uZW50IiwiTENpdGVtcyIsIkxDRGV2SXRlbXMiLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImZvcm1hdFN0cmluZyIsInN0cmluZyIsInJlcGxhY2VtZW50IiwiZXNjYXBlIiwicGFyYW1zIiwiaW5zdGVhZCIsInNpbGVudCIsImZvcmNlIiwib3JpZ01ldGhvZCIsImNhbmNlbGVkIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInRlbXBSZXQiLCJfX21vbmtleVBhdGNoZWQiLCJkaXNjb25uZWN0IiwiaGFzTm90aWNlIiwiZm9ybSIsInRvYXN0V3JhcHBlciIsImljb24iLCJ0aW1lb3V0IiwidG9hc3RFbGVtIiwiaW5uZXJUZXh0IiwibW9kYWxNb2R1bGUiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsInRhYnMiLCJNb2RhbFN0YWNrIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIlRleHRFbGVtZW50IiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJlbnRyeSIsIm1hcmdpbiIsInJlbmRlckhlYWRlciIsIkNoaWxkIiwiZ3JvdyIsInNocmluayIsInRhZyIsIlRhZ3MiLCJINCIsIlNpemVzIiwiU01BTEwiLCJDb2xvcnMiLCJTVEFOREFSRCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3JDbGFzc2VzIiwiYW5jaG9yIiwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlciIsImpvaW5TdXBwb3J0U2VydmVyIiwiam9pbkJEMiIsInN1cHBvcnRMaW5rIiwiZGVmYXVsdEZvb3RlciIsIm9uU2Nyb2xsIiwiTW9kYWxBY3Rpb25zIiwiTWFya2Rvd24iLCJDb25maXJtYXRpb25Nb2RhbCIsImVtcHR5RnVuY3Rpb24iLCJvcGVuTW9kYWwiLCJyZWQiLCJtb2RhbEtleSIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJpc0RlZmF1bHQiLCJtb2QiLCJwcm94eSIsImZ1bmMiLCJfX3Byb3RvX18iLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImpvaW5MQyIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsIm1hcmdpbk1vZHVsZTIiLCJkZWZhdWx0TWFyZ2luaDUiLCJjb2xvck1vZHVsZSIsImNvbG9yU3RhbmRhcmQiLCJzaXplTW9kdWxlIiwic2Nyb2xsYmFyTW9kdWxlMSIsInNjcm9sbGJhckdob3N0SGFpcmxpbmUiLCJHdWlsZE1vZHVsZSIsImdldFJlbGF0aW9uc2hpcHMiLCJzZXNzaW9uTW9kdWxlIiwiZ2V0U2Vzc2lvbnMiLCJzaXplMTQiLCJoNSIsImdldFByb2ZpbGVWYWx1ZSIsImdldFN0YXRpc3RpY3MiLCJnZXRTZXNzaW9uVmFsdWUiLCJtYXJnaW5Cb3R0b20yMCIsInNlc3Npb25zUmF3Iiwic2Vzc2lvbnMiLCJzZXNzaW9uSWQiLCJjbGllbnRJbmZvIiwib3MiLCJjbGllbnQiLCJhY3Rpdml0aWVzIiwicmVwZWF0IiwiY3JlYXRlZEF0IiwiYXZhdGFyVVJMIiwiYXZhdGFyIiwiZ2V0QXZhdGFyVVJMIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZmxhZ3MiLCJoYXNQcmVtaXVtU3Vic2NyaXB0aW9uIiwiZW1haWwiLCJtZmFFbmFibGVkIiwibW9iaWxlIiwicGhvbmUiLCJ2ZXJpZmllZCIsIm5zZndBbGxvd2VkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwibGlzdExhbmd1YWdlcyIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJvcGVuRXh0ZXJuYWwiLCJjb21wIiwiY29tcE5hbWUiLCJjb21wUGF0aCIsInJlbmRlcnMiLCJDb21wb25lbnRQcmV2aWV3IiwidGFiIiwiQWxsUHJldmlld3MiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wQ2F0ZWdvcnkiLCJwcm9wU3RyaW5ncyIsImNoaWxkcmVuUHJvcCIsInN0ciIsIm9wZW5UYWciLCJjbG9zZVRhZyIsInZpc2libGVLZXkiLCJwcm9wT2JqZWN0IiwiaXNMYXN0IiwiaXNGaXJzdCIsImNoaWxkcmVuRGF0YSIsImhlbHAiLCJzdWNjZXNzIiwic2V0U3RhdGUiLCJtYXJnaW5Cb3R0b20iLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInRydXN0ZWQiLCJjbG9zZVNldHRpbmdzIiwicGFuZWxSZWYiLCJzZXR0aW5nc09wZW4iLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsImlzSGlkZGVuIiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsImNhcmROb2RlIiwidGhpc05vZGVPZmZzZXQiLCJjb250YWluZXJPZmZzZXQiLCJlbmRQb2ludCIsImdldFN0cmluZyIsInNldHRpbmdzQ29tcG9uZW50IiwicmVmIiwiWFN2ZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWVJbmRleCIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwicG9wTGF5ZXIiLCJtYWtlTGluayIsIm1ha2VCdXR0b24iLCJhY3Rpb24iLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvbkFkZG9uQ2hhbmdlcyIsIm9wZW5Gb2xkZXIiLCJvcGVuUGF0aCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJzb3J0T3B0aW9ucyIsImRpcmVjdGlvbnMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImdldEFkZG9ucyIsInNvcnRlZEFkZG9ucyIsImIiLCJjYXAiLCJmaXJzdCIsInNlY29uZCIsImxvY2FsZUNvbXBhcmUiLCJyZW5kZXJDaGVja1VwZGF0ZXMiLCJaZXJlc1BsdWdpbkxpYnJhcnkiLCJQbHVnaW5VcGRhdGVzIiwiY2hlY2tBbGwiLCJ0b29sdGlwSXNTaG93aW5nIiwidG9vbHRpcCIsIm1hcmdpbkxlZnQiLCJjaGVja1VwZGF0ZUJ1dHRvbiIsIkVtdWxhdGVkVG9vbHRpcCIsImF0dGFjaEV2ZW50cyIsInJlZnJlc2hJY29uIiwiYWRkb25DYXJkcyIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsInN3aXRjaCIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImRldGFjaGVkUm9vdCIsImNvZGVNaXJyb3IiLCJsaW5lTnVtYmVycyIsIm1vZGUiLCJpbmRlbnRVbml0Iiwic2Nyb2xsYmFyU3R5bGUiLCJfY2NzcyIsImNjc3MiLCJ1cGRhdGVMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJTZXR0aW5nc1RpdGxlIiwiQ2hlY2tib3giLCJib3JkZXJSaWdodCIsImJvcmRlckxlZnQiLCJmb250U2l6ZSIsImFyZyIsImdldFZhbHVlIiwiZHJvb3QiLCJfcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsInJvb3QiLCJpbmplY3RSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJtYXJnaW5Nb2R1bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyIsInByZXZpZXciLCJpc2ZldGNoaW5nIiwiYXNzZXRDb21wb25lbnRzIiwidXBkYXRlV2hlbkZldGNoZWQiLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3Iiwib3B0aW9uc0NvbXBvbmVudHMiLCJvaGdvZG9oZnVjayIsIl9vcHRpb25zQ29tcG9uZW50cyIsImFycmF5IiwiaW5wdXRUZXh0TW9kdWxlcyIsIklucHV0VGV4dCIsInJlbW92ZUtleWJpbmQiLCJfaG9yaXpvbnRhbCIsImlucHV0TWluaSIsInNpemUxNiIsInNpemUyMCIsImlucHV0IiwibGFzdEVkaXRlZCIsImlzVGltaW5nIiwicm93TW9kdWxlIiwiZmxleE1vZHVsZSIsImlucHV0TW9kdWxlIiwic2l6ZU1vZHVsZTIiLCJyb3ciLCJmbGV4Q2hpbGQiLCJJbnB1dE51bWJlck1vZHVsZXMiLCJJbnB1dE51bWJlciIsImNvbG9yVHJhbnNwYXJlbnQiLCJzZXRWYWx1ZSIsImNsaXBib2FyZCIsIklucHV0Q2hvaWNlTW9kdWxlcyIsIklucHV0Q2hvaWNlIiwiRGl2aWRlck1vZHVsZXMiLCJEaXZpZGVyIiwiZGl2aWRlciIsImRpdmlkZXJEZWZhdWx0IiwiRGlzY29yZEJ1dHRvbiIsIlJwY1ByZXZpZXciLCJhY3RpdmUiLCJjaGFuZ2VUYWIiLCJhbmNpZW50VGFiIiwic2V0QWN0aXZlIiwiZmxleCIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImVtcHR5Q2xhc3NlcyIsIlByZXNlbmNlRXJyb3JDYXRjaGVyIiwiZXJySW5mbyIsImVtcHR5U3RhdGVJbWFnZSIsImVtcHR5U3RhdGUiLCJlbXB0eVN0YXRlSGVhZGVyIiwiZW1wdHlTdGF0ZVN1YnRleHQiLCJwb3BvdXRNb2R1bGVzIiwiVXNlclBvcG91dENvbXBvbmVudCIsIlBvcG91dFByb3BzIiwiVXNlclBvcG91dCIsInJlbmRlcjEiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwiX1VzZXJQb3BvdXQiLCJwb3BvdXQiLCJleGNsdWRlUHJvcGVydGllcyIsInByb2ZpbGVNb2R1bGVzIiwiVXNlclByb2ZpbGVDb21wb25lbnQiLCJQcm9maWxlUHJvcHMiLCJjb25uZWN0ZWRQcm9maWxlU3RvcmUiLCJVc2VyUHJvZmlsZSIsInJlbmRlcjIiLCJyZW5kZXIzIiwicmVuZGVyNCIsInByb2ZpbGUiLCJTZXR0aW5nc1ZpZXciLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsImhvb2tzIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImNhdGVnb3J5U2x1Z3MiLCJmZXRjaCIsInNlYXJjaEVuZFBvaW50Iiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInJvdW5kIiwic2NyZWVuWCIsInNjcmVlblkiLCJ3aW4iLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInNldE1lbnVCYXJWaXNpYmlsaXR5IiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiY2VudGVyIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJiZFNlcnZlciIsIm9ubGluZSIsIm1lbWJlcnMiLCJpY29uVXJsIiwibmF0aXZlam9pbiIsInNlcnZlcjIiLCJndWlsZExpc3QiLCJnZXRGbGF0dGVuZWRHdWlsZElkcyIsImRlZmF1bHRMaXN0IiwiREVGQVVMVF9BVkFUQVJTIiwiU2VydmVyQ2FyZCIsImZhbGxiYWNrIiwiZmxvb3IiLCJjb25uZWN0RW5kUG9pbnQiLCJyZXNwb25zZSIsIm9uU2V0U2VjdGlvbiIsInNlYXJjaElucHV0IiwiZ2V0VGhpcyIsInNlcmNoaW5wdXQiLCJzZWFyY2hpbnB1dCIsIm1heExlbmd0aCIsIm5vdENvbm5lY3RlZCIsImNvbHVtbk1vZHVsZSIsIm1pbkhlaWdodCIsImxpbmVIZWlnaHQiLCJ1c2VFZmZlY3QiLCJUYWJCYXJTZXBhcmF0b3IiLCJWMkNfU2VydmVyQ2FyZCIsImltYWdlRXJyb3IiLCJjYXJkTW9kdWxlIiwiY2FyZCIsImNhcmRQcmltYXJ5IiwiX2hvcml6b250YWxSZXZlcnNlIiwid3JhcE1vZHVsZSIsIm5vV3JhcCIsInN0cmVhbWVyTW9kZUVuYWJsZWQiLCJvbkVycm9yIiwiaGFuZGxlRXJyb3IiLCJkcmFnZ2FibGUiLCJob3Jpem9udGFsIiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsInN3aXRjaEl0ZW0iLCJiZXRhQ2xhc3NOYW1lcyIsIlYyQ19TZXR0aW5nc0dyb3VwIiwicmVuZGVyT2xkU2V0dGluZ3MiLCJidXR0b25Db21wb25lbnQiLCJiZXRhIiwidXNlclNldHRpbmdzVm9pY2UiLCJERUZBVUxUIiwiVjJDX1NldHRpbmdzVGl0bGUiLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiU3dpdGNoSXRlbSIsIlYyQ19UYWJCYXJTZXBhcmF0b3IiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJjYW5TaG93QWJvdmUiLCJjYW5TaG93QmVsb3ciLCJjYW5TaG93TGVmdCIsImNhblNob3dSaWdodCIsIl9jbGFzc05hbWUiLCJzaG93QWJvdmUiLCJzaG93QmVsb3ciLCJzaG93TGVmdCIsInNob3dSaWdodCIsImNlbnRlckhvcml6b250YWxseSIsImNlbnRlclZlcnRpY2FsbHkiLCJub2RlY2VudGVyIiwiZmluZERPTU5vZGUiLCJWMkNfWFN2ZyJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FB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NEJBQVI7QUFBc0NwdUIsYUFBTyxFQUFFLFdBQS9DO0FBQTREbnpCLFdBQUssRUFBRTtBQUFDd2UsYUFBSyxFQUFFLE1BQVI7QUFBZ0IrTCxjQUFNLEVBQUU7QUFBeEI7QUFBbkUsS0FGRyxFQUdIejJCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxHQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFLFlBQVo7QUFBMEJzK0IsVUFBSSxFQUFFLE1BQWhDO0FBQXdDb2YsY0FBUSxFQUFFO0FBQWxELEtBRkosRUFHSTcrQyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUNtN0IsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FISixFQUlJcjhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsZUFBUyxFQUFFLE1BQVo7QUFBb0JzK0IsVUFBSSxFQUFFLFNBQTFCO0FBQXFDcEQsT0FBQyxFQUFFO0FBQXhDLEtBQWpDLENBSkosQ0FIRyxDQUFQO0FBVUg7O0FBaEJxRCxDOzs7Ozs7Ozs7OztBQ0YxRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxxQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwOFwiO1xuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA4XCI7XG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcbmV4cG9ydCBjb25zdCBiYmRWZXJzaW9uID0gXCIwLjMuNVwiO1xuZXhwb3J0IGNvbnN0IGJiZENoYW5nZWxvZyA9IHtcbiAgICBkZXNjcmlwdGlvbjogXCJCaWcgdGhpbmdzIGFyZSBjb21pbmcuXCIsXG4gICAgY2hhbmdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogXCJCdWcgRml4ZXNcIixcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgXCJTb21lIGZpeGVzIHJlbGF0ZWQgdG8gc2hvd2luZyBtb2RhbHMgaW4gdGhlIGBCZEFwaWAuXCIsXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICBcIkN1c3RvbSBjc3MgbGl2ZSB1cGRhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTBcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXG5cbiAgICAvKiBDb3JlICovXG4gICAgLyogPT09PT09ICovXG4gICAgXCJQdWJsaWMgU2VydmVyc1wiOiAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTFcIiwgIGluZm86IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJIaWRlIENoYW5uZWxzXCI6ICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTNcIiwgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCIyNCBIb3VyIFRpbWVzdGFtcHNcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLTZcIiwgIGluZm86IFwiUmVwbGFjZSAxMmhyIHRpbWVzdGFtcHMgd2l0aCBwcm9wZXIgb25lc1wiLCAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuXG4gICAgLyogQ29udGVudCAqL1xuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJTY2FuIFBsdWdpbnNcIjogICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy02XCIsIGluZm86IFwiU2NhbiBwbHVnaW5zIGZvciBhbnkgdGhyZWF0IHRoYXQgY2FuIGJlIGhpZGRlbiBpbnNpZGUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJTaG93IFRvYXN0c1wiOiAgICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy0yXCIsIGluZm86IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiQXV0b21hdGljIExvYWRpbmdcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNVwiLCBpbmZvOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiRW5hYmxlIEVkaXQgQnV0dG9uXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtN1wiLCBpbmZvOiBcIkVuYWJsZSBhbiBFZGl0IEJ1dHRvbiBvbiB0aGUgcGx1Z2luIGFuZCB0aGVtZSBwYW5lbC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcbiAgICBcIlRoZW1lcyBpbiBQb3BvdXQgV2luZG93XCI6ICAgIHtpZDogXCJsaWdodGNvcmQtOVwiLCBpbmZvOiBcIkVuYWJsZSB0aGVtZXMgaW4gUG9wb3V0IFdpbmRvdy4gKEZvciBleGFtcGxlLCB3aGVuIGRldGFjaGluZyBzY3JlZW5zaGFyZS4pXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcblxuICAgIC8qIERldmVsb3BlciAqL1xuICAgIFwiRGV2ZWxvcGVyIE1vZGVcIjogICAgICAgICBcdCAge2lkOiBcImJkYS1ncy04XCIsIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxuXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgIFwiRGlzYWJsZSBCZXR0ZXJEaXNjb3JkXCI6ICAgICAge2lkOiBcImJkLWRpc2FibGVcIiwgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykgKE5vdCBpbXBsZW1lbnRlZCkuXCIsIGltcGxlbWVudGVkOiBmYWxzZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiRGV2ZWxvcGVyIE9wdGlvbnNcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0xXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyAmIExpZ2h0Y29yZCdzIEludGVybmFsIERldmVsb3BlciBPcHRpb25zLiBUaGlzIGFsbG93IHRoZSBcXFwiRXhwZXJpbWVudHNcXFwiIHRhYiwgdGhlIFxcXCJEZXZlbG9wZXIgT3B0aW9uc1xcXCIgdGFiIGFuZCB0aGUgXFxcIkxpZ2h0Y29yZCBBcGlcXFwiIHNlY3Rpb24uXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiAgIHtpZDogXCJsaWdodGNvcmQtNVwiLCBpbmZvOiBcIkVuYWJsZSBMaWdodGNvcmQncyBzZXJ2ZXJzLiBEaXNhYmxpbmcgdGhpcyB3aWxsIGRpc2FibGUgY3VzdG9tIGJhZGdlcy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiRGlzYWJsZSB0eXBpbmdcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC03XCIsIGluZm86IFwiRG9uJ3QgbGV0IG90aGVyIHNlZSB5b3UncmUgdHlwaW5nLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXG4gICAgXCJVc2UgTm90aWZpY2F0aW9uIFNoaW1cIjogICAgICB7aWQ6IFwibGlnaHRjb3JkLTEwXCIsIGluZm86IFwiQmFzaWNhbGx5IGRvbid0IHVzZSBXaW5kb3dzJ3MgTm90aWZpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJ3aW4zMlwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBleHBlcmltZW50YWw6IGZhbHNlfSxcblxuICAgIC8qKiBMaWdodGNvcmQgV2luZG93ICovXG4gICAgXCJBbHdheXMtb24tVG9wXCI6ICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTNcIiwgaW5mbzogXCJFbmFibGUgdGhlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcbiAgICBcIk5vIFdpbmRvdyBCb3VuZHNcIjogICAgICAgICAgIHtpZDogXCJub193aW5kb3dfYm91bmRcIiwgaW5mbzogXCJEaXNhYmxlIFdpbmRvdyBCb3VuZHMuIENhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSBhIHdpbmRvdyBtYW5hZ2VyLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxuICAgIFwiRW5hYmxlIEdsYXNzdHJvblwiOiAgICAgICAgICAge2lkOiBcImVuYWJsZV9nbGFzc3Ryb25cIiwgaW5mbzogXCJFbmFibGUgR2xhc3N0cm9uLiBJZiB5b3UncmUgbm90IHVzaW5nIHRyYW5zcGFyZW50IHRoZW1lcywgdGhpcyBjYW4gcmVkdWNlIGxhZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxuICAgIFxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cbiAgICBcIkVuYWJsZVwiOiAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLCBpbmZvOiBcIkVuYWJsZSBSaWNoUHJlc2VuY2UgYmVsb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwic3RhdHVzXCJ9XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvb2tpZSA9IHtcbiAgICBcImJkYS1ncy0xXCI6IHRydWUsXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcbiAgICBcImJkYS1ncy0zXCI6IGZhbHNlLFxuICAgIFwiYmRhLWdzLTRcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxuICAgIFwiYmRhLWdzLTZcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtN1wiOiBmYWxzZSxcbiAgICBcImJkYS1ncy04XCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLTBcIjogdHJ1ZSxcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXG4gICAgXCJiZGEtZXMtMlwiOiB0cnVlLFxuICAgIFwiYmRhLWVzLTRcIjogZmFsc2UsXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxuICAgIFwiYmRhLWVzLTdcIjogdHJ1ZSxcbiAgICBcImJkYS1ncy1iXCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcbiAgICBcImJkYS1kYy0wXCI6IGZhbHNlLFxuICAgIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLTlcIjogdHJ1ZSxcbiAgICBcImZvcmstZG0tMVwiOiBmYWxzZSxcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy0yXCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy01XCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTZcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcbiAgICBcImZvcmstZXMtMlwiOiBmYWxzZSxcbiAgICBcImZvcmstZXMtM1wiOiB0cnVlLFxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxuICAgIFwiZm9yay13cC0yXCI6IGZhbHNlLFxuICAgIFwiZm9yay1iZXRhXCI6IHRydWUsXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXG4gICAgXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtNVwiOiB0cnVlLFxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcbiAgICBcImxpZ2h0Y29yZC03XCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLThcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtOVwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC0xMFwiOiBmYWxzZSxcbiAgICBcIm5vX3dpbmRvd19ib3VuZFwiOiBmYWxzZSxcbn07XG5cblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5nc1JQQyA9IHt9O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XG4gICAgXCJuYW1lXCI6IFwiTGlnaHRjb3JkXCIsXG4gICAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXG4gICAgXCJkZXRhaWxzXCI6IFwiQnJvd3NpbmcgRGlzY29yZFwiLFxuICAgIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXG4gICAgXCJhc3NldHMubGFyZ2VcIjogXCI3MTIzMjM4MjEwMzc2ODI3OTFcIlxufVxuXG5leHBvcnQgY29uc3QgbGlnaHRjb3JkU2V0dGluZ3MgPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0TGlnaHRjb3JkU2V0dGluZ3MgPSB7fTtcblxuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XG5cbmV4cG9ydCBjb25zdCBiZHRoZW1lcyA9IHt9O1xuZXhwb3J0IGNvbnN0IGJkcGx1Z2lucyA9IHt9O1xuXG5leHBvcnQgY29uc3QgcGx1Z2luQ29va2llID0ge307XG5leHBvcnQgY29uc3QgdGhlbWVDb29raWUgPSB7fTsiLCJpbXBvcnQgbG9jYWxTdG9yYWdlRml4IGZyb20gXCIuL2xvY2FsU3RvcmFnZUZpeFwiO1xuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XG5sb2NhbFN0b3JhZ2VGaXgoKTtcbmxvYWRpbmdJY29uKCk7XG5cbmNvbnN0IGRlcHJlY2F0ZUdsb2JhbCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTsgIFxufTtcblxuXG5pbXBvcnQgKiBhcyBHbG9iYWxzIGZyb20gXCIuLzBnbG9iYWxzXCI7XG5cbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcbmZvciAoY29uc3Qga2V5IG9mIGdsb2JhbEtleXMpIGRlcHJlY2F0ZUdsb2JhbChrZXksIEdsb2JhbHNba2V5XSk7XG5cblxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvYmRBcGlcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vbW9kdWxlcy9jbGFzc05vcm1hbGl6ZXJcIjtcblxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcbmRlcHJlY2F0ZUdsb2JhbChcInBsdWdpbk1vZHVsZVwiLCBwbHVnaW5Nb2R1bGUpO1xuZGVwcmVjYXRlR2xvYmFsKFwidGhlbWVNb2R1bGVcIiwgdGhlbWVNb2R1bGUpO1xuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xuZGVwcmVjYXRlR2xvYmFsKFwiQkRFdmVudHNcIiwgQkRFdmVudHMpO1xuZGVwcmVjYXRlR2xvYmFsKFwic2V0dGluZ3NQYW5lbFwiLCBzZXR0aW5nc1BhbmVsKTtcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xuZGVwcmVjYXRlR2xvYmFsKFwiQ29udGVudE1hbmFnZXJcIiwgQ29udGVudE1hbmFnZXIpO1xuZGVwcmVjYXRlR2xvYmFsKFwiQ2xhc3NOb3JtYWxpemVyXCIsIENsYXNzTm9ybWFsaXplcik7XG5cbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xuXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcbmRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIENvcmUpO1xuXG4vLyBUT0RPOiBDaGFuZ2UgSW5pdCBtb2RlIGFuZCBzdG9wIHVzaW5nIENvcmVXcmFwcGVyLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGJkQ29uZmlnKTtcbiAgICAgICAgQ29yZS5zZXRNZXRob2RzKG1ldGhvZHMpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xuICAgICAgICBDb3JlLmluaXQoKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gICAgY29uc3QgdjJMb2FkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgdjJMb2FkZXIuY2xhc3NOYW1lID0gXCJiZC1sb2FkZXJ2MlwiO1xyXG4gICAgdjJMb2FkZXIudGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2MkxvYWRlcik7XHJcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBjb250ZW50V2luZG93R2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiKS5nZXQ7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gUmVmbGVjdC5hcHBseShjb250ZW50V2luZG93R2V0dGVyLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KGNvbnRlbnRXaW5kb3csIHtcclxuICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBvYmpbcHJvcF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbC5iaW5kKG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBpbnRlcmNlcHRpb24gYnkgcGF0Y2hpbmcgUmVmbGVjdC5hcHBseSBhbmQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0LCBcImFwcGx5XCIsIHt2YWx1ZTogUmVmbGVjdC5hcHBseSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCBcImJpbmRcIiwge3ZhbHVlOiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcblxyXG4gICAgY29uc3Qgb09wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYXJndW1lbnRzWzFdO1xyXG4gICAgICAgIGlmICh1cmwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFwaS93ZWJob29rc1wiKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob09wZW4sIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRGSG91ciB7XHJcbiAgICBpbmplY3QyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHR3ZWx2ZUhvdXIgPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXFxcXHMoQU18UE0pYCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydCA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gZGF0YS5yZXR1cm5WYWx1ZS5tYXRjaCh0d2VsdmVIb3VyKTtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVkIHx8IG1hdGNoZWQubGVuZ3RoICE9PSA0KSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVkWzNdID09PSBcIkFNXCIpIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMTJcIiA6IHBhcnNlSW50KG1hdGNoZWRbMV0pICsgMTJ9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBjYW5jZWxDb3p5ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImNhbGVuZGFyRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ296eSBtb2RlXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ29tcGFjdCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJkYXRlRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ29tcGFjdCBtb2RlXHJcbiAgICAgICAgdGhpcy5jYW5jZWwyNEhvdXIgPSAoKSA9PiB7Y2FuY2VsQ296eSgpOyBjYW5jZWxDb21wYWN0KCk7fTsgLy8gQ2FuY2VsIGJvdGhcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSB0aGlzLmNhbmNlbDI0SG91cigpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXG5cbmNvbnN0IGRpc3BhdGNoZXIgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXJcbmNvbnN0IENoYW5uZWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDaGFubmVsICYmIGUuZGVmYXVsdC5oYXNDaGFubmVsKVswXS5kZWZhdWx0XG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxubGV0IERNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cblxuY29uc3QgYmxvY2tlZCA9IHt9XG5cbmxldCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xuICAgIGlmKHVzZXJNb2R1bGUpcmV0dXJuIHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEFudGlCb3RETSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5hbnRpRE0gPSB0aGlzLmFudGlETS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgfVxuXG4gICAgZW5hYmxlKCl7XG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXG4gICAgfVxuXG4gICAgZGlzYWJsZSgpe1xuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuXG4gICAgICAgIGRpc3BhdGNoZXIudW5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcbiAgICB9XG5cbiAgICBhbnRpRE0oZXYpe1xuICAgICAgICBpZighZXYubWVzc2FnZS5hdXRob3IuYm90KXJldHVyblxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcbiAgICAgICAgaWYoZXYubWVzc2FnZS5ndWlsZF9pZClyZXR1cm5cblxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcbiAgICAgICAgaWYoIWNoYW5uZWwpcmV0dXJuIC8vIG1pZ2h0IGJlIGJyb2tlblxuXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cblxuICAgICAgICBpZihibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSlyZXR1cm4gLy8gSWYgdGhlIHVzZXIgdW5ibG9jayB0aGUgYm90LCBEb24ndCBibG9jayBpdCBhZ2Fpbi5cblxuICAgICAgICBpZihzY2FuTWVzc2FnZShldi5tZXNzYWdlKSl7XG4gICAgICAgICAgICBibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSA9IHRydWVcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwid2FybmluZ1wiXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXG4gICAgICAgICAgICByZWxhdGlvblNoaXBNb2R1bGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXAoZXYubWVzc2FnZS5hdXRob3IuaWQsIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogXCJDb250ZXh0TWVudVwiXG4gICAgICAgICAgICB9LCAyKVxuICAgICAgICAgICAgaWYoIURNTW9kdWxlKURNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cbiAgICAgICAgICAgIERNTW9kdWxlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbChjaGFubmVsLmlkLCBmYWxzZSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2Nhbk1lc3NhZ2UobWVzc2FnZSl7XG4gICAgaWYoLyhkaXNjb3JkXFwuZ2d8ZGlzY29yZFxcLmNvbVxcL2ludml0ZVxcL3xkaXNjb3JkYXBwXFwuY29tXFwvaW52aXRlXFwvKS9nLnRlc3QobWVzc2FnZS5jb250ZW50KSlyZXR1cm4gdHJ1ZVxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBzZWFyY2gpe1xuICAgIGxldCBlbWJlZHMgPSBtZXNzYWdlLmVtYmVkcyB8fCBbXVxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIGVtYmVkcy5tYXAoZW1iZWQgPT4ge1xuICAgICAgICBpZihlbWJlZC50eXBlICE9PSBcInJpY2hcIilyZXR1cm4gZmFsc2VcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcbiAgICAgICAgaWYoKGVtYmVkLmRlc2NyaXB0aW9uIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcbiAgICAgICAgaWYoKChlbWJlZC5mb290ZXIgfHwgXCJcIikgJiYgZW1iZWQuZm9vdGVyLnRleHQgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxuICAgICAgICBpZigoZW1iZWQuZmllbGRzIHx8IFtdKS5tYXAoZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXG4gICAgICAgIH0pLmluY2x1ZGVzKHRydWUpKXJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgfSkuaW5jbHVkZXModHJ1ZSlcbn0iLCJpbXBvcnQge3NldHRpbmdzUlBDLCBkZWZhdWx0UlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uRGlzcGF0Y2hlciYmbS5kZWZhdWx0JiZtLmRlZmF1bHQuZGlzcGF0Y2gpWzBdLmRlZmF1bHRcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXHJcblxyXG5jb25zdCBzb2NrZXRJZCA9IFwibGlnaHRjb3JkLXNwb29mLXNvY2tldFwiXHJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tUmljaFByZXNlbmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQgPT09IGZhbHNlKXJldHVybiBudWxsXHJcbiAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ2FtZVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRHYW1lKCl7XHJcbiAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcclxuICAgICAgICAgICAgc29ja2V0SWQsXHJcbiAgICAgICAgICAgIHBpZCxcclxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXHJcbiAgICAgICAgfSkgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKSB7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkVuYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNhYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaEFzc2V0cyhhcHBsaWNhdGlvbklkKXtcclxuICAgICAgICBsZXQgYXNzZXRzID0gYXdhaXQgQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXNzZXRzKVswXS5nZXRBc3NldHMoYXBwbGljYXRpb25JZClcclxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBcHBsaWNhdGlvblwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGFjdGl2aXR5KXtcclxuICAgICAgICB0aGlzLmdhbWUgPSBhY3Rpdml0eVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxufSIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XG5pbXBvcnQgeyB0aW1pbmdTYWZlRXF1YWwgfSBmcm9tIFwiY3J5cHRvXCI7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBMYXllcnMge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gW11cbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkxheWVycyA9IHRoaXNcbiAgICB9XG5cbiAgICBnZXQgaXNJbmplY3RlZCgpe1xuICAgICAgICByZXR1cm4gISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2LkxheWVycy5pbmplY3RlZFwiKVxuICAgIH1cblxuICAgIGluamVjdCgpe1xuICAgICAgICBpZih0aGlzLmlzSW5qZWN0ZWQpcmV0dXJuXG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcnNcbiAgICAgICAgXSA9IFtcbiAgICAgICAgICAgIFV0aWxzLnJlbW92ZURhKHYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmxheWVycyAmJiBlLmxheWVyKS5sYXllcnMpXG4gICAgICAgIF1cbiAgICAgICAgY29uc3QgbGF5ZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVMYXllcnMpO1xuICAgICAgICBpZiAoIWxheWVycykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBSZWFjdEluc3RhbmNlID0gTGlnaHRjb3JkLkFwaS5VdGlscy5GaW5kUmVhY3QobGF5ZXJzLCAxKVxuICAgICAgICBpZighUmVhY3RJbnN0YW5jZSlyZXR1cm4gbGF5ZXJzXG4gICAgICAgIHRoaXMuUmVhY3RJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VcbiAgICAgICAgbGV0IHJlbmRlciA9IFJlYWN0SW5zdGFuY2UucmVuZGVyXG4gICAgICAgIFJlYWN0SW5zdGFuY2UucmVuZGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVuZGVyLmNhbGwoUmVhY3RJbnN0YW5jZSlcbiAgICAgICAgICAgIGxldCBjbGFzc0xpc3QgPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jbGFzc05hbWUuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaChcIkxheWVyc1wiKVxuICAgICAgICAgICAgY2xhc3NMaXN0LnB1c2goXCJpbmplY3RlZFwiKVxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2xhc3NOYW1lID0gY2xhc3NMaXN0LmpvaW4oXCIgXCIpXG5cbiAgICAgICAgICAgIHRoaXMubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuLnB1c2gobGF5ZXJbMV0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVcbiAgICAgICAgfVxuICAgICAgICBSZWFjdEluc3RhbmNlLmZvcmNlVXBkYXRlKClcbiAgICB9XG5cbiAgICBjcmVhdGVMYXllcihjaGlsZHJlbiwgcHJvcHMgPSB7fSl7XG4gICAgICAgIGxldCBpZCA9IHV1aWR2NCgpXG4gICAgICAgIGxldCBsYXllciA9IG51bGxcbiAgICAgICAgdGhpcy5sYXllcnMucHVzaChbaWQsIDxMYXllciB7Li4ucHJvcHN9IGdldExheWVyPXtsYXkgPT4ge1xuICAgICAgICAgICAgbGF5ZXIgPSBsYXlcbiAgICAgICAgfX0ga2V5PXtpZH0gaWQ9e2lkfSByZW1vdmU9eygpID0+IHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleChlID0+IGVbMF0gPT09IGlkKVxuICAgICAgICAgICAgaWYoaW5kZXggPT09IC0xKXJldHVyblxuICAgICAgICAgICAgdGhpcy5sYXllcnMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgICAgbGF5ZXIgPSBudWxsXG4gICAgICAgICAgICBpZih0aGlzLlJlYWN0SW5zdGFuY2UpdGhpcy5SZWFjdEluc3RhbmNlLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0KClcbiAgICAgICAgfX0+e2NoaWxkcmVufTwvTGF5ZXI+XSlcbiAgICAgICAgaWYodGhpcy5SZWFjdEluc3RhbmNlKXRoaXMuUmVhY3RJbnN0YW5jZS5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIHRoaXMuaW5qZWN0KClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlbW92ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKCFsYXllcil7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleChlID0+IGVbMF0gPT09IGlkKVxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA9PT0gLTEpcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuUmVhY3RJbnN0YW5jZSl0aGlzLlJlYWN0SW5zdGFuY2UuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdCgpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyLnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmxldCBMYXllck1vZHVsZXNcbmV4cG9ydCBjbGFzcyBMYXllciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiBuZXcgdGhpcy5tb2R1bGVzWzBdLmRlZmF1bHQuVmFsdWUoMClcbiAgICAgICAgfSBcbiAgICAgICAgdGhpcy5wcm9wcy5nZXRMYXllcih0aGlzKVxuICAgICAgICB0aGlzLmtleWRvd24gPSB0aGlzLmtleWRvd24uYmluZCh0aGlzKVxuICAgIH1cblxuICAgIGtleWRvd24oZSl7XG4gICAgICAgIGlmIChlLndoaWNoID09PSAyNykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIExheWVyTW9kdWxlcyB8fCAoTGF5ZXJNb2R1bGVzID0gW1xuICAgICAgICAgICAgdjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuVmFsdWUgJiYgZS5kZWZhdWx0LmRpdilcbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlkb3duKVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KGV2KXtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5ZG93bilcbiAgICB9XG5cbiAgICByZW1vdmUoKXtcbiAgICAgICAgdGhpcy5wcm9wcy5yZW1vdmUoKVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxFbnRlcihldil7XG4gICAgICAgIHRoaXMubW9kdWxlc1swXS5kZWZhdWx0LnRpbWluZyh0aGlzLnN0YXRlLmFuaW1hdGlvbiwge1xuICAgICAgICAgICAgdG9WYWx1ZTogMSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDBcbiAgICAgICAgfSkuc3RhcnQoZXYpXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbExlYXZlKGV2KXtcbiAgICAgICAgdGhpcy5tb2R1bGVzWzBdLmRlZmF1bHQudGltaW5nKHRoaXMuc3RhdGUuYW5pbWF0aW9uLCB7XG4gICAgICAgICAgICB0b1ZhbHVlOiAwLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMFxuICAgICAgICB9KS5zdGFydChldilcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IGludGVycG9sYXRpb24gPSB0aGlzLnN0YXRlLmFuaW1hdGlvbi5pbnRlcnBvbGF0ZSh7XG4gICAgICAgICAgICBpbnB1dFJhbmdlOiBbMCwgMV0sXG4gICAgICAgICAgICBvdXRwdXRSYW5nZTogWzEuMDcsIDFdXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBzdHlsZSA9IHtcbiAgICAgICAgICAgIG9wYWNpdHk6IHRoaXMuc3RhdGUuYW5pbWF0aW9uLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBbe1xuICAgICAgICAgICAgICAgIHNjYWxlOiBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICB9XVxuICAgICAgICB9XG4gICAgICAgIGxldCBEaXYgPSB0aGlzLm1vZHVsZXNbMF0uZGVmYXVsdC5kaXZcbiAgICAgICAgcmV0dXJuIDxEaXYgY2xhc3NOYW1lPXtbX19TRUNSRVRfRU1PVElPTl9fLmNzcyh7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XCJ2YXIoLS1iYWNrZ3JvdW5kLXByaW1hcnkpXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIFdlYmtpdEJveE9yaWVudDogXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgICAgV2Via2l0Qm94RGlyZWN0aW9uOiBcIm5vcm1hbFwiLFxuICAgICAgICAgICAgbXNGbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgICAgICAgICAgIHpJbmRleDogMTAxXG4gICAgICAgIH0pLHByb2Nlc3MucGxhdGZvcm09PT1cIndpbjMyXCI/X19TRUNSRVRfRU1PVElPTl9fLmNzcyh7XG4gICAgICAgICAgICB0b3A6IFwiLTIycHhcIixcbiAgICAgICAgICAgIHBhZGRpbmdUb3A6IFwiMjJweFwiXG4gICAgICAgIH0pOm51bGwsLi4uKHRoaXMucHJvcHMuY2xhc3NOYW1lP3RoaXMucHJvcHMuY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTpbXSldLmZpbHRlcihlPT5lKS5qb2luKFwiIFwiKSB8fCBudWxsfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L0Rpdj5cbiAgICB9XG59XG5MYXllci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgY2hpbGRyZW46IG51bGxcbn0iLCJpbXBvcnQge3BsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgbWFpbkNvcmUgZnJvbSBcIi4vY29yZVwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuY29uc3QgQmRBcGkgPSB7XG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gQkRWMi5SZWFjdDsgfSxcbiAgICBnZXQgUmVhY3RET00oKSB7IHJldHVybiBCRFYyLlJlYWN0RG9tOyB9LFxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gQkRWMi5SZWFjdENvbXBvbmVudDt9LFxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBVdGlscy5XaW5kb3dDb25maWdGaWxlO30sXG4gICAgZ2V0IHNldHRpbmdzKCkge3JldHVybiBzZXR0aW5nczt9LFxuICAgIGdldCBlbW90ZXMoKSB7cmV0dXJuIG51bGx9LCAvLyBkZXByZWNhdGVkLCBkZWxldGVkIGFsbCBlbW90ZXMgZnJvbSBiZXR0ZXJkaXNjb3JkLlxuICAgIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH0sXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxufTtcblxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVXRpbHMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcbn07XG5cbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gVXRpbHMuZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpO1xufTtcblxuQmRBcGkuc2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcbn07XG5cbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXG4vL2lkID0gaWQgb2YgZWxlbWVudFxuLy9jc3MgPSBjdXN0b20gY3NzXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQoaWQpLCBjc3MpO1xufTtcblxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XG4vL2lkID0gaWQgb2YgZWxlbWVudFxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSk7XG59O1xuXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcbi8vY3NzID0gY3VzdG9tIGNzc1xuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcbiAgICBET00uYWRkU2NyaXB0KERPTS5lc2NhcGVJRChpZCksIHVybCk7XG59O1xuXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcbi8vaWQgPSBpZCBvZiBlbGVtZW50XG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xuICAgIERPTS5yZW1vdmVTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSk7XG59O1xuXG4vL0dldCBhbm90aGVyIHBsdWdpblxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cbkJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKGJkcGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG4vL0dldCBCZXR0ZXJEaXNjb3JkIENvcmVcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgVXRpbHMud2FybihcIkRlcHJlY2F0aW9uIE5vdGljZVwiLCBgQmRBcGkuZ2V0Q29yZSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuYCk7XG4gICAgcmV0dXJuIG1haW5Db3JlO1xufTtcblxuLyoqXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcbiAqL1xuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCB7Y2FuY2VsVGV4dDogbnVsbH0pO1xufTtcblxuLyoqXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeSBzdHJpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYE1hcmtkb3duYCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAqL1xuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcbn07XG5cbi8vU2hvdyB0b2FzdCBhbGVydFxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xufTtcblxuLy8gRmluZHMgbW9kdWxlXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChmaWx0ZXIpO1xufTtcblxuLy8gRmluZHMgbW9kdWxlXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRBbGwoZmlsdGVyKTtcbn07XG5cbi8vIEZpbmRzIG1vZHVsZVxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xufTtcblxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3RvdHlwZXMocHJvdG9zKTtcbn07XG5cbkJkQXBpLmZpbmRNb2R1bGVCeURpc3BsYXlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKG5hbWUpO1xufTtcblxuLy8gR2V0cyByZWFjdCBpbnN0YW5jZVxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2Ygd2luZG93LmpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpIG5vZGUgPSBub2RlWzBdO1xuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XG59O1xuXG4vLyBHZXRzIGRhdGFcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XG59O1xuXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XG5cbi8vIFNldHMgZGF0YVxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcbn07XG5cbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcblxuLy8gRGVsZXRlcyBkYXRhXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XG59O1xuXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xufTtcblxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFV0aWxzLm9uUmVtb3ZlZChub2RlLCBjYWxsYmFjayk7XG59O1xuXG4vLyBXcmFwcyBmdW5jdGlvbiBpbiB0cnkuLmNhdGNoXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgIHJldHVybiBVdGlscy5zdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpO1xufTtcblxuLy8gVGVzdHMgZm9yIHZhbGlkIEpTT05cbkJkQXBpLnRlc3RKU09OID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcbn07XG5cbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gISFwbHVnaW5Db29raWVbbmFtZV07XG59O1xuXG5CZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gISF0aGVtZUNvb2tpZVtuYW1lXTtcbn07XG5cbkJkQXBpLmlzU2V0dGluZ0VuYWJsZWQgPSBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcbn07XG5cbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcbn07XG5cbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgZmFsc2UpO1xufTtcblxuQmRBcGkudG9nZ2xlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xufTtcblxuLy8gR2V0cyBkYXRhXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldEJERGF0YShrZXkpO1xufTtcblxuLy8gU2V0cyBkYXRhXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xufTtcblxuXG5cbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XG5cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBtYW5hZ2VyLmZvbGRlcjt9XG5cbiAgICBpc0VuYWJsZWQobmFtZSkge1xuICAgICAgICByZXR1cm4gISFjb29raWVbbmFtZV07XG4gICAgfVxuXG4gICAgZW5hYmxlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xuICAgIH1cblxuICAgIGRpc2FibGUobmFtZSkge1xuICAgICAgICByZXR1cm4gbWFuYWdlci5kaXNhYmxlKG5hbWUpO1xuICAgIH1cblxuICAgIHRvZ2dsZShuYW1lKSB7XG4gICAgICAgIGlmIChjb29raWVbbmFtZV0pIHRoaXMuZGlzYWJsZShuYW1lKTtcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcbiAgICB9XG5cbiAgICByZWxvYWQobmFtZSkge1xuICAgICAgICByZXR1cm4gbWFuYWdlci5yZWxvYWQobmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0KG5hbWUpIHtcbiAgICAgICAgaWYgKGxpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xuICAgICAgICAgICAgcmV0dXJuIGxpc3RbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0QWxsKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobGlzdCkubWFwKGsgPT4gdGhpcy5nZXQoaykpLmZpbHRlcihhID0+IGEpO1xuICAgIH1cbn07XG5cbkJkQXBpLlBsdWdpbnMgPSBtYWtlQWRkb25BUEkocGx1Z2luQ29va2llLCBiZHBsdWdpbnMsIHBsdWdpbk1vZHVsZSk7XG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XG5cbmV4cG9ydCBkZWZhdWx0IEJkQXBpO1xuXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQmRBcGkgPSBCZEFwaSIsIi8qIEJERXZlbnRzICovXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpO1xuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJERXZlbnRzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CREV2ZW50cyA9IHRoaXNcbiAgICB9XG4gICAgZGlzcGF0Y2goZXZlbnROYW1lLCAuLi5hcmdzKSB7dGhpcy5lbWl0KGV2ZW50TmFtZSwgLi4uYXJncyk7fVxuICAgIG9mZihldmVudE5hbWUsIGV2ZW50QWN0aW9uKSB7dGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50QWN0aW9uKTt9XG59OyIsIi8qKlxuICogQ3JlZGl0cyB0byBAaGVsbGJvdW5kMTMzNyBvbiBnaXRodWIgZm9yIHRoZSBjc3NcbiAqL1xuXG5pbXBvcnQgRE9NVG9vbHMgZnJvbSBcIi4vZG9tdG9vbHNcIlxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcblxubGV0IHNlbGVjdG9yc1xuY29uc3QgcmVtb3ZlRGEgPSBVdGlscy5yZW1vdmVEYVxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCl7XG4gICAgbGV0IHN0YW5kYXJkU2lkZWJhclZpZXcgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdGFuZGFyZFNpZGViYXJWaWV3KVswXVxuICAgIGlmKCFzdGFuZGFyZFNpZGViYXJWaWV3KXJldHVybiBudWxsXG4gICAgbGV0IGRlZmF1bHRDbGFzc05hbWUgPSByZW1vdmVEYShzdGFuZGFyZFNpZGViYXJWaWV3LnN0YW5kYXJkU2lkZWJhclZpZXcpXG4gICAgbGV0IHNlbGVjdHMgPSBbXVxuICAgIGxldCB1c2VyU2V0dGluZ3NBY2NvdW50ID0gQkRNb2R1bGVzLmdldChlID0+IGUudXNlclNldHRpbmdzQWNjb3VudClbMF1cbiAgICBjb25zdCBjaGlsZHJlbiA9IEJETW9kdWxlcy5nZXQoZSA9PiB0eXBlb2YgZS5jaGlsZHJlbiA9PT0gXCJzdHJpbmdcIilbMF1cbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLnBheW1lbnQtaW5mbyAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZXNjcmlwdGlvbiAmJiB0eXBlb2YgZS5kZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIiAmJiBlLmRlc2NyaXB0aW9uLmluY2x1ZGVzKFwiZm9ybVRleHRcIikpWzBdLmRlc2NyaXB0aW9uKX1gKVxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wYXltZW50U291cmNlUm93KVswXS5wYXltZW50U291cmNlUm93KX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuc3ViVGV4dCAmJiBlLmRlc2NyaXB0aW9uV3JhcHBlcilbMF0uc3ViVGV4dCl9YClcbiAgICBpZih1c2VyU2V0dGluZ3NBY2NvdW50KXtcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzQWNjb3VudCl9IGRpdjpudGgtY2hpbGQoMik+ZGl2Om50aC1jaGlsZCgyKT4uJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS52aWV3Qm9keSlbMF0udmlld0JvZHkpfWApXG4gICAgICAgIHNlbGVjdHMucHVzaChgLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NTZWN1cml0eSl9IC4ke3JlbW92ZURhKGNoaWxkcmVuLmNoaWxkcmVuKX0gPiBkaXY6bnRoLWNoaWxkKDIpYClcbiAgICB9XG4gICAgY29uc29sZS5sb2coc2VsZWN0cylcbiAgICByZXR1cm4gc2VsZWN0c1xufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQmx1clByaXZhdGUge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgfVxuXG4gICAgZW5hYmxlKCl7XG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMgfHwgZ2V0U2VsZWN0b3JzKClcblxuICAgICAgICBpZighc2VsZWN0b3JzKWNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzZWxlY3RvcnMgdG8gYmx1ciBwZXJzb25uYWwgaW5mb3JtYXRpb25zLlwiKSlcbiAgICAgICAgRE9NVG9vbHMuYWRkU3R5bGUoXCJibHVyUHJpdmF0ZVwiLCBgXG4ke3NlbGVjdG9ycy5qb2luKFwiLCBcIil9IHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpO1xuICAgIGZpbHRlcjogYmx1cig0cHgpO1xuICAgIG9wYWNpdHk6IC44O1xufVxuXG4ke3NlbGVjdG9ycy5tYXAoZSA9PiBlK1wiOmhvdmVyXCIpLmpvaW4oXCIsIFwiKX0gIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDksLjY4LC41Myk7XG4gICAgZmlsdGVyOiBub25lO1xuICAgIG9wYWNpdHk6IDE7XG59YClcbiAgICB9XG5cbiAgICBkaXNhYmxlKCl7XG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIilcbiAgICB9XG59IiwiaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5cbmNvbnN0IG5vcm1hbGl6ZWRQcmVmaXggPSBcImRhXCI7XG5jb25zdCByYW5kQ2xhc3MgPSBuZXcgUmVnRXhwKGBeKD8hJHtub3JtYWxpemVkUHJlZml4fS0pKCg/OltBLVphLXpdfFswLTldfC0pKyktKD86W0EtWmEtel18WzAtOV18LXxfKXs2fSRgKTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENsYXNzTm9ybWFsaXplciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkNsYXNzTm9ybWFsaXplciA9IHRoaXNcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xuICAgIH1cblxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh2YWx1ZS5lbmRzV2l0aChcInB4XCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiY2hcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJlbVwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcIm1zXCIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcImNhbGMoXCIpIHx8IHZhbHVlLmluY2x1ZGVzKFwicmdiYVwiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAobW9kdWxlLl9fZXNNb2R1bGUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZHVsZVtiYXNlQ2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnNwbGl0KFwiLVwiKS5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbWVsQ2FzZSA9IG1hdGNoWzFdLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KGNsYXNzZXNbY10pKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoYCR7bm9ybWFsaXplZFByZWZpeH0tJHtuZXdDbGFzc31gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XG4gICAgfVxuXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBpZiAoY2xhc3Nlc1tjXS5zdGFydHNXaXRoKGAke25vcm1hbGl6ZWRQcmVmaXh9LWApKSB0b1JlbW92ZS5wdXNoKGNsYXNzZXNbY10pO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XG4gICAgfVxuXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xuICAgICAgICBjb25zdCBjb250YWlucyA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnM7XG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgLy8gY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoY29udGFpbnMsIHRoaXMsIFt0b2tlbi5zcGxpdChcIiBcIilbMF1dKTtcbiAgICAgICAgICAgIC8vIHJldHVybiB0b2tlbnMuZXZlcnkodCA9PiBjb250YWlucy5jYWxsKHRoaXMsIHQpKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGQgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZDtcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGFkZCwgdGhpcywgdG9rZW5zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZW1vdmUgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJlbW92ZSwgdGhpcywgdG9rZW5zKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbG9yZWRUZXh0IHtcclxuICAgIGluamVjdENvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbENvbG9yZWRUZXh0KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWxDb2xvcmVkVGV4dCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgICAgIGlmICghcHJvcHMgfHwgIXByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnQgPSBwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtZXNzYWdlQ29udGVudC50eXBlIHx8ICFtZXNzYWdlQ29udGVudC50eXBlLnR5cGUgfHwgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLmRpc3BsYXlOYW1lICE9IFwiTWVzc2FnZUNvbnRlbnRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFR5cGUgPSBtZXNzYWdlQ29udGVudC50eXBlLnR5cGU7XHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFR5cGUuX19vcmlnaW5hbE1ldGhvZCkgcmV0dXJuOyAvLyBEb24ndCBwYXRjaCBhZ2FpblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUgPSBmdW5jdGlvbihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbFR5cGUocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSA/IHByb3BzLm1lc3NhZ2UuY29sb3JTdHJpbmcgfHwgXCJcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5zdHlsZSA9IHtjb2xvcjogcm9sZUNvbG9yfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ2luYWxUeXBlO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSwgb3JpZ2luYWxUeXBlKTtcclxuICAgICAgICB9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZU1hcmt1cCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF0ubWFya3VwXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5cIitjbGFzc05hbWVNYXJrdXAuc3BsaXQoXCIgXCIpWzBdKS5mb3JFYWNoKGVsZW0gPT4ge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLnNldFByb3BlcnR5KFwiY29sb3JcIiwgXCJcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtiZENvbmZpZywgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IHsgZW5jcnlwdFNldHRpbmdzQ2FjaGUsIGRlY3J5cHRTZXR0aW5nc0NhY2hlLCBwcm9jZXNzRmlsZSB9IGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShlbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9HRVRfQVBQX1BBVEhcIiksIFwibm9kZV9tb2R1bGVzXCIpKTtcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xuICAgIH1cbn1cbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xuY29uc3Qgb3JpZ2luYWxDU1NSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA/IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gOiAoKSA9PiB7cmV0dXJuIG51bGw7fTtcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj8oPzpcXHJcXG58XFxuKVteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xuXG5leHBvcnQgbGV0IGFkZG9uQ2FjaGUgPSB7fVxuXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29udGVudE1hbmFnZXIge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGltZUNhY2hlID0ge307XG4gICAgICAgIHRoaXMud2F0Y2hlcnMgPSB7fTtcbiAgICB9XG5cbiAgICBwYXRjaEV4dGVuc2lvbnMoKXtcbiAgICAgICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cbiAgICAgICAgaGFzUGF0Y2hlZCA9IHRydWVcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJ0aGVtZVwiKTtcbiAgICB9XG5cbiAgICBnZXQgcGx1Z2luc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fcGx1Z2luc0ZvbGRlciB8fCAodGhpcy5fcGx1Z2luc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInBsdWdpbnMvXCIpKSk7fVxuICAgIGdldCB0aGVtZXNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3RoZW1lc0ZvbGRlciB8fCAodGhpcy5fdGhlbWVzRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwidGhlbWVzL1wiKSkpO31cblxuICAgIGxvYWRBZGRvbkNlcnRpZmllckNhY2hlKCl7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpICE9PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IEpTT04ucGFyc2UoZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSkpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKGFkZG9uQ2FjaGUpXG4gICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2tleV1cbiAgICAgICAgICAgIGlmKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cblxuICAgICAgICAgICAgbGV0IHByb3BzID0gW3tcbiAgICAgICAgICAgICAgICBrZXk6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJyZXN1bHRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImhhc2hcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiXG4gICAgICAgICAgICB9XVxuICAgICAgICAgICAgZm9yKGxldCBwcm9wIG9mIHByb3BzKXtcbiAgICAgICAgICAgICAgICBpZighKHByb3Aua2V5IGluIHZhbHVlKSB8fCB0eXBlb2YgdmFsdWVbcHJvcC5rZXldICE9PSBwcm9wLnR5cGUpe1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHZhbHVlLmhhc2ggIT09IGtleSl7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodmFsdWUucmVzdWx0LnN1c3BlY3QpeyAvLyByZWZldGNoIGZyb20gcmVtb3RlIHRvIGJlIHN1cmUgeW91J3JlIHVwIHRvIGRhdGUuXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcbiAgICB9XG5cbiAgICBzYXZlQWRkb25DYWNoZSgpe1xuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKEpTT04uc3RyaW5naWZ5KGFkZG9uQ2FjaGUpKSlcbiAgICB9XG5cbiAgICB3YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gY29udGVudFR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSA9IGZzLndhdGNoKGJhc2VGb2xkZXIsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSByZXR1cm47XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSByZXR1cm4gcGx1Z2luTW9kdWxlLnVubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZW1lTW9kdWxlLnVubG9hZFRoZW1lKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5yZWxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUucmVsb2FkVGhlbWUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1bndhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdLmNsb3NlKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXTtcbiAgICB9XG5cbiAgICBleHRyYWN0TWV0YShjb250ZW50KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XG4gICAgICAgIGlmIChoYXNPbGRNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU9sZE1ldGEoY29udGVudCk7XG4gICAgICAgIGNvbnN0IGhhc05ld01ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvKipcIik7XG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xuICAgIH1cblxuICAgIHBhcnNlT2xkTWV0YShjb250ZW50KSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xuICAgICAgICBjb25zdCByYXdNZXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xuICAgICAgICBpZiAobWV0YS5pbmRleE9mKFwiTUVUQVwiKSA8IDApIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlscy50ZXN0SlNPTihyYXdNZXRhKTtcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XG4gICAgICAgIHBhcnNlZC5mb3JtYXQgPSBcImpzb25cIjtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG5cbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xuICAgICAgICBjb25zdCBibG9jayA9IGNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcbiAgICAgICAgb3V0LmZvcm1hdCA9IFwianNkb2NcIjtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBnZXRDb250ZW50UmVxdWlyZSh0eXBlKSB7XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IGlzUGx1Z2luID8gb3JpZ2luYWxKU1JlcXVpcmUgOiBvcmlnaW5hbENTU1JlcXVpcmU7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyBzZWxmLnBsdWdpbnNGb2xkZXIgOiBzZWxmLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XG4gICAgICAgICAgICBjb250ZW50ID0gVXRpbHMuc3RyaXBCT00oY29udGVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoY29udGVudCk7XG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XG4gICAgICAgICAgICBtZXRhLmFkZGVkID0gc3RhdHMuYXRpbWVNcztcbiAgICAgICAgICAgIG1ldGEubW9kaWZpZWQgPSBzdGF0cy5tdGltZU1zO1xuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgICAgIGlmICghaXNQbHVnaW4pIHtcbiAgICAgICAgICAgICAgICBtZXRhLmNzcyA9IGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGEuZm9ybWF0ID09IFwianNvblwiKSBtZXRhLmNzcyA9IG1ldGEuY3NzLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWRFeHBvcnQgPSAhVXRpbHMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XG4gICAgICAgICAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLndhcm4oXCJNb2R1bGUgTm90IEV4cG9ydGVkXCIsIGAke21ldGEubmFtZX0sIHBsZWFzZSBzdGFydCBzZXR0aW5nIG1vZHVsZS5leHBvcnRzYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgZmlsZW5hbWUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1ha2VQbGFjZWhvbGRlclBsdWdpbihkYXRhKSB7XG4gICAgICAgIHJldHVybiB7cGx1Z2luOiB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgIGdldE5hbWU6ICgpID0+IHtyZXR1cm4gZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWU7fSxcbiAgICAgICAgICAgICAgICBnZXRBdXRob3I6ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9LFxuICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiAoKSA9PiB7cmV0dXJuIGRhdGEubWVzc2FnZSA/IGRhdGEubWVzc2FnZSA6IFwiVGhpcyBwbHVnaW4gd2FzIHVuYWJsZSB0byBiZSBsb2FkZWQuIENoZWNrIHRoZSBhdXRob3IncyBwYWdlIGZvciB1cGRhdGVzLlwiO30sXG4gICAgICAgICAgICAgICAgZ2V0VmVyc2lvbjogKCkgPT4ge3JldHVybiBcIj8/P1wiO31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZSxcbiAgICAgICAgICAgIGZpbGVuYW1lOiBkYXRhLmZpbGVuYW1lLFxuICAgICAgICAgICAgc291cmNlOiBkYXRhLnNvdXJjZSA/IGRhdGEuc291cmNlIDogXCJcIixcbiAgICAgICAgICAgIHdlYnNpdGU6IGRhdGEud2Vic2l0ZSA/IGRhdGEud2Vic2l0ZSA6IFwiXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcblxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICAgIH0sIChoYXNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiBoYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCB0cnVlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZVtyZXN1bHQuaGFzaF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogcmVzdWx0Lmhhc2gsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcbiAgICAgICAgaWYoIWNvbnRlbnQubmFtZSlyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDYW5ub3QgZXNjYXBlIHRoZSBJRC5cIiwgZXJyb3I6IG5ldyBFcnJvcihcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIil9XG4gICAgICAgIGNvbnRlbnQuaWQgPSBVdGlscy5lc2NhcGVJRChjb250ZW50Lm5hbWUpO1xuICAgICAgICAvL2lmKCFpZClyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJJbnZhbGlkIElEXCIsIGVycm9yOiBuZXcgRXJyb3IoXCJQbGVhc2UgZml4IHRoZSBuYW1lIG9mIFwiK2ZpbGVuYW1lK1wiLiBCZXR0ZXJEaXNjb3JkIGNhbid0IGVzY2FwZSBhbiBJRC5cIil9XG4gICAgICAgIGlmIChpc1BsdWdpbikge1xuICAgICAgICAgICAgaWYgKCFjb250ZW50LnR5cGUpIHJldHVybjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29udGVudC5wbHVnaW4gPSBuZXcgY29udGVudC50eXBlKCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldO1xuICAgICAgICAgICAgICAgIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldID0gY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgYmR0aGVtZXNbY29udGVudC5uYW1lXTtcbiAgICAgICAgICAgIGJkdGhlbWVzW2NvbnRlbnQubmFtZV0gPSBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSAgIFxuXG4gICAgdW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlbGV0ZSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIHVubG9hZGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX07fVxuICAgIH1cblxuICAgIGlzTG9hZGVkKGZpbGVuYW1lLCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07fVxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIGZhbHNlO31cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xuICAgICAgICBjb25zdCBjYW50VW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcbiAgICAgICAgaWYgKGNhbnRVbmxvYWQpIHJldHVybiBjYW50VW5sb2FkO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XG4gICAgfVxuXG4gICAgbG9hZE5ld0NvbnRlbnQodHlwZSkge1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xuICAgICAgICBjb25zdCBjb250ZW50TGlzdCA9IE9iamVjdC52YWx1ZXMoaXNQbHVnaW4gPyBiZHBsdWdpbnMgOiBiZHRoZW1lcyk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjb250ZW50TGlzdC5maWx0ZXIodCA9PiAhZmlsZXMuaW5jbHVkZXModC5maWxlbmFtZSkpLm1hcChjID0+IGlzUGx1Z2luID8gYy5wbHVnaW4uZ2V0TmFtZSgpIDogYy5uYW1lKTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhY29udGVudExpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aChmaWxlRW5kaW5nKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZWRpciwgZikpLmlzRmlsZSgpKTtcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZEFsbENvbnRlbnQodHlwZSkge1xuICAgICAgICB0aGlzLnBhdGNoRXh0ZW5zaW9ucygpXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgbG9hZFBsdWdpbnMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJwbHVnaW5cIik7fVxuICAgIGxvYWRUaGVtZXMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJ0aGVtZVwiKTt9XG59O1xuXG4vKipcbiAqIERvbid0IGV4cG9zZSBjb250ZW50TWFuYWdlciAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XG4gKi8iLCJpbXBvcnQge2JkQ29uZmlnLCBtaW5TdXBwb3J0ZWRWZXJzaW9uLCBiYmRWZXJzaW9uLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5FcnJvcnMsIGJkdGhlbWVFcnJvcnMsIGJiZENoYW5nZWxvZywgZGVmYXVsdENvb2tpZSwgY3VycmVudERpc2NvcmRWZXJzaW9uLCBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQywgbGlnaHRjb3JkU2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5cbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2JkTG9nb1wiO1xuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9MaWdodGNvcmRcIjtcbmltcG9ydCBQbHVnaW5DZXJ0aWZpZXIgZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcbmltcG9ydCB2MiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5cbmxldCBtZXRob2RzXG5mdW5jdGlvbiBDb3JlKCkge31cblxuXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3JlLnByb3RvdHlwZSwgXCJtZXRob2RzXCIsIHtcbiAgICBnZXQoKXtcbiAgICAgICAgcmV0dXJuIG1ldGhvZHNcbiAgICB9XG59KVxuXG5Db3JlLnByb3RvdHlwZS5zZXRNZXRob2RzID0gZnVuY3Rpb24obSkge1xuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcbiAgICBtZXRob2RzID0gbVxufTtcblxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcbiAgICB0aGlzLmhhc1N0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmxhdCkge1xuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJiZFZlcnNpb24gKyBcIiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb2xkIHZlcnNpb24gKFwiICsgY3VycmVudERpc2NvcmRWZXJzaW9uICsgXCIpIG9mIERpc2NvcmQuIFBsZWFzZSB1cGRhdGUgeW91ciBEaXNjb3JkIGluc3RhbGxhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiZENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBiYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LkVEKSB7XG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIEVuaGFuY2VkRGlzY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LldlYlNvY2tldCAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUgJiYgd2luZG93LldlYlNvY2tldC5uYW1lLmluY2x1ZGVzKFwiUGF0Y2hlZFwiKSkge1xuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBQb3dlcmNvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dHJpYnV0ZXMuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XG5cbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xuICAgIHRoaXMuaW5pdFNldHRpbmdzKCk7XG5cbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XG4gICAgQkRWMi5pbml0aWFsaXplKCk7XG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xuICAgIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XG5cbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBBZGRvbnMgQ2FjaGVcIilcbiAgICBhd2FpdCBjb250ZW50TWFuYWdlci5sb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpXG5cbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xuICAgIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xuICAgIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcblxuICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCBCdWZmZXIuZnJvbShEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiksIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWRjLTBcIl0pIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLmJ0bi1kaXNjb25uZWN0XCIpLmNsaWNrKCk7XG4gICAgfSk7XG5cbiAgICBQbHVnaW5DZXJ0aWZpZXIuc3RhcnQoKVxuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpLmxlbmd0aCkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcbiAgICB0aGlzLmluaXRPYnNlcnZlcigpO1xuXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkge1xuICAgICAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcbiAgICAgICAgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IGJkcGx1Z2luRXJyb3JzLCB0aGVtZXM6IGJkdGhlbWVFcnJvcnN9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcbiAgICBpZiAoYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xuICAgICAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwidmVyc2lvblwiLCBiYmRWZXJzaW9uKTtcbiAgICB9XG5cbiAgICBFbW9qaU1vZHVsZS5zdGFydCgpXG5cbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVzc2FnZUhlYWRlci5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIENoYXQgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVtYmVyTGlzdC5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIE1lbWJlciBMaXN0IFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dGFjaG1lbnQuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XG5cbiAgICBpZihiZENvbmZpZy5oYXZlSW5zdGFsbGVkRGVmYXVsdCl7XG4gICAgICAgIGxldCBhbGVydCA9IFV0aWxzLmFsZXJ0KFwiRmlyc3QgSW5zdGFsbGF0aW9uXCIsIFwiQXMgaXQgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGluc3RhbGwgTGlnaHRjb3JkLCBXZSBhZGRlZCB0d28gZGVmYXVsdCB0aGVtZXMgYW5kIG9uZSBkZWZhdWx0IHBsdWdpbiBpbiB5b3VyIHBsdWdpbi90aGVtZSBmb2xkZXIuIENoZWNrIGl0IGluIHRoZSBQbHVnaW4vVGhlbWUgc2V0dGluZ3MuXCIpXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBhbGVydC5vbkNsb3NlKHJlc29sdmUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudCA+IGRpdi50eXBlV2luZG93cy0xemEtbjcud2l0aEZyYW1lLWhhWWx0SS50aXRsZUJhci1BQzRwR1YuaG9yaXpvbnRhbFJldmVyc2UtM3RSalk3LmZsZXgtMU8xR0tZLmRpcmVjdGlvblJvd1JldmVyc2UtbThJaklxLmp1c3RpZnlTdGFydC0yTkRGemkuYWxpZ25TdHJldGNoLURwR1BmMy5kYS10eXBlV2luZG93cy5kYS13aXRoRnJhbWUuZGEtdGl0bGVCYXIuZGEtaG9yaXpvbnRhbFJldmVyc2UuZGEtZmxleC5kYS1kaXJlY3Rpb25Sb3dSZXZlcnNlLmRhLWp1c3RpZnlTdGFydC5kYS1hbGlnblN0cmV0Y2ggPiBkaXYud29yZG1hcmtXaW5kb3dzLTF2MGxZRC53b3JkbWFyay0yaUREZm0uZGEtd29yZG1hcmtXaW5kb3dzLmRhLXdvcmRtYXJrXCIpXG4gICAgaWYobG9nbyl7XG4gICAgICAgIGxvZ28uc3R5bGUudG9wID0gXCIzcHhcIlxuICAgICAgICBsb2dvLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiNzBcIiB2aWV3Qm94PVwiMCAwIDcyLjU0IDEwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTVweCwgbWFyZ2luLXRvcDogMTBweFwiPlxuICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQ0LjgxLDkuNjdWNi4zM2MwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxQTMuNTMsMy41MywwLDAsMCw0Ni4yLDNjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNjdjMCwyLjIxLDEuODksMy4zMywzLjc3LDMuMzNhMy44NywzLjg3LDAsMCwwLDMuNDUtMi4xOGwtMi4xMi0xQzQ3LDExLjE3LDQ0LjgxLDEwLjg1LDQ0LjgxLDkuNjdaTTEwLjY4LDEyLjg5aDIuNDFWMy4xN0gxMC42OFpNNzEuNzYsMy4xNEg2OC4xOVY3LjIzTDcwLjU3LDkuNHYtNGgxLjI3Yy44MSwwLDEuMjEuNDEsMS4yMSwxdjNjMCwuNjMtLjM4LDEuMDUtMS4yMSwxLjA1SDY4LjE4djIuMzFoMy41N2MxLjkyLDAsMy43Mi0xLDMuNzItMy4yVjYuMzlDNzUuNDgsNC4xMyw3My42OCwzLjE0LDcxLjc2LDMuMTRaTTU0LjIyLDNjLTIsMC00LDEuMS00LDMuMzRWOS42NmMwLDIuMjMsMiwzLjM0LDQsMy4zNHMzLjk1LTEuMTEsMy45NS0zLjM0VjYuMzRDNTguMTksNC4xMSw1Ni4yLDMsNTQuMjIsM1ptMS41NSw2LjY2YzAsLjctLjc4LDEuMDYtMS41NCwxLjA2cy0xLjU1LS4zNS0xLjU1LTEuMDZWNi4zNGMwLS43Mi43NS0xLjEsMS41LTEuMXMxLjU5LjM1LDEuNTksMS4xWk02Ni44NCw2LjM0YzAtMi4yOS0xLjU4LTMuMi0zLjU1LTMuMkg1OS40NnY5LjczaDIuNDVWOS43N2guNDNsMi4yMiwzLjA5aDNMNjUsOS41MkM2Ni4xMyw5LjE1LDY2Ljg0LDguMTQsNjYuODQsNi4zNFpNNjMuMzMsNy42NUg2MS45MVY1LjQzaDEuNDJBMS4xMSwxLjExLDAsMSwxLDYzLjMzLDcuNjVaTTI5LjgzLDEzaDIuNDJWMy4wNkgyOS44M1Y2LjczbC0zLDBWMy4wOUgyNC43djkuNzhoMi4xNFY4LjY4bDMsMFpNMTcuMTYsOS43NlY2LjQyYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFhMy41NSwzLjU1LDAsMCwwLTMuMzYtMi4yNGMtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS43NmMwLDIuMjEsMiwzLjE1LDMuOSwzLjE1czMuNTgtMSwzLjU4LTNWNy41OEgxOC43OWwwLDEuMzZIMjAuM3YuNzdDMjAuMywxMC45MiwxNy4xNiwxMC45NCwxNy4xNiw5Ljc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMi45MyAtMylcIi8+XG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIwIDkuOTcgNi41IDEwIDYuNSA3LjYzIDIuNDEgNy42MyAyLjQxIDAuMjYgMCAyLjI2IDAgOS45N1wiLz5cbjwvc3ZnPmBcbiAgICB9XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dHJpYnV0ZXMgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICBsZXQgYXR0cmlic1BhdGNocyA9IFtdXG4gICAgdGhpcy5jYW5jZWxQYXRjaEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgYXR0cmlic1BhdGNocy5mb3JFYWNoKGUgPT4gZSgpKVxuICAgIH1cblxuICAgIHdoaWxlKCF2Mi5NZXNzYWdlQ29tcG9uZW50KWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKVxuICAgIFxuICAgIC8vIFRPRE86IHRyeSB0byBwYXRjaCBjb3JyZWN0bHkgdGhlIHVzZXIgcG9wb3V0IG9uIGEgbmV4dCB1cGRhdGVcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRGlzY29yZFRhZ1wiKVxuICAgIC50aGVuKERpc2NvcmRUYWcgPT4ge1xuICAgICAgICBsZXQgRGlzY29yZFRhZ0NvbXAgPSBEaXNjb3JkVGFnLmRlZmF1bHRcbiAgICAgICAgRGlzY29yZFRhZy5kZWZhdWx0ID0gZnVuY3Rpb24ocHJvcHMpe1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gRGlzY29yZFRhZ0NvbXAocHJvcHMpXG5cbiAgICAgICAgICAgIGxldCBpZCA9IHV1aWR2NCgpXG5cbiAgICAgICAgICAgIGxldCBiYWRnZURpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjVweFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxuICAgICAgICAgICAgICAgIGtleTogXCJiYWRnZXMtXCIraWQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmhlcml0XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW3JldHVyblZhbHVlXVxuXG4gICAgICAgICAgICBpZiAocHJvcHMudXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMudXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBwcm9wcy51c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChiYWRnZURpdilcbiAgICAgICAgICAgIGxldCBkaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGNoaWxkcmVuKVxuICAgICAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHByb3BzLnVzZXIsIGZhbHNlKVxuXG4gICAgICAgICAgICByZXR1cm4gZGl2XG4gICAgICAgIH1cbiAgICAgICAgRGlzY29yZFRhZy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gRGlzY29yZFRhZ0NvbXAuZGlzcGxheU5hbWVcbiAgICB9KVxuXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGlmKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZSl7IC8vIHRoaXMgY2FuIGJlIGEgYmxvY2tlZCBtZXNzYWdlIChub3Qgb3BlbmVkKVxuICAgICAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcImRhdGEtbWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxuICAgICAgICB9XG4gICAgfX0pKVxuICAgICAgICAvKlxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wibWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxuICAgIH19KSkqL1xufVxuXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xuICAgIGxldCB0aW1lc0NoZWNrZWQgPSAwO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfWApLmxlbmd0aCA+IDApIHRpbWVzQ2hlY2tlZCsrO1xuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7c2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTt9KTtcbiAgICB9KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLmluamVjdEV4dGVybmFscyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIC8vIE5vIGV4dGVybmFsc1xufTtcblxuQ29yZS5wcm90b3R5cGUuaW5pdFNldHRpbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XG4gICAgaWYoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpe1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBkZWZhdWx0UlBDKTtcbiAgICB9XG4gICAgaWYoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSl7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZXR0aW5nc1BhbmVsLmxvYWRTZXR0aW5ncygpO1xuICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gZGVmYXVsdENvb2tpZSkge1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW3NldHRpbmddID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5wcm90b3R5cGUgJiYgZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucylcbiAgICAudGhlbihzZXR0aW5nTW9kdWxlID0+IHtcblxuICAgICAgICBsZXQgZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zXG4gICAgICAgIHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldFByZWRpY2F0ZVNlY3Rpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxuXG4gICAgICAgICAgICBpZighcmVzdWx0WzFdKXJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGlmKHJlc3VsdFsxXS5zZWN0aW9uID09PSBcIk15IEFjY291bnRcIil7IC8vIHVzZXIgc2V0dGluZ3MsIG5vdCBndWlsZCBzZXR0aW5nc1xuICAgICAgICAgICAgICAgIGxldCBwb3BlZCA9IFtdXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXG5cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5zZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIodGhpcykpXG5cbiAgICAgICAgICAgICAgICB3aGlsZShwb3BlZFswXSl7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvcGVkLnBvcCgpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgIH0pXG59O1xuXG5cbmxldCBjbGFzc05hbWVMYXllclxubGV0IGNsYXNzTmFtZVNvY2lhbExpbmtzXG5sZXQgY2xhc3NOYW1lTW9kYWxcblxuQ29yZS5wcm90b3R5cGUuaW5pdE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luTW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBwbHVnaW5Nb2R1bGUucmF3T2JzZXJ2ZXIobXV0YXRpb24pO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xuXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTGF5ZXIpY2xhc3NOYW1lTGF5ZXIgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZVNvY2lhbExpbmtzKWNsYXNzTmFtZVNvY2lhbExpbmtzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zb2NpYWxMaW5rcyAmJiB0eXBlb2YgZS5zb2NpYWxMaW5rcyA9PT0gXCJzdHJpbmdcIilbMF0uc29jaWFsTGlua3NcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVNb2RhbCljbGFzc05hbWVNb2RhbCA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubW9kYWwgJiYgdHlwZW9mIGUubW9kYWwgPT09IFwic3RyaW5nXCIgJiYgZS5pbm5lciAmJiB0eXBlb2YgZS5pbm5lciA9PT0gXCJzdHJpbmdcIiAmJiAhZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUpWzBdLm1vZGFsXG5cbiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcikpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpID09PSBcIkdVSUxEX1NFVFRJTkdTXCIpe1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lU29jaWFsTGlua3MpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRFbGVtZW50ID09IGRvY3VtZW50LmJvZHkgJiYgbm9kZS5xdWVyeVNlbGVjdG9yKFwiI2FjZV9zZXR0aW5nc21lbnVcIikpIG5vZGUuaWQgPSBcImFjZV9zZXR0aW5nc21lbnVfY29udGFpbmVyXCI7XG5cbiAgICAgICAgICAgIC8vIEVtb2ppIFBpY2tlclxuICAgICAgICAgICAgLy9ub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYW5pbWF0b3JMZWZ0LTFFUXhVMFwiKVxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XG5cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbWFpbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5zaG93Q2hhbmdlbG9nTW9kYWwgPSBmdW5jdGlvbihvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xufTtcblxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xuICAgIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaFNvY2lhbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgaWYgKCFUYWJCYXIpIHJldHVybjtcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW47XG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCB8fCBjaGlsZHJlbi5sZW5ndGggPCAzKSByZXR1cm47XG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XG4gICAgICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcbiAgICAgICAgaWYgKEFuY2hvcikge1xuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZSA9IG5ld09uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxuICAgICAgICAgICAgc2l6ZXMsXG4gICAgICAgICAgICBjbGFzc05hbWVWZXJzaW9uSGFzaFxuICAgICAgICBdID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JNdXRlZClbMF0uY29sb3JNdXRlZCxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcbiAgICAgICAgXVxuXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcbiAgICAgICAgY29uc3QgYnVpbGRJbmZvID0gZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfR0VUX0JVSUxEX0lORk9TXCIpXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBbXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtidWlsZEluZm8udmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhidWlsZEluZm8uY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgQkJEICR7YmJkVmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgdmVyc2lvbkhhc2gpKVxuICAgICAgICBdXG4gICAgICAgIFxuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVmVyc2lvbnMgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbFZlcnNpb25zKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4uc3BsaWNlKDEsIDAsIGFkZGl0aW9uYWwpO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgfTtcbiAgICB9fSk7XG59O1xuXG5jb25zdCBnZXRHdWlsZENsYXNzZXMgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XG4gICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJndWlsZHNFcnJvclwiLCBcInNlbGVjdGVkXCIpO1xuICAgIGNvbnN0IHBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImJsb2JDb250YWluZXJcIik7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IEd1aWxkQ2xhc3NlcyA9IGdldEd1aWxkQ2xhc3NlcygpO1xuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xuICAgIGNvbnN0IGJsb2JDbGFzcyA9IEd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcbiAgICBjb25zdCByZWFjdEluc3RhbmNlID0gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2xpc3RJdGVtQ2xhc3N9IC4ke2Jsb2JDbGFzc31gKS5wYXJlbnRFbGVtZW50KTtcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XG4gICAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xuICAgIHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkQ29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkRGF0YSA9IGRhdGEudGhpc09iamVjdC5wcm9wcztcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWVcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIGNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuc2VsZWN0ZWQpIGNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSBjbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYmFkZ2UpIGNsYXNzTmFtZSArPSBcIiBiZC1iYWRnZVwiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSBjbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgICAgIH1cbiAgICB9fSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkUGlsbHMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgIW0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQudG9TdHJpbmcgJiYgbS5kZWZhdWx0LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJ0cmFuc2xhdGUzZFwiKSk7XG4gICAgaWYgKCFndWlsZFBpbGwpIHJldHVybjtcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xuICAgICAgICBpZiAocHJvcHMudW5yZWFkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xuICAgICAgICBpZiAocHJvcHMuaG92ZXJlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xuICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcbiAgICB9fSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IEd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XG4gICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xuICAgIGNvbnN0IEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xuICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkcy5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlblszXS50eXBlID0gR3VpbGRTZXBhcmF0b3I7XG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuQXR0YWNobWVudFBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgQXR0YWNobWVudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF0dGFjaG1lbnRcIilbMF0gLy8gdGVtcG9yYXJ5XG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgaWYgKCFBbmNob3IgfHwgIUF0dGFjaG1lbnQgfHwgIUF0dGFjaG1lbnQuZGVmYXVsdCkgcmV0dXJuO1xuICAgIHRoaXMuQXR0YWNobWVudFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goQXR0YWNobWVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXJldHVyblxuICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0gfHwgbnVsbFxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdHRhY2htZW50IHx8ICFhdHRhY2htZW50LnVybClyZXR1cm5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGlkOiBcImNlcnRpZmllZC1cIitpZFxuICAgICAgICB9KSlcbiAgICAgICAgUGx1Z2luQ2VydGlmaWVyLnBhdGNoKGF0dGFjaG1lbnQsIFwiY2VydGlmaWVkLVwiK2lkKVxuICAgIH19KVxufVxuXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBNZXNzYWdlSGVhZGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJNZXNzYWdlVGltZXN0YW1wXCIpO1xuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGlmICghQW5jaG9yIHx8ICFNZXNzYWdlSGVhZGVyIHx8ICFNZXNzYWdlSGVhZGVyLmRlZmF1bHQpIHJldHVybjtcbiAgICB0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lc3NhZ2VIZWFkZXIsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGhvciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwibWVzc2FnZS5hdXRob3JcIik7XG4gICAgICAgIC8vIGNvbnN0IGhlYWRlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzXCIpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW5cIik7XG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF1dGhvciB8fCAhYXV0aG9yLmlkKXJldHVyblxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xuICAgICAgICBpZiAoYXV0aG9yLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IGF1dGhvci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgYXV0aG9yLCB0cnVlKVxuICAgIH19KTtcbn07XG5cbmZ1bmN0aW9uIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBjaGF0KXtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiYWRnZXMtXCIraWQpXG4gICAgICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm5cbiAgICAgICAgaWYoZGl2LmNoaWxkTm9kZXMubGVuZ3RoKXJldHVyblxuICAgICAgICBsZXQgYmxvY2tEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgICAgIGJsb2NrRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoYmxvY2tEaXYpXG5cbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG5cbiAgICAgICAgZGlzdGFudC5nZXRCYWRnZXModXNlci5pZClcbiAgICAgICAgLnRoZW4oYmFkZ2VzID0+IHtcbiAgICAgICAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcIjE2cHhcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbG9nb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTZweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYWRnZS5zY29wZXMuZm9yRWFjaChzY29wZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlID09PSBcInVzZXJcIil7Ly8gcmVxdWlyZSB1c2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy51c2VyID0gdXNlclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkgXG4gICAgICAgICAgICAgICAgaWYoIWJhZGdlLmhyZWYpe1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5BbmNob3IgPSBBbmNob3JcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuaHJlZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogYmFkZ2UubmFtZX0sXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlLmhyZWYgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBiYWRnZS5ocmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoZWxlbWVudCwgZGl2MilcbiAgICAgICAgICAgICAgICBkaXYyLmNoaWxkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubWVtYmVyTGlzdFBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGlmICghQW5jaG9yIHx8ICFNZW1iZXJMaXN0SXRlbSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUucmVuZGVyRGVjb3JhdG9ycykgcmV0dXJuO1xuICAgIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnRoaXNPYmplY3QsIFwicHJvcHMudXNlclwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQpcmV0dXJuXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XG4gICAgICAgIGlmICh1c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpe1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiYWRnZXMtXCIraWR9KVxuICAgICAgICApXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBmYWxzZSlcbiAgICB9fSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgYW4gaW5qZWN0aW9uIHBhdGgsIHNvIHdlIGRvIG5vdCBuZWVkIHRoZSBjb2RlIGJlbG93LiBcbiAgICAvLyBJbnNlcnQgY29tbWVudHMgc28gaXQgd2lsbCBiZSBlcmFzZWQgd2hlbiBwcm9kdWN0aW9uLlxuICAgIFxuICAgIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcbiAgICBpZiAoIWluamVjdGlvblBhdGgpIHJldHVybiBmYWxzZTtcblxuICAgIC8qXG5cbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG4gICAgY29uc3Qgcm1yZiA9IHJlcXVpcmUoXCJyaW1yYWZcIik7XG4gICAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XG5cbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XG4gICAgY29uc3QgZm9sZGVyTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5qZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xuICAgIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xuICAgIGNvbnN0IGV4dHJhY3RlZEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcIkJldHRlckRpc2NvcmRBcHAtaW5qZWN0b3JcIik7XG5cbiAgICAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkRvd25sb2FkaW5nIFwiICsgemlwTGluayk7XG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgcmVxdWVzdC5nZXQoe3VybDogemlwTGluaywgZW5jb2Rpbmc6IG51bGx9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKHNhdmVkWmlwLCByZXMpKTtcbiAgICAgICAgICAgIGlmIChhbHJlYWR5RXhpc3RzKSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMucmVuYW1lKHNhdmVkWmlwLCBgJHtzYXZlZFppcH0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcblxuICAgICAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xuICAgICAgICAgICAgZnMud3JpdGVGaWxlKHNhdmVkWmlwLCBib2R5LCBlcnIgPT4gcmVzb2x2ZSghZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmICghc3VjY2VzcykgcmV0dXJuIHN1Y2Nlc3M7XG5cbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXG4gICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoZXh0cmFjdGVkRm9sZGVyLCByZXMpKTtcbiAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcbiAgICBcbiAgICAvLyBVbnppcCB0aGUgZG93bmxvYWRlZCB6aXAgZmlsZVxuICAgIGNvbnN0IHppcGZpbGUgPSBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHlhdXpsLm9wZW4oc2F2ZWRaaXAsIHtsYXp5RW50cmllczogdHJ1ZX0sIChlcnIsIHppcCkgPT4gIHIoemlwKSkpO1xuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICAvLyBTa2lwIGRpcmVjdG9yaWVzLCB0aGV5IGFyZSBoYW5kbGVkIHdpdGggbWtkaXJwXG4gICAgICAgIGlmIChlbnRyeS5maWxlTmFtZS5lbmRzV2l0aChcIi9cIikpIHJldHVybiB6aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gICAgICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRXh0cmFjdGluZyBcIiArIGVudHJ5LmZpbGVOYW1lKTtcbiAgICAgICAgLy8gTWFrZSBhbnkgbmVlZGVkIHBhcmVudCBkaXJlY3Rvcmllc1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XG4gICAgICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShmdWxsUGF0aCkpO1xuICAgICAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbihlcnIsIHJlYWRTdHJlYW0pIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBzdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICByZWFkU3RyZWFtLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKCkge3ppcGZpbGUucmVhZEVudHJ5KCk7fSk7IC8vIEdvIHRvIG5leHQgZmlsZSBhZnRlciB0aGlzXG4gICAgICAgICAgICByZWFkU3RyZWFtLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZnVsbFBhdGgpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xuXG4gICAgLy8gV2FpdCBmb3IgdGhlIGZpbmFsIGZpbGUgdG8gZmluaXNoXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB6aXBmaWxlLm9uY2UoXCJlbmRcIiwgcmVzb2x2ZSkpO1xuXG4gICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBmaW5hbCBzdGVwXG4gICAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoaW5qZWN0aW9uUGF0aCwgYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XG5cbiAgICAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcbiAgICBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBpbmplY3Rpb25QYXRoLCBlcnIgPT4gcmVzb2x2ZSghZXJyKSkpO1xuICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gSWYgcmVuYW1lIGhhZCBpc3N1ZXMsIGRlbGV0ZSB3aGF0IHdlIHRyaWVkIHRvIHJlbmFtZSBhbmQgcmVzdG9yZSBiYWNrdXBcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihleHRyYWN0ZWRGb2xkZXIsIHJlc29sdmUpKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoYmFja3VwRm9sZGVyLCBpbmplY3Rpb25QYXRoLCByZXNvbHZlKSk7XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cblxuICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXG4gICAgLy8gQ2xlYW51cCB0aGUgYmFja3VwIGZvbGRlciB0aGVuIHJlbW92ZSB0aGUgemlwXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMudW5saW5rKHNhdmVkWmlwLCByZXNvbHZlKSk7XG5cbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xuICAgIHJldHVybiBzdWNjZXNzOyovXG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpO1xuXG4vKipcbiAqIERvbid0IGV4cG9zZSBjb3JlIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcbiAqLyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5cbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuY29uc3QgcmVsZWFzZUNoYW5uZWwgPSBEaXNjb3JkTmF0aXZlLmdsb2JhbHMgPyBEaXNjb3JkTmF0aXZlLmdsb2JhbHMucmVsZWFzZUNoYW5uZWwgOiBEaXNjb3JkTmF0aXZlLmFwcCA/IERpc2NvcmROYXRpdmUuYXBwLmdldFJlbGVhc2VDaGFubmVsKCkgOiBcInN0YWJsZVwiO1xuXG5sZXQgZGF0YVBhdGggPSBcIlwiO1xuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikgZGF0YVBhdGggPSBwcm9jZXNzLmVudi5BUFBEQVRBO1xuZWxzZSBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIikgZGF0YVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5lbnYuSE9NRSwgXCJMaWJyYXJ5XCIsIFwiUHJlZmVyZW5jZXNcIik7XG5lbHNlIGRhdGFQYXRoID0gcHJvY2Vzcy5lbnYuWERHX0NPTkZJR19IT01FID8gcHJvY2Vzcy5lbnYuWERHX0NPTkZJR19IT01FIDogcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUsIFwiLmNvbmZpZ1wiKTtcbmRhdGFQYXRoID0gcGF0aC5qb2luKGRhdGFQYXRoLCBcIkJldHRlckRpc2NvcmRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXRhU3RvcmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmRhdGEgPSB7c2V0dGluZ3M6IHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fX07XG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGF0YVN0b3JlID0gdGhpc1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcInV0Zi04XCIpKVxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnNldHRpbmdzRmlsZSkpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBzZXR0aW5ncyA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuc2V0dGluZ3NGaWxlKTtcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHtbcmVsZWFzZUNoYW5uZWxdOiBzZXR0aW5nc30pO1xuICAgICAgICAgICAgZWxzZSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCBzZXR0aW5ncyk7XG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICBVdGlscy5hbGVydChcIkNvcnJ1cHQgU3RvcmFnZVwiLCBcIlRoZSBiZCBzdG9yYWdlIGhhcyBzb21laG93IGJlY29tZSBjb3JydXB0LiBZb3UgbWF5IGVpdGhlciB0cnkgdG8gc2FsdmFnZSB0aGUgZmlsZSBvciBkZWxldGUgaXQgdGhlbiByZWxvYWQuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGluamVjdGlvblBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XG4gICAgZ2V0IEJERmlsZSgpIHtyZXR1cm4gdGhpcy5fQkRGaWxlIHx8ICh0aGlzLl9CREZpbGUgPSBwYXRoLnJlc29sdmUoZGF0YVBhdGgsIFwiYmRzdG9yYWdlLmpzb25cIikpO31cbiAgICBnZXQgc2V0dGluZ3NGaWxlKCkge3JldHVybiB0aGlzLl9zZXR0aW5nc0ZpbGUgfHwgKHRoaXMuX3NldHRpbmdzRmlsZSA9IHBhdGgucmVzb2x2ZShkYXRhUGF0aCwgXCJiZHNldHRpbmdzLmpzb25cIikpO31cbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XG5cbiAgICBnZXRTZXR0aW5nR3JvdXAoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSA9IGRhdGE7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgZ2V0QkREYXRhKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2tleV0gfHwgXCJcIjtcbiAgICB9XG5cbiAgICBzZXRCRERhdGEoa2V5LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcbiAgICB9XG5cbiAgICBzZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwidXRmLThcIik7XG4gICAgfVxuXG4gICAgZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICB9XG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGV2TW9kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZGVidWdMaXN0ZW5lciA9IHRoaXMuZGVidWdMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyID0gdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGVidWdMaXN0ZW5lcigpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIHRoaXMuc3RhcnRDb3B5U2VsZWN0b3IoKTtcbiAgICB9XG4gICAgXG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLnN0b3BDb3B5U2VsZWN0b3IoKTtcbiAgICB9XG5cbiAgICBzdGFydERlYnVnTGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBzdG9wRGVidWdMaXN0ZW5lcigpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBzdGFydENvcHlTZWxlY3RvcigpIHtcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBzdG9wQ29weVNlbGVjdG9yKCkge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZGVidWdMaXN0ZW5lcihlKSB7XG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjWyVjRGV2TW9kZSVjXSAlY0JyZWFrL1Jlc3VtZVwiLCBcImNvbG9yOiByZWQ7XCIsIFwiY29sb3I6ICMzMDMwMzA7IGZvbnQtd2VpZ2h0OjcwMDtcIiwgXCJjb2xvcjpyZWQ7XCIsIFwiXCIpO1xuICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICB9XG4gICAgfVxuXG4gICAgY29weVNlbGVjdG9yTGlzdGVuZXIoZSkge1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudGFyZ2V0KTtcbiAgICBcbiAgICAgICAgICAgIGxldCBbXG4gICAgICAgICAgICAgICAgY2xhc3NMYXllciwgXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xuICAgICAgICAgICAgXSA9IFtcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuZGlzYWJsZWRQb2ludGVyRXZlbnRzKVswXSxcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1lbnUpWzBdXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcbiAgICAgICAgICAgICAgICBpZighY2xhc3NJdGVtcyB8fCAhY2xhc3NMYXllci5sYXllcilyZXR1cm4gY29uc29sZS5sb2coY2xhc3NJdGVtcywgY2xhc3NMYXllci5sYXllcilcblxuICAgICAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLm1lbnUpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5xdWVyeShcIiNhcHAtbW91bnQgPiAuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NMYXllci5sYXllckNvbnRhaW5lcikpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NMYXllci5sYXllcn1cIj5gKTtcbiAgICAgICAgICAgICAgICAgICAgY20gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5tZW51fSAke2NsYXNzSXRlbXMuc3R5bGVGbGV4aWJsZX0gJHtjbGFzc0l0ZW1zLmFjY29tbW9kYXRlU2Nyb2xsYmFyfSBiZC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIlwiPjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuYXBwZW5kKGNtKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gZS5jbGllbnRZICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUubGVmdCA9IGUuY2xpZW50WCArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJtZW51XCIpXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5pZCA9IFwiYmQtY29weS1zZWxlY3Rvci1jb250ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJDb3B5IFNlbGVjdG9yIEFjdGlvbnNcIilcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlckNsYXNzZXMgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNjcm9sbGVyV3JhcClbMF1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJXcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyQ2xhc3Nlcy50aGVtZUdob3N0SGFpcmxpbmV9XCI+PC9kaXY+YClcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXIpWzBdLnNjcm9sbGVyfSAke2NsYXNzSXRlbXMuc2Nyb2xsZXJ9XCI+PC9kaXY+YClcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXJXcmFwLmFwcGVuZChzY3JvbGxlcilcbiAgICAgICAgICAgICAgICAgICAgY20uYXBwZW5kKHNjcm9sbGVyV3JhcClcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDTSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21XcmFwLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBjbS5wYXJlbnRFbGVtZW50XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBjbS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF1cbiAgICAgICAgICAgICAgICBjb25zdCBjbWcgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiByb2xlPVwiZ3JvdXBcIj48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY29uc3QgY21pID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMuaXRlbX0gJHtjbGFzc0l0ZW1zLmxhYmVsQ29udGFpbmVyfSAke2NsYXNzSXRlbXMuY29sb3JEZWZhdWx0fVwiIHJvbGU9XCJtZW51aXRlbVwiIGlkPVwiYmQtY29weS1zZWxlY3Rvci1pdGVtLWNtXCI+PC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5sYWJlbH1cIj5Db3B5IFNlbGVjdG9yPC9kaXY+YCkpO1xuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBCRFYyLk5hdGl2ZU1vZHVsZS5jb3B5KHNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IERPTS5xdWVyeUFsbChcImRpdltyb2xlPW1lbnVpdGVtXS5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyAmJiBlbGVtZW50cy5mb3JFYWNoKGVsZW0gPT4gZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZCkpXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QuYWRkKGNsYXNzSXRlbXMuZm9jdXNlZClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY21pLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgY21nLmFwcGVuZChjbWkpO1xuICAgICAgICAgICAgICAgIGlmKHNjcm9sbGVyLmNoaWxkTm9kZXMubGVuZ3RoKXsgLy8gYXBlbmQgYSBzZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIGNsYXNzPVwiJHtjbGFzc0l0ZW1zLnNlcGFyYXRvcn1cIj48L2Rpdj5gKVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoc2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoY21nKTtcbiAgICAgICAgICAgICAgICBpZihjbVdyYXAuY2xpZW50SGVpZ2h0IDwgY21XcmFwLnNjcm9sbEhlaWdodCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmcgXCIrY21XcmFwLnN0eWxlLnRvcClcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IChjbVdyYXAuc3R5bGUudG9wIC0gY21nLmNsaWVudEhlaWdodCkgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmdcIitjbVdyYXAuc3R5bGUudG9wKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXR0YWNoLCAxKTtcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0b3IoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBmdWxsUGF0aChlbCl7XG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgICAgICAgIHdoaWxlIChlbC5wYXJlbnROb2RlKXtcbiAgICAgICAgICAgICAgaWYgKGVsLmlkKXtcbiAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KCcjJytlbC5pZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGlmIChlbD09ZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LmZyb20oZWwuY2xhc3NMaXN0LmVudHJpZXMoKSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKSk7XG4gICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MSxlPWVsO2UucHJldmlvdXNFbGVtZW50U2libGluZztlPWUucHJldmlvdXNFbGVtZW50U2libGluZyxjKyspO1xuICAgICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrKCh0eXBlb2YgZWwuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsLmNsYXNzTmFtZSkgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICEhZSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKStcIjpudGgtY2hpbGQoXCIrYytcIilcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsPWVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuYW1lcy5qb2luKFwiID4gXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdWxsUGF0aChlbGVtZW50KVxuICAgIH1cbn07IiwiZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc2FibGVUeXBpbmcge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuc3RhcnRUeXBpbmcpXHJcbiAgICAgICAgLnRoZW4odHlwaW5nTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmdcclxuICAgICAgICAgICAgdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RhcnRUeXBpbmcuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RvcFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmdcclxuICAgICAgICAgICAgdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RvcFR5cGluZyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdG9wVHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzYWJsZVR5cGluZyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2VcclxuICAgIH1cclxufSIsImltcG9ydCBCdWdIdW50ZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL2J1Z19odW50ZXJcIlxuaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXG5pbXBvcnQgeyBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENpcmN1cyBmcm9tIFwiLi4vc3ZnL2NpcmN1c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXVpZHY0KCkgeyAvLyBHZW5lcmF0ZSBVVUlEIChObyBjcnlwdG8gcm5nKVxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gICAgfSk7XG59ICBcblxuY29uc3QgYXdhaXRpbmdCYWRnZXNQcm9taXNlcyA9IHt9XG5sZXQgYmFkZ2VzVG9GZXRjaCA9IFtdXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXN0YW50U2VydmVyIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLl9jYWNoZSA9IHtcbiAgICAgICAgICAgIGJhZGdlczoge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc3RhbnRTZXJ2ZXIgPSB0aGlzXG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlKCl7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZVxuICAgIH1cblxuICAgIHNldCBjYWNoZShkYXRhKXtcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHRoaXMuX2NhY2hlICE9PSBcIm9iamVjdFwiKXJldHVybiB0aGlzLl9jYWNoZSA9IGRhdGFcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jYWNoZSwgZGF0YSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY3VzdG9tIGJhZGdlcyBmcm9tIHRoZSB1c2VyIElELlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyIFRoZSB1c2VyIElEIFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnN0YW50c1tcImJhZGdlc1wiXT59XG4gICAgICovXG4gICAgYXN5bmMgZ2V0QmFkZ2VzKHVzZXIpe1xuICAgICAgICBpZih0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXSlyZXR1cm4gdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cbiAgICAgICAgaWYoYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSlyZXR1cm4gYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxuXG4gICAgICAgIGxldCByZXNvbHZlXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiAocmVzb2x2ZSA9IHJlcykpXG4gICAgICAgIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0gPSBuZXdQcm9taXNlXG5cbiAgICAgICAgY29uc3QgYmFkZ2VzID0gW11cbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBDb25zdGFudHMuYmFkZ2VzKXtcbiAgICAgICAgICAgIGlmKGJhZGdlLmRlZmF1bHRVc2Vycy5pbmNsdWRlcyh1c2VyKSliYWRnZXMucHVzaChiYWRnZSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmZXRjaGVkQmFkZ2VzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXJldHVybiByZXNvbHZlKFtdKVxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB1c2VycyA9IGJhZGdlc1RvRmV0Y2hcbiAgICAgICAgICAgICAgICBpZih1c2Vycy5sZW5ndGggPT09IDApcmV0dXJuXG4gICAgICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaCA9IFtdXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdChSb3V0ZXMuYmFkZ2VzLCBcIlBPU1RcIiwgSlNPTi5zdHJpbmdpZnkodXNlcnMubWFwKGUgPT4gZVswXSkpKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBzZXJ2ZXIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzLmpzb24oKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB1c2VyIG9mIHJlc3BvbnNlQm9keSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHVzZXJzLmZpbmQocHJvbWlzZSA9PiBwcm9taXNlWzBdID09PSB1c2VyLnVzZXJfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlWzFdKHVzZXIuYmFkZ2VzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgaWYoIShlcnIgaW5zdGFuY2VvZiBMaWdodGNvcmRFcnJvcikpY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICB9KVxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIGZldGNoZWRCYWRnZXMpe1xuICAgICAgICAgICAgaWYoIUNvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBXZSBkbyBub3QgaGF2ZSB0aGUgQ29tcG9uZW50LCBza2lwIGl0LlxuICAgICAgICAgICAgaWYoYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gQWxyZWFkeSBpbnNlcnRlZC5cbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKENvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlID0ge1xuICAgICAgICAgICAgYmFkZ2VzOiBPYmplY3QuYXNzaWduKHRoaXMuY2FjaGUuYmFkZ2VzLCB7W3VzZXJdOiBiYWRnZXN9KVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXG4gICAgICAgIH0sIDYwMDAwMCk7XG5cbiAgICAgICAgcmVzb2x2ZShiYWRnZXMpXG4gICAgICAgIGRlbGV0ZSBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXG4gICAgICAgIHJldHVybiBiYWRnZXNcbiAgICB9XG59XG5cbmNvbnN0IGhhbmRsZVJlcXVlc3QgPSBmdW5jdGlvbihyb3V0ZSwgbWV0aG9kLCBkYXRhKXtcbiAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSl7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgTGlnaHRjb3JkRXJyb3IoXCJUaGUgY3VycmVudCBzZXR0aW5ncyBibG9ja2VkIHRoZSByZXF1ZXN0LlwiKSlcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVGZXRjaChgJHtDb25zdGFudHMuU0VSVkVSX1VSTH0vYXBpL3YxJHtyb3V0ZX1gLCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDTElFTlRcIjogXCJMaWdodGNvcmRcIixcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uIHx8IFwiTm9uZTo6QW5vbnltb3VzXCJcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKGRhdGEgPyB7XG4gICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgIH0gOiB7fSlcbiAgICB9KVxufVxuXG5jbGFzcyBMaWdodGNvcmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTGlnaHRjb3JkRXJyb3JcIlxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IENvbnN0YW50cyA9IHtcbiAgICBTRVJWRVJfVVJMOiBcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXpcIixcbiAgICBiYWRnZXM6IFsgLy8gVE9ETzogQWRkIG1vcmUgYmFkZ2VzICsgc2VydmVyIHNpZGUgc3ZnXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkIEJ1ZyBIdW50ZXJcIixcbiAgICAgICAgICAgIGlkOiBcImYwNDY5OGY1LTgxNmItNDFlMy1iZDAxLTkyMjkxMTkzZDdhNVwiLFxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXG4gICAgICAgICAgICAgICAgXCI2OTY0ODExOTQ0NDMwMTQxNzRcIixcbiAgICAgICAgICAgICAgICBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcbiAgICAgICAgICAgIGNvbXBvbmVudDogQnVnSHVudGVyQmFkZ2UsXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvYmFkZ2VzI2J1Z19odW50ZXJcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiBcIkJ1ZmZvb25cIixcbiAgICAgICAgICAgIGlkOiBcIjA2OTA0ZDMxLTY1YjQtNDFlYy1hNTBjLTg2NThiYmQxYWY5NlwiLFxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXG4gICAgICAgICAgICAgICAgXCIzODkwMTY4OTU1NDM3MDU2MDJcIixcbiAgICAgICAgICAgICAgICBcIjY2NDYwMDEzNDUyODY2MzU2NVwiLFxuICAgICAgICAgICAgICAgIFwiNjI1MzUwNjU3ODI5ODk2MjI0XCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxuICAgICAgICAgICAgY29tcG9uZW50OiBDaXJjdXMsXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8veW91dHUuYmUvRUp0YjZ6LWRsVDg/dD0xNDVcIlxuICAgICAgICB9XG4gICAgXVxufVxuXG5leHBvcnQgY29uc3QgUm91dGVzID0ge1xuICAgIGJhZGdlczogYC91c2Vycy9iYWRnZXNgXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBaYWNoYXJ5IFJhdWVuXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZFxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxuICogUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcbiAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuICogXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2VcbiAqIEBuYW1lIE9mZnNldFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IC0gUmlnaHQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib3R0b20gLSBCb3R0b20gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIE91dGVyIGhlaWdodCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBPdXRlciB3aWR0aCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKi9cblxuIC8qKlxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXG4gKiBAY2FsbGJhY2sgbW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyXG4gKi9cbiBcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTVRvb2xzIHtcblxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcbiAgICB9XG5cbiAgICAvKipcblx0ICogQWRkcyBhIHN0eWxlIHRvIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNzcyAtIGNzcyB0byBhZGQgdG8gdGhlIGRvY3VtZW50XG5cdCAqL1xuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKERPTVRvb2xzLmNyZWF0ZUVsZW1lbnQoYDxzdHlsZSBpZD1cIiR7aWR9XCI+JHtjc3N9PC9zdHlsZT5gKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhIHN0eWxlIGZyb20gdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcblx0ICovXG5cdHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcy9yZXF1aXJlcyBhIHJlbW90ZSBzY3JpcHQgdG8gYmUgbG9hZGVkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIGZyb20gd2hpY2ggdG8gbG9hZCB0aGUgc2NyaXB0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2NyaXB0IGlzIGxvYWRlZFxuXHQgKi9cblx0c3RhdGljIGFkZFNjcmlwdChpZCwgdXJsKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRcdHNjcmlwdC5pZCA9IGlkO1xuXHRcdFx0c2NyaXB0LnNyYyA9IHVybDtcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcblx0XHRcdHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc2NyaXB0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgcmVtb3RlIHNjcmlwdCBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlU2NyaXB0KGlkKSB7XG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG4gICAgXG4gICAgLy8gaHR0cHM6Ly9qYXZhc2NyaXB0LmluZm8vanMtYW5pbWF0aW9uXG4gICAgc3RhdGljIGFuaW1hdGUoe3RpbWluZyA9IF8gPT4gXywgdXBkYXRlLCBkdXJhdGlvbn0pIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIFxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcbiAgICAgICAgICBsZXQgdGltZUZyYWN0aW9uID0gKHRpbWUgLSBzdGFydCkgLyBkdXJhdGlvbjtcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uID4gMSkgdGltZUZyYWN0aW9uID0gMTtcbiAgICAgIFxuICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGVcbiAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHRpbWluZyh0aW1lRnJhY3Rpb24pO1xuICAgICAgXG4gICAgICAgICAgdXBkYXRlKHByb2dyZXNzKTsgLy8gZHJhdyBpdFxuICAgICAgXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbiAgICAgICAgICB9XG4gICAgICBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIG15IHNoaXQgdmVyc2lvbiBvZiBub3QgaGF2aW5nIHRvIHVzZSBgJGAgZnJvbSBqUXVlcnkuIE1lYW5pbmdcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxuICAgICAqIEl0IGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIHBhc3MgYSBzdHJpbmcgb2YgaHRtbCBhbmQgaXQgd2lsbCBwZXJmb3JtIGFuZCByZXR1cm4gYHBhcnNlSFRNTGAuXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeSBvciBIVE1MIHRvIHBhcnNlXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBFaXRoZXIgdGhlIHJlc3VsdCBvZiBgcGFyc2VIVE1MYCBvciBgcXVlcnlgXG4gICAgICovXG4gICAgc3RhdGljIFEoc2VsZWN0b3IpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFyc2VIVE1MKHNlbGVjdG9yKTtcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xuICAgICAgICBpZiAoaXNIVE1MKSByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBmb3VuZCBlbGVtZW50IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAgICovXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCA9IGRvY3VtZW50KSB7XG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGxgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcbiAgICAgKi9cbiAgICBzdGF0aWMgcXVlcnlBbGwoc2VsZWN0b3IsIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBvZiBIVE1MIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLFxuICAgICAqIHRoZSBwYXJzZWQgSFRNTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZG9jdW1lbnQgZnJhZ21lbnQge0BzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnR9LlxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXG4gICAgICogXG4gICAgICogSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgZmFsc2UsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBsaXN0IG9mIHBhcnNlZFxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIEhUTUwgdG8gYmUgcGFyc2VkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJhZ21lbnQ9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdGhlIHJldHVybiBzaG91bGQgYmUgdGhlIHJhdyBgRG9jdW1lbnRGcmFnbWVudGBcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlSFRNTChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICBjb25zdCBub2RlID0gdGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/IG5vZGUuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICB9XG5cbiAgICAvKiogQWx0ZXJuYXRlIG5hbWUgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MfSAqL1xuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtyZXR1cm4gdGhpcy5wYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQpO31cbiAgICBcbiAgICAvKipcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCBlc2NhcGVzIGl0IHVzaW5nIHRoZSBicm93ZXIncyBvd24gZXNjYXBpbmcgbWVjaGFuaXNtLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXG4gICAgICovXG4gICAgc3RhdGljIGVzY2FwZUhUTUwoaHRtbCkge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICBzcGFuRWxlbWVudC5hcHBlbmQodGV4dE5vZGUpO1xuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xuICAgICAgICByZXR1cm4gc3BhbkVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gYWRkXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBhZGRDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByZXNlbnQ6IFRvZ2dsZSBjbGFzcyB2YWx1ZTtcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXG4gICAgICogV2hlbiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50OlxuICAgICAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgZXZhbHVhdGVzIHRvIHRydWUsIGFkZCBzcGVjaWZpZWQgY2xhc3MgdmFsdWUsIGFuZCBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIHJlbW92ZSBpdC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHRvZ2dsZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luZGljYXRvcl0gLSBPcHRpb25hbCBpbmRpY2F0b3IgZm9yIGlmIHRoZSBjbGFzcyBzaG91bGQgYmUgdG9nZ2xlZFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lLCBpbmRpY2F0b3IpIHtcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xuICAgICAgICBpZiAodHlwZW9mKGluZGljYXRvcikgIT09IFwidW5kZWZpbmVkXCIpIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMsIGluZGljYXRvcikpO1xuICAgICAgICBlbHNlIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMpKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaGFzIGEgc3BlY2lmaWMgY2xhc3NcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC0gYHRydWVgIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKS5ldmVyeShjID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBvbmUgY2xhc3Mgd2l0aCBhbm90aGVyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gcmVwbGFjZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgZm9yIHRoZSBjbGFzc1xuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVwbGFjZUNsYXNzKGVsZW1lbnQsIG9sZE5hbWUsIG5ld05hbWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBhcHBlbmRlZCB0b1xuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIGFwcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhhdE5vZGUuYXBwZW5kKHRoaXNOb2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIHByZXBlbmRlZCB0byBhbm90aGVyIG5vZGVcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBwcmVwZW5kZWQgdG9cbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBwcmVwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xuICAgICAgICB0aGF0Tm9kZS5wcmVwZW5kKHRoaXNOb2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50Lmluc2VydEFmdGVyKG90aGVyRWxlbWVudClgLlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XG4gICAgICAgIHRhcmdldE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc05vZGUsIHRhcmdldE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIGFmdGVyKHRoaXNOb2RlLCBuZXdOb2RlKSB7XG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgbmV4dChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiKyBcIiArIHNlbGVjdG9yKSA6IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgbmV4dCBzaWJsaW5ncyBvZlxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xuICAgICAqL1xuICAgIHN0YXRpYyBuZXh0QWxsKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIn4gKlwiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGZvbGxvd2luZyBzaWJsaW5ncyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgbmV4dFVudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXG4gICAgICAgIHdoaWxlIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIG5leHQucHVzaChlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJldmlvdXMgc2libGluZyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgcHJldmlvdXMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHJldHVybiBwcmV2aW91cyAmJiBwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSA/IHByZXZpb3VzIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xuICAgICAqL1xuICAgIHN0YXRpYyBwcmV2aW91c0FsbChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107XG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XG4gICAgICAgIHJldHVybiBwcmV2aW91cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIHByZXZpb3VzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTsgXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgd2hpY2ggaW5kZXggaW4gY2hpbGRyZW4gYSBjZXJ0YWluIG5vZGUgaXMuIFNpbWlsYXIgdG8galF1ZXJ5J3MgYCQuaW5kZXgoKWBcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XG4gICAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5vZGVcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgICAgIGxldCBudW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSA9PSAxKSBudW0rKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5pbmRleEluUGFyZW50fSAqL1xuICAgIHN0YXRpYyBpbmRleChub2RlKSB7cmV0dXJuIHRoaXMuaW5kZXhJblBhcmVudChub2RlKTt9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgaWYgaXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwYXJlbnQgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggcGFyZW50XG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJlbnQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxuICAgICAqL1xuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXG4gICAgICovXG4gICAgc3RhdGljIGZpbmRDaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHBhcmVudHMgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBhcmVudHMgdG9cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xuICAgICAqL1xuICAgIHN0YXRpYyBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICAgIGlmIChzZWxlY3Rvcikgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKTtcbiAgICAgICAgZWxzZSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFuY2VzdG9ycyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBhbmNlc3RvcnMgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHNpYmxpbmdzIG9mIHRoZSBlbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBzaWJsaW5ncyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoZSA9PiBlICE9IGVsZW1lbnQgJiYgZS5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIGNzcyBzdHlsZXMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBzdHlsZS4gIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFZhbHVlIHRvIHNldCBmb3IgYXR0cmlidXRlXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgY3NzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW2F0dHJpYnV0ZV07XG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIHdpZHRoIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgd2lkdGguICBcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS53aWR0aCk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBoZWlnaHQgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgaGVpZ2h0IGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gSGVpZ2h0IHRvIHNldFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgc3RhdGljIGhlaWdodChlbGVtZW50LCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIHRleHQgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdIC0gQ29udGVudCB0byBzZXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxuICAgICAqL1xuICAgIHN0YXRpYyB0ZXh0KGVsZW1lbnQsIHRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGlubmVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lckhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlcldpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IGluIHRoZSBwYWdlLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxuICAgICAqIEByZXR1cm4ge09mZnNldH0gLSBUaGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XG4gICAgICovXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgbGlzdGVuZXJzKCkgeyByZXR1cm4gdGhpcy5fbGlzdGVuZXJzIHx8ICh0aGlzLl9saXN0ZW5lcnMgPSB7fSk7IH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb25gIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXG4gICAgICogXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgb25jZS5cbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIHN0YXRpYyBvbihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcbiAgICAgKiBhbmQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIgdXBvbiB0aGUgZmlyc3QgZmlyaW5nIG9mIHRoZSBkZXNpcmVkIGV2ZW50LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICB9IDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSByZXR1cm47XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgfTtcblxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XG4gICAgICAgIGxldCBtYXRjaEZpbHRlciA9IGxpc3RlbmVyID0+IGxpc3RlbmVyLmV2ZW50ID09IHR5cGUsIGRlZmF1bHRGaWx0ZXIgPSBfID0+IF87XG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSB8fCBbXTtcbiAgICAgICAgY29uc3QgbGlzdCA9IHR5cGUgPyBsaXN0ZW5lcnMuZmlsdGVyKG1hdGNoRmlsdGVyKSA6IGxpc3RlbmVycy5maWx0ZXIoZGVmYXVsdEZpbHRlcik7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvZmZgIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXG4gICAgICogXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlZCB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSBgZWxlbWVudGAuXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgY2xpY2sgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyhFbGVtZW50fHN0cmluZyl9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJlbW92ZSBsaXN0ZW5lciBmcm9tXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gW2RlbGVnYXRlXSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIG9mZihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAobmFtZXNwYWNlKSByZXR1cm4gdGhpcy5fX29mZkFsbChldmVudCwgZWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciB3aGVuIHRoZSBub2RlIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keS5cbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBub2RlIHRvIHdhaXQgZm9yXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZXZlbnRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcbiAgICAgKi9cbiAgICBzdGF0aWMgb25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgb25Nb3VudCA9IHRydWUpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlci51bnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2spO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrLCBtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ob25Nb3VudCA/IG11dGF0aW9uLmFkZGVkTm9kZXMgOiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2g7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGB0cnVlYCAqL1xuICAgIHN0YXRpYyBvbk1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2spOyB9XG5cbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGBmYWxzZWAgKi9cbiAgICBzdGF0aWMgb25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxuXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnR9ICovXG4gICAgc3RhdGljIG9uQWRkZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudChub2RlLCBjYWxsYmFjayk7IH1cblxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vblVubW91bnR9ICovXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vblVubW91bnQobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxuXG4gICAgLyoqXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbWJpbmVzIG11bHRpcGxlIGVsZW1lbnRzIGludG8gb25lIHBhcmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XG4gICAgICovXG4gICAgc3RhdGljIHdyYXAoZWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcbiAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBlbGVtZW50cy5sZW5ndGg7IGUrKykgZG9tV3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50c1tlXSk7XG4gICAgICAgIHJldHVybiBkb21XcmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cbiAgICAgKiBAcGFyYW0geyhqUXVlcnl8RWxlbWVudCl9IG5vZGUgLSBub2RlIHRvIHJlc29sdmVcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcbiAgICB9XG59XG5cbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5ET00gPSBET01Ub29scyIsImltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xyXG59XHJcblxyXG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxubGV0IEVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG5sZXQgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpWzBdXHJcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdXHJcbmxldCBFbW9qaU1vZHVsZVF1ZXJ5ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpWzBdXHJcbmxldCBNZXNzYWdlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylbMF1cclxubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdXHJcbmxldCBlbW9qaVNlYXJjaCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmluaXQoKS5jYXRjaChlcnIgPT4gVXRpbHMuZXJyKFwiRW1vamlNb2R1bGVcIiwgXCJBbiBlcnJvciBvY2N1cmVkXCIsIGVycikpIC8vIGJldHRlciBsb2dnaW5nXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuICAgICAgICBpZihBdXRvY29tcGxldGVNb2R1bGUgJiYgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgJiYgRW1vamlNb2R1bGVRdWVyeSAmJiBNZXNzYWdlcyAmJiBndWlsZE1vZHVsZSAmJiBlbW9qaVNlYXJjaCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICAgICAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbihlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHZhbHVlLkxJR0hUQ09SRF9FTU9KSVMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFbW9qaVVzYWJsZShjb25kaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0cyh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclJlc3VsdHMoZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxkOiBudWxsICE9IGUuZ3VpbGRJZCA/IGd1aWxkTW9kdWxlLmRlZmF1bHQuZ2V0R3VpbGQoZS5ndWlsZElkKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuXCIgKyBlICsgXCIuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIEVtb2ppIGRpc3BsYXkgKi9cclxuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpeyAvLyBUT0RPOiBQcm9wZXIgZW1vamkgZm9ybWF0dGluZyAvIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0vKlxyXG4gICAgICAgIGxldCB1c2VyTW9kdWxlXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxyXG4gICAgICAgIC50aGVuKEVtb2ppUGlja2VyTGlzdFJvdyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc3MgPSBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdFxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc0Rpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xyXG4gICAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG4ubWFwKChmdW5jdGlvbihlLCBuKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IG8sXHJcbiAgICAgICAgICAgIG9uSG92ZXI6IHIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxyXG4gICAgICAgICAgICBpbmRleDogblxyXG4gICAgICAgIH0sIGwoZSwgbikpKVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFtSKGksIHMsIGUsIGMpLCBkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBSKGUsIHQsIG4sIHIpIHtcclxuICAgIHZhciBhID0gKG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcclxuICAgICAgICBwcmVmaXg6IHIobilcclxuICAgIH0pIDogdClcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xyXG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGEgPSBcIltMSUdIVENPUkRdIFwiK2FcclxuICAgIH1cclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LlRpdGxlLCB7XHJcbiAgICAgICAgdGl0bGU6IGFcclxuICAgIH0sIGEpXHJcbn1cclxuUi5kaXNwbGF5TmFtZSA9IFwicmVuZGVySGVhZGVyXCI7XHJcblxyXG5sZXQgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbmxldCBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZSAmJiBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcblxyXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xyXG4gICAgaXNVc2FibGUgPSB1c2FibGVcclxuICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpcmV0dXJuXHJcbiAgICBpZighaXNFbW9qaURpc2FibGVkKWlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcblxyXG4gICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkID0gZnVuY3Rpb24oZW1vamkpe1xyXG4gICAgICAgIGlmKGlzVXNhYmxlKXtcclxuICAgICAgICAgICAgaWYoZW1vamkuc3Vycm9nYXRlcyB8fCBlbW9qaS5kaXZlcnNpdHkpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0Vtb2ppRGlzYWJsZWQuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXG5jb25zdCB7dXNlU3RhdGV9ID0gQkRWMi5yZWFjdFxuXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JjZVVwZGF0ZSgpe1xuICAgIHJldHVybiB1c2VTdGF0ZSgpWzFdO1xufSIsImltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxuaW1wb3J0IHsgYWRkb25DYWNoZSB9IGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcblxuY29uc3QgY2FjaGUgPSB7fVxuY29uc3QgY2FjaGUyID0ge31cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcbiAgICB9XG5cbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RhcnQoKXtcblxuICAgIH1cblxuICAgIGlzVHJ1c3RlZChoYXNoKXtcbiAgICAgICAgcmV0dXJuIGNhY2hlW2hhc2hdICYmICFjYWNoZVtoYXNoXS5zdXNwZWN0XG4gICAgfVxufVxuXG5jb25zdCB0ZXN0cyA9IFtcbiAgICBbL3Rva2VuL2dpLCAwXSxcbiAgICBbL2VtYWlsL2dpLCAwXSxcbiAgICBbL21mYS9naSwgMF0sXG4gICAgWy8yZmEvZ2ksIDBdLFxuICAgIFsvcGhvbmUvZ2ksIDBdLFxuICAgIFsvY2hpbGRfcHJvY2Vzcy9naSwgMF0sXG4gICAgWy9sb2NhbFN0b3JhZ2UvZ2ksIDBdLFxuICAgIFsvZ2V0R2xvYmFsL2dpLCAwXSxcbiAgICBbL0Jyb3dzZXJXaW5kb3cvZ2ksIDBdLFxuICAgIFsvXFwuZXhlL2dpLCAwXSxcbiAgICBbL2V2YWwvZ2ksIDBdLFxuICAgIFsvV2ViQXNzZW1ibHkvZ2ksIDBdLFxuICAgIFsvWE1MSHR0cFJlcXVlc3QoXFwufFxcW1tcIidgXSlwcm90b3R5cGUvZ2ksIDBdLFxuICAgIFsvd2luZG93XFwuZmV0Y2goICspPz0vZ2ksIDBdLFxuICAgIC8qKiBPYmZ1c2NhdGlvbiAvIGhpZGRlbiAvIHdvcmthcm91bmRzICovXG4gICAgWy8oW1wiJ2BdXFwrKVtcIidgXVxcd1tcIidgXS9naSwgMV0sXG4gICAgWy9bXCInYF1cXHdbXCInYF0oXFwrW1wiJ2BdKS9naSwgMV0sXG4gICAgWy9cXCR7W1wiJ2BdXFx3K1tcIidgXX0vZ2ksIDFdLFxuICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xuICAgIFsvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAxXSxcbiAgICBbL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKycoICspPywoICspPydbXiddezR9J1xcKS9nLCAxXSwgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuICAgIC8qKiBtYW5nbGVkICovXG4gICAgWy9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAxXSwgLy8gYignMHgwJylcbiAgICBbL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnKCArKT8sKCArKT8nW14nXXs0fSdcXCkvZywgMV0sIC8vIGIoJzB4MCcsICd4MV1mJylcbiAgICAvKiogc3RyaW5nIGFycmF5IGF0IHN0YXJ0ICovXG4gICAgWy9edmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpLCAxXVxuXVxuXG5jb25zdCB0aHJlYXRzID0gW1xuICAgIFwiQWNjb3VudCBTdGVhbGVyL1ZpcnVzXCIsXG4gICAgXCJPYmZ1c2NhdGlvbi9IaWRkZW4gY29kZVwiXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSl7XG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIGFsbCBjb21tZW50cyBmcm9tIHBsdWdpbnMgKHJlbW92ZSBtZXRhIGFuZCBvdGhlci4pXG5cbiAgICBmb3IoY29uc3QgW3Rlc3QsIHR5cGVdIG9mIHRlc3RzKXtcbiAgICAgICAgY29uc3Qgc2NycHQgPSB0eXBlID09PSAxID8gbm9fY29tbWVudHMgOiBkYXRhXG4gICAgICAgIGlmKHRlc3QuZXhlYyhzY3JwdCkpe1xuICAgICAgICAgICAgaXNIYXJtZnVsID0gdGhyZWF0c1t0eXBlXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgY2FjaGVbaGFzaF0gPSB7XG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXG4gICAgICAgIHR5cGU6IGhhc2hUb1VybFtoYXNoXS5lbmRzV2l0aChcIi5qc1wiKSA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCIsXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcbiAgICAgICAgaGFzaDogaGFzaCxcbiAgICAgICAgZmlsZW5hbWVcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKVxuXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXG59XG5cbmNvbnN0IGhhc2hUb1VybCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxuICAgIGlmKCFjYWNoZVtoYXNoXSl7XG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9HRVRfVVNFUl9BR0VOVFwiKSAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICByZXN1bHQuaGFzaCA9IGhhc2hcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXG5cbiAgICAgICAgICAgIGNhY2hlW2hhc2hdID0gcmVzdWx0XG5cbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IHJlYWQgZnJvbSBnaXRodWIuICR7ZXJyfWApXG4gICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcbiAgICAgICAgfSlcbiAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cblxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXG4gICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcblxuICAgIGNyZWF0ZVJlYWRTdHJlYW0oX19wYXRoKS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcbiAgICB9KS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxuXG4gICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IF9fcGF0aFxuXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF1cbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxuICAgICAgICAgICAgICAgIGNvbnRlbnRNYW5hZ2VyLnNhdmVBZGRvbkNhY2hlKClcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcbiAgICBpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKXJldHVyblxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcblxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfR0VUX1VTRVJfQUdFTlRcIilcbiAgICAgICAgfVxuICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUoY2h1bmspXG4gICAgICAgIH0pXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxuXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxuICAgICAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gYXR0YWNobWVudC51cmxcblxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGF0dGFjaG1lbnQuZmlsZW5hbWUpXG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgICAgICAgICBpZihlbGVtKWVsZW0ucmVtb3ZlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSkuY2F0Y2goKCk9Pnt9KVxufVxuXG5sZXQgZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXG4gKiBAcGFyYW0ge3t0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBvZmZpY2lhbD86IGJvb2xlYW59fHtzdXNwZWN0OnRydWUsIHR5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIGhhcm06IHN0cmluZ319IHJlc3VsdFxuICovXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxuXG4gICAgaWYoIWZsb3dlclN0YXJNb2R1bGUpZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXG4gICAgXG4gICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC50YWdOYW1lID09PSBcIkFcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgP1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgQW55d2F5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX09QRU5fRVhURVJOQUxcIiwgY2hpbGQuaHJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUoZGl2LnBhcmVudE5vZGUpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgfVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN2ZylbMF0uc3ZnLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDQwIDMyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OlwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtMzIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApLCBkaXYpXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9LCBvbkNsaWNrKCl7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgd2lsbCBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYW5kIGxhdW5jaCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXG4gICAgfWVsc2V7XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIixzdHJva2U6XCIjMzYzOTNmXCIsc3R5bGU6e2NvbG9yOlwiIzQwODdlZFwifX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0S2V5ZWRBcnJheShvYmope1xuICAgIGxldCBhcnIgPSBbXVxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcbiAgICAgICAgYXJyLnB1c2goW2ssIG9ialtrXV0pXG4gICAgfSlcbiAgICByZXR1cm4gYXJyXG59XG5cbmxldCBrZXkgPSBudWxsXG5sZXQgc2F2ZSA9IG51bGxcblxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxuLnRoZW4obG9jYWxTdG9yYWdlTW9kdWxlID0+IHtcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiLCBidG9hKEpTT04uc3RyaW5naWZ5KGtleSkpKVxuICAgIH1cbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNhdmUoKVxuICAgIH0sIDEwMDAwMCk7XG4gICAgdHJ5e1xuICAgICAgICBsZXQgdmFsID0gc2FmZUpTT05QYXJzZShhdG9iKGxvY2FsU3RvcmFnZS5nZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIikpKVxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXG4gICAgICAgICAgICBzYXZlKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGtleSA9IHZhbFxuICAgIH1jYXRjaChlKXtcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxuICAgICAgICBzYXZlKClcbiAgICB9XG59KVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxufVxuXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xuICAgIHRyeXtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcbiAgICB9Y2F0Y2goZSl7XG4gICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3IgPyBuZXcgRXJyb3IoZSkgOiBlXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XG4gICAgdHJ5e1xuICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihcImFlcy0yNTYtY2JjXCIsIEJ1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIikpXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhcInV0ZjhcIilcbiAgICB9Y2F0Y2goZSl7XG4gICAgICAgIHJldHVybiBcInt9XCJcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XG4gICAgbGV0IGFyZ3MgPSBbQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKV1cbiAgICBcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xuICAgIGxldCBlbmNyeXB0ZWQgPSBjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwidXRmOFwiKSk7XG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcbn0iLCJpbXBvcnQge2JkcGx1Z2luRXJyb3JzLCBwbHVnaW5Db29raWUsIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbnN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuY2xhc3MgUGx1Z2luTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luTW9kdWxlID0gdGhpc1xuICAgIH1cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyO31cbn1cblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2lucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxvYWRQbHVnaW5EYXRhKCk7XG4gICAgYmRwbHVnaW5FcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkUGx1Z2lucygpKSk7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBwbHVnaW4sIG5hbWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgICAgICBuYW1lID0gcGx1Z2luLmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuXCIsIGVycik7XG4gICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbbmFtZV0pIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwbHVnaW5Db29raWVbbmFtZV0pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXG4gICAgfVxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcblxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkub24oXCJkaWQtbmF2aWdhdGUtaW4tcGFnZVwiLCB0aGlzLmNoYW5uZWxTd2l0Y2guYmluZCh0aGlzKSk7XG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0YXJ0UGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdGFydCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgcGx1Z2luICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdG9wUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdG9wKCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0b3BwZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKSArIFwiIGNvdWxkIG5vdCBiZSBzdG9wcGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IHRydWU7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbik7XG4gICAgZWxzZSB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiAoY29uc29sZS5sb2cocC5maWxlbmFtZSwgZmlsZW5hbWUpKSB8fCBwLmZpbGVuYW1lID09IGZpbGVuYW1lKS5wbHVnaW47XG4gICAgdHJ5IHsgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO31cbiAgICBjYXRjaCAoZXJyKSB7aWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycl19KTt9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLWxvYWRlZFwiLCBwbHVnaW4uZ2V0TmFtZSgpKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudW5sb2FkUGx1Z2luID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgZGVsZXRlIGJkcGx1Z2luc1twbHVnaW5dO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcbiAgICB9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tdW5sb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgdGhpcy51bmxvYWRQbHVnaW4oYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybiB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IHBsdWdpbkNvb2tpZVtwbHVnaW5dO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkICYmIHR5cGVvZihiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCgpO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tcmVsb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZ1bGxQYXRoKTtcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVwZGF0ZVBsdWdpbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbkNvb2tpZSwgc2F2ZWQpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc2F2ZVBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInBsdWdpbnNcIiwgcGx1Z2luQ29va2llKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubmV3TWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vbk1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uTWVzc2FnZSgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvbk1lc3NhZ2UgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmNoYW5uZWxTd2l0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25Td2l0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uU3dpdGNoKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uU3dpdGNoIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yYXdPYnNlcnZlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIoZSk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9ic2VydmVyIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbk1vZHVsZSgpOyIsImltcG9ydCB7IHRoZW1lQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCJcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIHBvcG91dFdpbmRvdyB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBXaW5kb3c+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53aW5kb3dzID0gbmV3IE1hcCgpXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBsZXQgcG9wb3V0TW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFdpbmRvdylcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfT1BFTlwiLCAoZXYpID0+IHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQHR5cGUge1dpbmRvd31cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB3aW5kb3cgPSBwb3BvdXRNb2R1bGUuZGVmYXVsdC5nZXRXaW5kb3coZXYua2V5KVxuICAgICAgICAgICAgICAgIHRoaXMud2luZG93cy5zZXQoZXYua2V5LCB3aW5kb3cpXG5cbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NMaXN0ID0gd2luZG93LmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0XG4gICAgICAgICAgICAgICAgY2xhc3NMaXN0LmFkZChcIndpbmRvdy1wb3BvdXRcIilcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwibGlnaHRjb3JkXCIpXG4gICAgICAgICAgICAgICAgY2xhc3NMaXN0LmFkZChcImxpZ2h0Y29yZFwiKVxuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoZXYua2V5KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfQ0xPU0VcIiwgKGV2KSA9PiB7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2luZG93cy5kZWxldGUoZXYua2V5KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1lbmFibGVkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1kaXNhYmxlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0pXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtcmVsb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLXVubG9hZGVkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1sb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGVuYWJsZSgpe1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHRoaXMudXBkYXRlKClcbiAgICB9XG5cbiAgICBkaXNhYmxlKCl7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMudXBkYXRlKClcbiAgICB9XG5cbiAgICB1cGRhdGUoa2V5KXtcbiAgICAgICAgaWYoIXRoaXMud2luZG93cy5zaXplKXJldHVyblxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVRoZW1lcyhrZXkpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlUaGVtZXMoa2V5KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlVGhlbWVzKGtleSl7XG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgaWYoa2V5KXtcbiAgICAgICAgICAgIGxldCB3aW5kb3cgPSB0aGlzLndpbmRvd3MuZ2V0KGtleSlcbiAgICAgICAgICAgIGlmKCF3aW5kb3cpcmV0dXJuXG4gICAgICAgICAgICBsZXQgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnRcblxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1saWdodGNvcmQtdGhlbWU9dHJ1ZV1cIikpe1xuICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgZm9yKGxldCBrZXkgb2YgdGhpcy53aW5kb3dzLmtleXMoKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUaGVtZXMoa2V5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXBwbHlUaGVtZXMoa2V5KXtcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgaWYoa2V5KXtcbiAgICAgICAgICAgIGxldCB3aW5kb3cgPSB0aGlzLndpbmRvd3MuZ2V0KGtleSlcbiAgICAgICAgICAgIGlmKCF3aW5kb3cpcmV0dXJuXG4gICAgICAgICAgICBsZXQgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnRcblxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1saWdodGNvcmQtdGhlbWU9dHJ1ZV1cIikpe1xuICAgICAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIndpbGwtcmVtb3ZlXCIsIFwidHJ1ZVwiKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhiZHRoZW1lcylcbiAgICAgICAgICAgIC5mb3JFYWNoKHRoZW1lTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIXRoZW1lQ29va2llW3RoZW1lTmFtZV0pcmV0dXJuIC8vIHRoZW1lIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZU5hbWVdXG4gICAgICAgICAgICAgICAgaWYoIXRoZW1lKXJldHVybiAvLzpzaHJ1ZzpcblxuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXSNcIitET00uZXNjYXBlSUQodGhlbWUuaWQpKVxuICAgICAgICAgICAgICAgIGlmKGV4aXN0aW5nKXtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuaW5uZXJIVE1MID0gdW5lc2NhcGUodGhlbWUuY3NzKVxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmVBdHRyaWJ1dGUoXCJ3aWxsLXJlbW92ZVwiKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5pZCA9IERPTS5lc2NhcGVJRCh0aGVtZS5pZClcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuaW5uZXJIVE1MID0gdW5lc2NhcGUodGhlbWUuY3NzKVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxpZ2h0Y29yZC10aGVtZVwiLCBcInRydWVcIilcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbd2lsbC1yZW1vdmU9dHJ1ZV1cIikpe1xuICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgZm9yKGxldCBrZXkgb2YgdGhpcy53aW5kb3dzLmtleXMoKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVRoZW1lcyhrZXkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuaW1wb3J0IFYyQ19QdWJsaWNTZXJ2ZXJzIGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnNcIjtcbmltcG9ydCBMYXllcnMgZnJvbSBcIi4vTGF5ZXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyX1B1YmxpY1NlcnZlcnMgPSB0aGlzXG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBMYXllcnMuY3JlYXRlTGF5ZXIoKGNsb3NlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QdWJsaWNTZXJ2ZXJzLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIiwgY2xvc2V9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldCBidXR0b24oKSB7XG4gICAgICAgIGNvbnN0IGJ0biA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWxpXCIgY2xhc3M9XCIke0JEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtfVwiPmApO1xuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIGJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xuICAgICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge3RoaXMucmVuZGVyKCk7fSk7XG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xuICAgICAgICByZXR1cm4gYnRuO1xuICAgIH1cblxuICAgIF9hcHBlbmRCdXR0b24oKSB7XG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lclxuICAgICAgICBdID0gW1xuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZG93bmxvYWRQcm9ncmVzcyAmJiBlLnR1dG9yaWFsQ29udGFpbmVyKVswXS50dXRvcmlhbENvbnRhaW5lcilcbiAgICAgICAgXVxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBndWlsZHMgPSBET00ucXVlcnkoYGRpdi4ke2NsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyfSA+IGRpdmApO1xuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XG4gICAgfVxuXG4gICAgYWRkQnV0dG9uKCkge1xuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdCA9IHdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTmF2aWdhYmxlR3VpbGRzXCIpO1xuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSB3ZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRMaXN0ID8gR3VpbGRMaXN0IDogR3VpbGRMaXN0T2xkLnByb3RvdHlwZSwgR3VpbGRMaXN0ID8gXCJkZWZhdWx0XCIgOiBcInJlbmRlclwiLCB7YWZ0ZXI6IHRoaXMuX2FwcGVuZEJ1dHRvbn0pO1xuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24oKTtcbiAgICB9XG5cbiAgICByZW1vdmVCdXR0b24oKSB7XG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5ndWlsZFBhdGNoO1xuICAgICAgICBjb25zdCBidXR0b24gPSBET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpO1xuICAgICAgICBpZiAoYnV0dG9uKSBidXR0b24ucmVtb3ZlKCk7XG4gICAgfVxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEMsIGxpZ2h0Y29yZFNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuaW1wb3J0IHB1YmxpY1NlcnZlcnNNb2R1bGUgZnJvbSBcIi4vcHVibGljU2VydmVyc1wiO1xuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vY2xhc3NOb3JtYWxpemVyXCI7XG5pbXBvcnQgZE1vZGUgZnJvbSBcIi4vZGV2TW9kZVwiO1xuXG5pbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xuaW1wb3J0IHsgcmVtb3RlLCBpcGNSZW5kZXJlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XG5pbXBvcnQgYmx1clByaXZhdGUgZnJvbSBcIi4vYmx1clByaXZhdGVcIjtcbmltcG9ydCBkaXNhYmxlVHlwaW5nIGZyb20gXCIuL2Rpc2FibGVUeXBpbmdcIjtcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuLi91aS9zd2l0Y2hcIjtcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4uL3VpL21hcmdpbnRvcFwiO1xuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XG5pbXBvcnQgSGlzdG9yeSBmcm9tIFwiLi4vdWkvaWNvbnMvaGlzdG9yeVwiO1xuaW1wb3J0IGNvcmUgZnJvbSBcIi4vY29yZVwiO1xuaW1wb3J0IHBvcG91dFdpbmRvdyBmcm9tIFwiLi9wb3BvdXRXaW5kb3dcIjtcblxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzaWRlYmFyQ29tcG9uZW50cyA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLlNlcGFyYXRvciAmJiBlLkhlYWRlciAmJiBlLkl0ZW0pXG5cbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Zsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCJ9LCBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIlxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcbiAgICB9XG59XG5cbmxldCBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcbiAgICB9XG5cbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxuXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXG4gICAgICAgIH0pKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcbiAgICB9XG4gICAgXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwiY29yZVwiKTtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGxpZ2h0Y29yZFNldHRpbmdzKCkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxuICAgIH1cblxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCwgc2lkZWJhcik7XG4gICAgfVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQsIHNpZGViYXIpIHtcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiLCBcImxpZ2h0Y29yZC0xMFwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XG4gICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9TRVRfQUxXQVlTX09OX1RPUFwiLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XG4gICAgICAgICAgICBpZihlbmFibGVkKXtcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLThcIil7XG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSB3aW5kb3cuTGlnaHRjb3JkLkFwaS5zZXR0aW5nc1xuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcbiAgICAgICAgICAgIERpc2NvcmROYXRpdmUuYXBwLnJlbGF1bmNoKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTlcIikge1xuICAgICAgICAgICAgcG9wb3V0V2luZG93W2VuYWJsZWQgPyBcImVuYWJsZVwiIDogXCJkaXNhYmxlXCJdKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTEwXCIpe1xuICAgICAgICAgICAgY29yZS5tZXRob2RzLk5vdGlmaWNhdGlvbnNVc2VTaGltKGVuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcblxuICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiSVNfTUFYSU1JWkVEXCIpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJJU19NSU5JTUlaRURcIikgXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJXSU5ET1dfQk9VTkRTXCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxuICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5hcHAucmVsYXVuY2goKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXG4gICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmFwcC5yZWxhdW5jaCgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfU0VUX0FMV0FZU19PTl9UT1BcIiwgdHJ1ZSlcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtOVwiXSkgcG9wb3V0V2luZG93LmVuYWJsZSgpXG5cbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgfVxuXG4gICAgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICB9XG5cbiAgICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xuICAgIH1cblxuICAgIHJlbmRlclNpZGViYXIoc2lkZWJhcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcihzaWRlYmFyKTtcbiAgICB9XG5cbiAgICBjb3JlQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcbiAgICB9XG5cbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IDAgPyBudWxsIDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCkpLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NoZWNrZWQgPSBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtOFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcImlzVGFic1wiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImVuYWJsZV9nbGFzc3Ryb25cIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJHTEFTU1RST05cIiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibGlnaHRjb3JkLTEwXCIpaXNDaGVja2VkID0gIWFwcFNldHRpbmdzLmdldChcIkRFRkFVTFRfTk9USUZJQ0FUSU9OU1wiLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09IFwibGlnaHRjb3JkLThcIiAmJiBpc0NoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJncmVlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vazogXCJvdXRsaW5lZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJicmFuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuaXBjLnNlbmQoXCJORVdfVEFCXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJPcGVuIGEgbmV3IFRhYlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiICYmIGlzQ2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJsaW51eFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNob2ljZXMgPSBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0dWFsID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcy5wdXNoKFwiYmx1cmJlaGluZFwiLCBcImFjcnlsaWNcIiwgXCJ0cmFuc3BhcmVudFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gYXBwU2V0dGluZ3MuZ2V0KFwiR0xBU1NUUk9OX0JMVVJcIiwgXCJibHVyYmVoaW5kXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcy5wdXNoKFwidGl0bGViYXJcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3Rpb25cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZW51XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG9wb3ZlclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNpZGViYXJcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWFkZXJcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaGVldFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndpbmRvd1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh1ZFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZ1bGxzY3JlZW4tdWlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b29sdGlwXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVyLXdpbmRvd1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVyLXBhZ2VcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTl9WSUJSQU5DWVwiLCBcImZ1bGxzY3JlZW4tdWlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZSwge30sIFwiR2xhc3N0cm9uIEJsdXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBjaG9pY2VzLm1hcChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhY3R1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNSZW5kZXJlci5pbnZva2UoXCJMSUdIVENPUkRfU0VUX0JMVVJfVFlQRVwiLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNSZW5kZXJlci5pbnZva2UoXCJMSUdIVENPUkRfU0VUX1ZJQlJBTkNZXCIsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2soKXtcbiAgICAgICAgICAgICAgICAgICAgaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfUkVMQVVOQ0hfQVBQXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlbW90ZS5wcm9jZXNzLmFyZ3Yuc2xpY2UoMSkuY29uY2F0KFtcIi0tZGlzYWJsZS1iZXR0ZXJkaXNjb3JkXCJdKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZVxuICAgICAgICAgICAgfSwgXCJSZWxhdW5jaCB3aXRob3V0IEJldHRlckRpc2NvcmRcIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXG4gICAgICAgICAgICAgICAgbG9vazogXCJnaG9zdFwiLFxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ2xlYXJpbmdDYWNoZSlyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDbGVhcmluZyBjYWNoZS4uLlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5zZXNzaW9uLmNsZWFyQ2FjaGUoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDYWNoZSBpcyBjbGVhcmVkICFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gQ2hlY2sgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNDbGVhcmluZ0NhY2hlXG4gICAgICAgICAgICB9LCBcIkNsZWFyIGNhY2hlXCIpXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBQcmVzZW5jZUNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHJlc2VuY2VTZXR0aW5ncywge1xuICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXG4gICAgICAgICAgICBzZXR0aW5nczogdGhpcy5QcmVzZW5jZVNldHRpbmdzXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcbiAgICAgICAgICAgIGtleTogXCJsYXBhbm5lbFwiXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgQXBpUHJldmlld0NvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBcGlQcmV2aWV3LCB7XG4gICAgICAgICAgICBrZXk6IFwibGFwaXBhbm5lbFwiXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pXG4gICAgfVxuXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcbiAgICAgICAgLy8gSSBrbm93IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUsIGJ1dCB3aGVuIGl0IGlzbid0LFxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcbiAgICAgICAgLy8gdG8gZGVidWcgbGF0ZXIuXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRMaXN0LCB7dHlwZX0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDYXJkTGlzdCwge3R5cGV9KSlcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbCBvbiB3aW5kb3dcbiAqL1xuXG5mdW5jdGlvbiBtYWtlQ29tcG9uZW50KGNoaWxkcmVuKXtcbiAgICBjbGFzcyBTZXR0aW5nQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICAgICAgcmVuZGVyKCl7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oc2lkZWJhciwgKCkgPT4gdGhpcy5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBzaWRlYmFyXG4gICAgcmV0dXJuIChzKSA9PiB7XG4gICAgICAgIHNpZGViYXIgPSBzXG4gICAgICAgIHJldHVybiBTZXR0aW5nQ29tcG9uZW50XG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB7fVxuICAgIH1cblxuICAgIHJlZ2lzdGVyKHBhbmVsLCBjb21wb25lbnQpe1xuICAgICAgICB0aGlzLnBhbmVsc1twYW5lbF0gPSBjb21wb25lbnRcbiAgICB9XG5cbiAgICBnZXRDb21wb25lbnQocGFuZWwsIHNpZGViYXIpe1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbcGFuZWxdKHNpZGViYXIpXG4gICAgfVxuXG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLCBcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlBsdWdpbnNcIiwgXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGV4dDogXCJUaGVtZXNcIiwgXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIiwgXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBnZXQgTENpdGVtcygpe1xuICAgICAgICBsZXQgaXRlbXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcbiAgICAgICAgICAgICAgICBpZDogXCJsaWdodGNvcmRcIlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxuICAgICAgICAgICAgICAgIGlkOiBcInN0YXR1c1wiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcbiAgICAgICAgICAgICAgICBpZDogXCJhY2NvdW50aW5mb1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgZ2V0IExDRGV2SXRlbXMoKXtcbiAgICAgICAgbGV0IGl0ZW1zID0gW11cbiAgICAgICAgaWYoIXdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSlyZXR1cm4gaXRlbXNcbiAgICAgICAgaXRlbXMucHVzaCguLi5bXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmQgQXBpXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJDb21wb25lbnRzIFByZXZpZXdcIixcbiAgICAgICAgICAgICAgICBpZDogXCJsY2FwaXByZXZpZXdcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdKVxuICAgICAgICByZXR1cm4gaXRlbXNcbiAgICB9XG5cbiAgICByZW5kZXIoc2lkZWJhcikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLkxDaXRlbXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLkxDRGV2SXRlbXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmKGUuc2VjdGlvbilyZXR1cm4gZVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChcIkJEQ2hhbmdlbG9nVGl0bGVcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcChlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9XG59XG5cbi8qKlxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbFNpZGViYXIgb24gd2luZG93XG4gKi8iLCJpbXBvcnQge2JkdGhlbWVFcnJvcnMsIHRoZW1lQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xuXG5jbGFzcyBUaGVtZU1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlRoZW1lTW9kdWxlID0gdGhpc1xuICAgIH1cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXI7fVxufVxuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxvYWRUaGVtZURhdGEoKTtcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XG4gICAgY29uc3QgdGhlbWVzID0gT2JqZWN0LmtleXMoYmR0aGVtZXMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZXNbaV1dO1xuICAgICAgICBpZiAoIXRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSB0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXG4gICAgfVxuICAgIGZvciAoY29uc3QgdGhlbWUgaW4gdGhlbWVDb29raWUpIHtcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XG4gICAgfVxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRoZW1lQ29va2llW25hbWVdID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcbiAgICBiZEV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWVuYWJsZWRcIilcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRoZW1lQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSk7XG4gICAgYmRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1kaXNhYmxlZFwiKVxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVUaGVtZShuYW1lLCByZWxvYWQpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZVRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSk7XG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZVRoZW1lKG5hbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJ0aGVtZVwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCB0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lKTtcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1sb2FkZWRcIiwgdGhlbWUubmFtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudW5sb2FkVGhlbWUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xuICAgIGRlbGV0ZSBiZHRoZW1lc1t0aGVtZV07XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS11bmxvYWRlZFwiLCB0aGVtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcbiAgICB0aGlzLnVubG9hZFRoZW1lKGJkdGhlbWUuZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkdGhlbWUuZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtcmVsb2FkZWRcIiwgdGhlbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwidGhlbWVcIik7XG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnNhdmVUaGVtZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb259IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cblxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhKStcIiB0ZXh0YXJlYVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXG4gICAgICogUXVpY2sgZXhhbXBsZTogYFBsdWdpblV0aWxpdGllcy5mb3JtYXRTdHJpbmcoXCJIZWxsbywge3t1c2VyfX1cIiwge3VzZXI6IFwiWmVyZWJvc1wifSlgXG4gICAgICogd291bGQgcmV0dXJuIFwiSGVsbG8sIFplcmVib3NcIi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgLSBvYmplY3QgbGl0ZXJhbCBvZiBwbGFjZWhvbGRlcnMgdG8gcmVwbGFjZW1lbnRzXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cmluZywgdmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIGluIHZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudCkpIHJlcGxhY2VtZW50ID0gSlNPTi5zdHJpbmdpZnkocmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihyZXBsYWNlbWVudCkgPT09IFwib2JqZWN0XCIgJiYgcmVwbGFjZW1lbnQgIT09IG51bGwpIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICBjYW5jZWxlZCA9IHRydWUgLy8gdGhpcyBhbGxvdyB0byBtb25rZXlwYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUuXG4gICAgICAgIH07XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XG4gICAgICAgIH0sIG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXG4gICAgICovXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIityZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyKStcIiArIGRpdlwiKSB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20rXCJweFwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIilcbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICAgICAgdG9hc3RXcmFwcGVyLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XG4gICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgYGNhbGMoNTAlIC0gJHt0b2FzdFdyYXBwZXIub2Zmc2V0V2lkdGggLyAyfXB4KWApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICAgICAgfSkpO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcbiAgICAgICAgICAgIGZvb3RlclxuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJvcGVuTW9kYWxcIiwgXCJ1cGRhdGVNb2RhbFwiKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1hcmtkb3duXCIpO1xuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiQ29uZmlybU1vZGFsXCIpO1xuICAgICAgICBpZiAoIU1vZGFsQWN0aW9ucyB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xuXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICAgICAgcmV0dXJuIE1vZGFsQWN0aW9ucy5vcGVuTW9kYWwocHJvcHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChDb25maXJtYXRpb25Nb2RhbCwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcbiAgICAgICAgICAgICAgICByZWQ6IGRhbmdlcixcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcbiAgICAgICAgICAgIH0sIHByb3BzKSwgY29udGVudCk7XG4gICAgICAgIH0sIHttb2RhbEtleToga2V5fSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCByZW1vdmVEYSgpe1xuICAgICAgICByZXR1cm4gcmVtb3ZlRGFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhKGNsYXNzTmFtZSl7XG4gICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcbn1cblxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5XZWJwYWNrTW9kdWxlcyA9ICgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gKHRoZU1vZHVsZSwgaXNEZWZhdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9ICFpc0RlZmF1bHQgPyB0aGVNb2R1bGUuZGVmYXVsdCA6IHRoZU1vZHVsZVxuICAgICAgICAgICAgICAgIGlmKCFtb2QpcmV0dXJuIHRoZU1vZHVsZVxuICAgICAgICAgICAgICAgIGlmIChtb2QucmVtb3ZlICYmIG1vZC5zZXQgJiYgbW9kLmNsZWFyICYmIG1vZC5nZXQgJiYgIW1vZC5zb3J0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIW1vZC5nZXRUb2tlbiAmJiAhbW9kLmdldEVtYWlsICYmICFtb2Quc2hvd1Rva2VuKXJldHVybiB0aGVNb2R1bGVcblxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KG1vZCwge1xuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIgJiYgb2JqLmdldFRva2VuKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldEVtYWlsXCIgJiYgb2JqLmdldEVtYWlsKSByZXR1cm4gKCkgPT4gXCJwdXBwZXQxMTExMkBnbWFpbC5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiICYmIG9iai5fX3Byb3RvX18pIHJldHVybiBwcm94eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoIWlzRGVmYXVsdCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGVNb2R1bGUsIHtkZWZhdWx0OiBwcm94eX0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7ZmluZCwgZmluZEFsbCwgZmluZEJ5VW5pcXVlUHJvcGVydGllcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB7XG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjIgPSB0aGlzXG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcblxuICAgIH1cblxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxuXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxuXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiN2VGZmYyQVwiKTt9XG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxuICAgICAqL1xuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XG4gICAgLyoqXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cbiAgICAgKi9cbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxuICAgICAqL1xuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxuICAgICAqL1xuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxuXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XG4gICAgZ2V0IHNsYXRlRWRpdG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNsYXRlVGV4dEFyZWFcIl0pO31cbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLndyYXBwZXIgJiYgZS51bnJlYWRNZW50aW9uc0JhcilbMF07XG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcblx0fVxuXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XG4gICAgZ2V0IFRvb2x0aXBXcmFwcGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTt9XG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cbiAgICBnZXQgR3VpbGRBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibGVhdmVHdWlsZFwiXSk7fVxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cbiAgICBnZXQgTGF5ZXJTdGFjaygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInBvcExheWVyXCJdKTt9XG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJvcGVuUHJpdmF0ZUNoYW5uZWxcIl0pO31cbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cblxuICAgIG9wZW5ETSh1c2VySWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUNoYW5uZWxJZCA9IHRoaXMuQ2hhbm5lbFN0b3JlLmdldERNRnJvbVVzZXJJZCh1c2VySWQpO1xuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XG4gICAgfVxuXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG59OyIsImltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IHN0eWxlID0gYFxyXG4gICAgLmNvbnRhaW5lci0yUmwwMXUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5jaGF0LTNiUnh4dSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnNpZGViYXItMks4cEZoIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDEhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSB7XHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJWb2ljZU1vZGVcIiwgc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiVm9pY2VNb2RlXCIpO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbmRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbmRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcbmNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBtLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVzO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEJ5UHJvcHMgPSAoLi4ucHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKC4uLnByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxubGV0IG1vZCA9ICB7ZmluZCwgZmluZEFsbCwgZmluZEJ5UHJvcHMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuZXhwb3J0IGRlZmF1bHQgbW9kXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuV2VicGFja01vZHVsZXMgPSBtb2QiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVnSHVudGVyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmN1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiAgey4uLnRoaXMucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjREQyRTQ0XCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMzIDMzYTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMmwxLTEyaDI4bDEgMTJ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRUE1OTZFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTEzIDM1Yy0uNzkyLTEuODc1LTEuNzUtMy4yOTEtMy40MTctNC42NjYgMS43NS0xLjQ1OSA0LjU0Mi01LjUgNS4yNS04LjI5MnMyLjc1IDguMTI1IDIuMDQyIDEwLjYyNVMxMyAzNSAxMyAzNXptMTAuMzAzIDBjLjc5MS0xLjg3NSAxLjc1LTMuMjkxIDMuNDE2LTQuNjY2LTEuNzUtMS40NTktNC41NDEtNS41LTUuMjUtOC4yOTItLjcwNy0yLjc5Mi0yLjc1IDguMTI1LTIuMDQgMTAuNjI1LjcwOCAyLjUgMy44NzQgMi4zMzMgMy44NzQgMi4zMzN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQkUxOTMxXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzI4IDI0LjI2M0EyLjUgMi41IDAgMDA4IDIyLjVjMC0uNTY1LS4xOTUtMS4wODEtLjUxMS0xLjVINGwtLjI3MiAzLjI2M3ptMjguNTQ0IDBMMzIgMjFoLTMuNDg5QTIuNDgyIDIuNDgyIDAgMDAyOCAyMi41YTIuNSAyLjUgMCAwMDQuMjcyIDEuNzYzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE0XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjI2XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjMgMzVIMTNzMi02IDItMTNoNmMwIDcgMiAxMyAyIDEzek0xNyAyaDJ2N2gtMnpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNTVBQ0VFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjgzOC4yMDZDMTcuNjY3LjA0MiAxNyAuMzE4IDE3IDEuNDE4djFjMCAxLjEuODY1IDEuNzUzIDEuOTIzIDEuNDUxbDUuMTU0LS45MDFjMS43MTUtLjM0MyAxLjU0OC0xLjU5My4wODUtMS44ODRMMTguODM4LjIwNnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNDQ0Q2RERcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggNmwtLjA4MS4xMjNDMTAuOTM4IDE2Ljk4MSAzIDE1LjAxNSAzIDE5djIuNWEyLjUgMi41IDAgMDA0Ljk1LjVIMTJhMiAyIDAgMDA0IDBoNGEyIDIgMCAwMDQgMGg0LjA1YTIuNSAyLjUgMCAwMDQuOTUtLjVWMTljMC00LTgtMi0xNS0xM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxnIGZpbGw9XCIjRjVGOEZBXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45NDggNi4wNzhsLS4wMy4wNDVDMTcuMTMyIDExLjYxOSAxMC44MTEgMTYuMTI2IDggMTh2NGEyIDIgMCAwMDQgMHYtNGMuOTgyLS45ODIgNS44MTMtNi43ODcgNS45ODQtMTEuNzMyLS4wMS0uMDY0LS4wMjctLjEyNi0uMDM2LS4xOXptLjA4LjM5OEMxOC4zMjQgMTEuMzc0IDIzLjAzMSAxNy4wMzEgMjQgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMi43NS0xLjgzMy04Ljk1My02LjE5LTkuOTcyLTExLjUyNHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45ODQgNi4yN0MxNy45MjIgOC4zNDYgMTcuNjA2IDE2LjM5NCAxNiAxOHY0YTIgMiAwIDAwNCAwdi00Yy0xLjU2NC0xLjU2NC0xLjkwNS05LjI0MS0xLjk3OS0xMS41NTktLjAxMS0uMDU3LS4wMjctLjExMy0uMDM3LS4xNzF6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5cbi8qKlxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cbiAqL1xuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5sZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXG5sZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cbmxldCBzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XG5jb25zdCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRSZWxhdGlvbnNoaXBzKVswXS5kZWZhdWx0XG5jb25zdCBzZXNzaW9uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0U2Vzc2lvbnMpWzBdLmRlZmF1bHRcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQWNjb3VudEluZm9zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZighbWFyZ2luTW9kdWxlMiltYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxuICAgICAgICBpZighc2l6ZU1vZHVsZSlzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPixcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVxuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0UHJvZmlsZVZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAgU3RhdGlzdGljc1xuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U3RhdGlzdGljcygpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBTZXNzaW9uc1xuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U2Vzc2lvblZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj4sXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cbiAgICAgICAgXVxuICAgIH1cblxuICAgIGdldFNlc3Npb25WYWx1ZSgpe1xuICAgICAgICBjb25zdCBzZXNzaW9uc1JhdyA9IHNlc3Npb25Nb2R1bGUuZ2V0U2Vzc2lvbnMoKVxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcblxuICAgICAgICBpZihzZXNzaW9ucy5sZW5ndGggPT09IDApcmV0dXJuIFwiLSBObyBzZXNzaW9uIGRldGVjdGVkLiBQbGVhc2UgdHJ5IGluIGEgZmV3IHNlY29uZHNcIlxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHNlc3Npb25zLm1hcChlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgKyBpZDogJHtlLnNlc3Npb25JZH1cbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxuKyBjbGllbnQ6ICR7ZS5jbGllbnRJbmZvLmNsaWVudH1cbisgc3RhdHVzOiAke2Uuc3RhdHVzfVxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxuICAgICAgICB9KS5qb2luKFwiXFxuXCIrXCItXCIucmVwZWF0KDM4KStcIlxcblwiKVxuICAgIH1cblxuICAgIGdldFByb2ZpbGVWYWx1ZSgpe1xuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5nZXRDdXJyZW50VXNlcigpXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7RGF0ZX1cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XG5cbiAgICAgICAgbGV0IGF2YXRhclVSTCA9IHVzZXIuYXZhdGFyVVJMXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoYXZhdGFyVVJMLnN0YXJ0c1dpdGgoXCIvXCIpKXtcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IFwiaHR0cHM6Ly9kaXNjb3JkLmNvbVwiK2F2YXRhclVSTFxuICAgICAgICB9XG4gICAgICAgIGlmKGF2YXRhclVSTC5lbmRzV2l0aChcIj9zaXplPTEyOFwiKSl7XG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBhdmF0YXJVUkwucmVwbGFjZShcIj9zaXplPTEyOFwiLCBcIj9zaXplPTQwOTZcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgKyBVc2VybmFtZTogJHt1c2VyLnVzZXJuYW1lfVxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cbisgVGFnOiAke3VzZXIudGFnfVxuKyBJRDogJHt1c2VyLmlkfVxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XG4rIEF2YXRhciBVUkw6ICR7YXZhdGFyVVJMfVxuKyBDcmVhdGlvbiBEYXRlOiAkeyhjcmVhdGVkQXQuZ2V0RGF0ZSgpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0gJHtjcmVhdGVkQXQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1oICR7Y3JlYXRlZEF0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1taW4gJHtjcmVhdGVkQXQuZ2V0U2Vjb25kcygpfXNcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cbisgSGFzIE5pdHJvOiAke3VzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiA/IFwiWWVzXCIgOiBcIk5vXCJ9XG4tIEVtYWlsOiAke3VzZXIuZW1haWx9XG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxuLSBIYXMgQmVlbiBPbiBNb2JpbGU6ICR7dXNlci5tb2JpbGUgPyBcIlllc1wiIDogXCJOb1wifVxuLSBQaG9uZTogJHt1c2VyLnBob25lIHx8IFwiTm9uZVwifVxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfVxuLSBDYW4gU2VlIE5TRlcgQ2hhbm5lbHM6ICR7dXNlci5uc2Z3QWxsb3dlZH1gO1xuICAgIH1cblxuICAgIGdldFN0YXRpc3RpY3MoKXtcblxuICAgICAgICBjb25zdCBndWlsZHMgPSBPYmplY3QudmFsdWVzKEd1aWxkTW9kdWxlLmdldEd1aWxkcygpKVxuICAgICAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3Qua2V5cyhyZWxhdGlvblNoaXBNb2R1bGUuZ2V0UmVsYXRpb25zaGlwcygpKVxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNCbG9ja2VkKGUpKVxuXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xuKyBSZWxhdGlvbnM6ICR7cmVsYXRpb25zLmxlbmd0aH0gcmVsYXRpb25zXG4rIEZyaWVuZHMgQ291bnQ6ICR7ZnJpZW5kcy5sZW5ndGh9IGZyaWVuZHNcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcbiAgICB9XG59XG5cblxubGV0IGhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cbmxldCBtZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxuXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMSltZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXG4gICAgICAgIGlmKCFzY3JvbGxiYXJNb2R1bGUxKXNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxuICAgICAgICBpZighaGlnaHRsaWdodEpTKWhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmxpc3RMYW5ndWFnZXMpWzBdXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YCR7bWVzc2FnZU1vZHVsZTEubWFya3VwfSAke21lc3NhZ2VNb2R1bGUyLm1lc3NhZ2VDb250ZW50fWB9PlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxuXG4gICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0+PC9kaXY+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59IiwiLy8gR29vZCBsdWNrIHRvIHJlYWQgbXkgY29kZSwgRXZlbiBtZSBjYW4ndCByZWFkIGl0IHByb3Blcmx5LlxuXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuLi9tb2R1bGVzL2Rpc3RhbnRcIlxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiXG5cbmxldCBmb3JtTW9kdWxlXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlQcmV2aWV3IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc3RhdGVzOiBbXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKCFmb3JtTW9kdWxlKWZvcm1Nb2R1bGUgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5Gb3JtU2VjdGlvbilcbiAgICAgICAgLyoqIFxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBbLi4ubmV3IFNldChPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKS5tYXAoZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXSkubWFwKGsgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtrXSlcbiAgICAgICAgfSkuZmxhdCgpKV1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9XCJMaWdodGNvcmQncyBBcGkgQXZhaWxsYWJsZSBjb21wb25lbnRzXCI+XG4gICAgICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVRleHQgdHlwZT1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwiXCIgc2VsZWN0YWJsZT17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb21wb25lbnRzIGFyZSBoZXJlIGZvciB0aGUgcGx1Z2luIGRldnMuIFRoZXkgY2FuIHF1aWNrbHkgZW1iZWQgYW55IGNvbXBvbmVudCBiZWxvdyB3aXRoIHRoaXMgcGFuZWwuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6IFwiMjBweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPkFsbCB0aGVzZSBjb21wb25lbnRzIGhhdmUgZXJyb3IgaGFuZGxpbmcuIElmIHlvdSB3YW50IG5vbmUsIGFkZCBgLm9yaWdpbmFsYCBhZnRlciB0aGUgY29tcG9uZW50IHBhdGguPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cbiAgICAgICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJ3YXJuXCI+V2UgZG8gbm90IHJlY29tbWVuZCBtb2RpZnlpbmcgdGhlc2UgY29tcG9uZW50IHdpdGggcGx1Z2lucy4gT25seSBkbyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PlxuICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD5cbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wPjwvTWFyZ2luVG9wPlxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cIm91dGxpbmVkXCIgc2l6ZT1cIm1lZGl1bVwiIGhvdmVyQ29sb3I9XCJncmVlblwiIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXovTGlnaHRjb3JkQXBpL2RvY3NcIilcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb25cbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxuICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1TZWN0aW9uPixcbiAgICAgICAgICAgIGFsbENvbXBvbmVudHMubWFwKGNvbXAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wUGF0aCA9IGBMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuJHtPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKS5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pfS4ke2NvbXBOYW1lfWBcbiAgICAgICAgICAgICAgICByZXR1cm4gPENvbXBvbmVudFByZXZpZXcga2V5PXtjb21wUGF0aH0gY29tcD17Y29tcH0gLz5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBnZXQgcmVuZGVycygpe1xuXG4gICAgfVxufVxuXG5jbGFzcyBDb21wb25lbnRQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdGFiOiBcInByZXZpZXdcIixcbiAgICAgICAgICAgIGVsZW06IHByb3BzLmNvbXAsXG4gICAgICAgICAgICBvcHRpb25zOiB7fVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLnByb3BzLmNvbXBcbiAgICAgICAgbGV0IEFsbFByZXZpZXdzID0gW11cbiAgICAgICAgaWYoY29tcC5BbGxQcmV2aWV3cylBbGxQcmV2aWV3cyA9IGNvbXAuQWxsUHJldmlld3NcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZVxuICAgICAgICBsZXQgZ2V0UHJvcHMgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmluYWwgPSB7fVxuICAgICAgICAgICAgQWxsUHJldmlld3MuZm9yRWFjaChjYXRlZ29yeSA9PiB7XG4gICAgICAgICAgICAgICAgZmluYWxbT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXSA9IGNhdGVnb3J5WzBdW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZS5vcHRpb25zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZmluYWxba2V5XSA9IEFsbFByZXZpZXdzLmZpbmQoZSA9PiBlLmZpbmQoZSA9PiBlW2tleV0pKVtzdGF0ZS5vcHRpb25zW2tleV1dW2tleV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gZmluYWxcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVuZGVyUHJldmlldyA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KGNvbXAsIGdldFByb3BzKCkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbmRlckNvZGUgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEpTWFxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzeFwiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcImpzeFwiKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkVycm9yQ2F0Y2hlcj5cbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+ICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0XG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianNcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJyZWFjdFwiKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkVycm9yQ2F0Y2hlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIGxldCBnZXRTdHJGb3JQcm9wID0gKHZhbHVlLCBjb21wUGF0aCwgbGFuZykgPT4ge1xuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIil7XG4gICAgICAgICAgICAgICAgaWYodmFsdWUgJiYgdmFsdWUuJCR0eXBlb2YgJiYgKHZhbHVlLiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSB8fCB2YWx1ZS4kJHR5cGVvZiA9PT0gMHhlYWM3KSl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbXBQYXRoID09PSBcIkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnNcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihsYW5nID09PSBcInJlYWN0XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcbm1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcbn19LFxuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcbmJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIixcbnBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXG5ib3JkZXJSYWRpdXM6IFwiOHB4XCJcbn0sIGNsYXNzTmFtZTogXCJsYy10YWItYm94LXNoYWRvd1wiIH0sXG5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlLCBudWxsLCBcIlByZXZpZXcgdGFic1wiKVxuKVxuKWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwianN4XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT17e1xubWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxufX0+XG48ZGl2IHN0eWxlPXt7XG4gICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcbiAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcbiAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcbn19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XG4gICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlByZXZpZXcgdGFiczwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+XG48L2Rpdj5cbjwvZGl2PmBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJZb3VyIGNvbXBvbmVudHMgaGVyZS5cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIFwiICAgIFwiKVxuICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICBsZXQgZ2VuZXJhdGVDb2RlID0gZnVuY3Rpb24obGFuZyl7IC8vIGNvZGUgZm9ybWF0dGluZyBpcyBoYXJkXG4gICAgICAgICAgICBjb25zdCBjb21wTmFtZSA9IGNvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lXG4gICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXG4gICAgICAgICAgICBjb25zdCBjb21wQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzLmZpbmQoZSA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2NvbXBOYW1lXSlcbiAgICAgICAgICAgIGNvbnN0IGNvbXBQYXRoID0gYExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy4ke2NvbXBDYXRlZ29yeX0uJHtjb21wTmFtZX1gXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcblxuICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJqc3hcIil7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW5Qcm9wID0gbnVsbFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PSBcImNoaWxkcmVuXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5Qcm9wID0gZ2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZylcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0ga2V5K1wiPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvcHNba2V5XSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gYHske2dldFN0ckZvclByb3AocHJvcHNba2V5XSwgY29tcFBhdGgsIGxhbmcpfX1gXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgbGV0IG9wZW5UYWdcbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlblByb3Ape1xuICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfT5gXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9zZVRhZyA9IGA8LyR7Y29tcFBhdGh9PmBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke29wZW5UYWd9XFxuICAgICR7Y2hpbGRyZW5Qcm9wfVxcbiR7Y2xvc2VUYWd9YFxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfS8+YFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlblRhZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4gfHwgbnVsbFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuICYmIGNoaWxkcmVuLiQkdHlwZW9mICYmIChjaGlsZHJlbi4kJHR5cGVvZiA9PT0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgfHwgY2hpbGRyZW4uJCR0eXBlb2YgPT09IDB4ZWFjNykpe1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGdldFN0ckZvclByb3AoY2hpbGRyZW4sIGNvbXBQYXRoLCBsYW5nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2aXNpYmxlS2V5ID0gL1teXFx3XFxkX10vZy50ZXN0KGtleSkgPyBKU09OLnN0cmluZ2lmeShrZXkpIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSB2aXNpYmxlS2V5K1wiOiBcIlxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvcHNba2V5XSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gZ2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZykuc3BsaXQoXCJcXG5cIikubWFwKChzdHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09PSAwKXJldHVybiBzdHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIgICAgXCIgKyBzdHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oXCJcXG5cIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGxldCBwcm9wT2JqZWN0ID0gXCJ7XCJcbiAgICAgICAgICAgICAgICBpZihwcm9wU3RyaW5ncy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5mb3JFYWNoKChzdHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0xhc3QgPSBpID09PSBwcm9wU3RyaW5ncy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IGkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0ZpcnN0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiLFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiXFxuICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNMYXN0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9XCJcXG59XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIn1cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW5EYXRhID0gdHlwZW9mIGNoaWxkcmVuID09PSBcInN0cmluZ1wiICYmIGNoaWxkcmVuLnN0YXJ0c1dpdGgoXCJSZWFjdC5jcmVhdGVFbGVtZW50XCIpID8gY2hpbGRyZW4gOiBKU09OLnN0cmluZ2lmeShjaGlsZHJlbilcbiAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoJHtjb21wUGF0aH0sICR7cHJvcE9iamVjdH0sICR7Y2hpbGRyZW5EYXRhfSlgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhlbHAgPSBjb21wLmhlbHAgfHwge31cbiAgICAgICAgbGV0IGluZm8gPSBoZWxwLmluZm8gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+XG4gICAgICAgICAgICB7aGVscC5pbmZvfVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIGxldCB3YXJuID0gaGVscC53YXJuID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPlxuICAgICAgICAgICAge2hlbHAud2Fybn1cbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxuICAgICAgICBsZXQgZGFuZ2VyID0gaGVscC5kYW5nZXIgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgIHtoZWxwLmRhbmdlcn1cbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxuICAgICAgICBsZXQgZXJyb3IgPSBoZWxwLmVycm9yID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZXJyb3JcIj5cbiAgICAgICAgICAgIHtoZWxwLmVycm9yfVxuICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXG4gICAgICAgIGxldCBzdWNjZXNzID0gaGVscC5zdWNjZXNzID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwic3VjY2Vzc1wiPlxuICAgICAgICAgICAge2hlbHAuc3VjY2Vzc31cbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxuICAgICAgICByZXR1cm4gKDxkaXY+XG4gICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XG4gICAgICAgICAgICAgICAge2NvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lfVxuICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cbiAgICAgICAgICAgIHtpbmZvfVxuICAgICAgICAgICAge3N1Y2Nlc3N9XG4gICAgICAgICAgICB7d2Fybn1cbiAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICAgIHtkYW5nZXJ9XG4gICAgICAgICAgICB7QWxsUHJldmlld3MubWFwKGNhdGVnb3J5ID0+IHtcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5vbkNsaWNrKXJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0udGV4dClyZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLmNoaWxkcmVuKXJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnkubGVuZ3RoID09PSAxKXJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXVxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAge2tleX1cbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPixcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIG9wdGlvbnM9e2NhdGVnb3J5Lm1hcCgoZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0LVwiK2luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBKU09OLnN0cmluZ2lmeShlW09iamVjdC5rZXlzKGUpWzBdXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSl9IHZhbHVlPXtcIm9wdC1cIisoc3RhdGUub3B0aW9uc1trZXldIHx8IFwiMFwiKX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUub3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogKHZhbHVlLnZhbHVlIHx8IFwiMFwiKS5yZXBsYWNlKFwib3B0LVwiLCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9fSBzZWFyY2hhYmxlPXt0cnVlfS8+LFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luQm90dG9tOiBcIjhweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnMgdGFicz17W3tsYWJlbDogXCJQcmV2aWV3XCIsIGlkOiBcInByZXZpZXdcIn0sIHtsYWJlbDogXCJDb2RlXCIsIGlkOiBcImNvZGVcIn1dfSBcbiAgICAgICAgICAgICAgICBhY3RpdmU9e3N0YXRlLnRhYn0gY2hpbGRyZW49e3N0YXRlLnRhYiA9PT0gXCJwcmV2aWV3XCIgPyByZW5kZXJQcmV2aWV3KCkgOiByZW5kZXJDb2RlKCl9IG9uQ2hhbmdlPXsodGFiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfX0vPlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xuXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi9yZWxvYWRJY29uXCI7XG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIi4vaWNvbnMvZWRpdFwiO1xuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4uL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5jb25zdCBhbmNob3JDbGFzc2VzID0gQkRWMi5hbmNob3JDbGFzc2VzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUGx1Z2luQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiAmJiB0eXBlb2YodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCkgPT09IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcblxuICAgICAgICB0aGlzLmVkaXQgPSB0aGlzLmVkaXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxuICAgICAgICAgICAgc2V0dGluZ3M6IGZhbHNlLFxuICAgICAgICAgICAgcmVsb2FkczogMCxcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2hvd1NldHRpbmdzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzU2V0dGluZ3MpIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcbiAgICB9XG5cbiAgICBjbG9zZVNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnMuc2V0dGluZ3NwYW5lbC5hcHBlbmRDaGlsZCh0aGlzLnNldHRpbmdzUGFuZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNIaWRkZW4gPSAoY29udGFpbmVyLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIWNvbnRhaW5lcil7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBDb250YWluZXIgaXMgdW5kZWZpbmVkLmApKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVUb3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlID0gdGhpcy5yZWZzLmNhcmROb2RlO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpc05vZGUuY2xvc2VzdChcImRpdltjbGFzcyo9XFxcImNvbnRlbnRSZWdpb25TY3JvbGxlci1cXFwiXVwiKVxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgdGhpc05vZGVPZmZzZXQgPSBET00ub2Zmc2V0KHRoaXNOb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9IERPTS5vZmZzZXQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpc05vZGVPZmZzZXQudG9wIC0gY29udGFpbmVyT2Zmc2V0LnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AgLSAzMDtcbiAgICAgICAgICAgIERPTS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFBvaW50ID4gb3JpZ2luYWwpIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCArIChwcm9ncmVzcyAqIChlbmRQb2ludCAtIG9yaWdpbmFsKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XG4gICAgICAgIHRyeSB7IHRoaXMuc2V0dGluZ3NQYW5lbCA9IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwoKTsgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIHRoaXMubmFtZSArIFwiLlwiLCBlcnIpOyB9XG5cbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1vcGVuIHVpLXN3aXRjaC1pdGVtXCIsIHJlZjogXCJjYXJkTm9kZVwifSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XCJmbG9hdFwiOiBcInJpZ2h0XCIsIFwiY3Vyc29yXCI6IFwicG9pbnRlclwifSwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiBmYWxzZX0pO1xuICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwifSksXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSBcInt7bmFtZX19IHZ7e3ZlcnNpb259fSBieSB7e2F1dGhvcn19XCIuc3BsaXQoLyh7e1tBLVphLXpdK319KS8pO1xuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcIm5hbWUgYmRhLW5hbWVcIn0sIG5hbWUpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3t2ZXJzaW9ufX1cIik7XG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xuICAgICAgICBpZiAobmFtZUluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XG4gICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMuY2xhc3NOYW1lICs9IGAgJHthbmNob3JDbGFzc2VzLmFuY2hvcn0gJHthbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YDtcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5saW5rKSBwcm9wcy5ocmVmID0gYXV0aG9yLmxpbms7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGl0bGVbYXV0aG9ySW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChhdXRob3IubGluayB8fCBhdXRob3IuaWQgPyBcImFcIiA6IFwic3BhblwiLCBwcm9wcywgYXV0aG9yLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XG4gICAgfVxuXG4gICAgbWFrZUxpbmsodGl0bGUsIHVybCkge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYmRhLWxpbmsgYmRhLWxpbmstd2Vic2l0ZVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9O1xuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcbiAgICAgICAgaWYgKHR5cGVvZih1cmwpID09IFwiZnVuY3Rpb25cIikgcHJvcHMub25DbGljayA9IChldmVudCkgPT4ge2V2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB1cmwoKTt9O1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBwcm9wcywgdGl0bGUpO1xuICAgIH1cblxuICAgIG1ha2VCdXR0b24odGl0bGUsIGNoaWxkcmVuLCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17YWN0aW9ufT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvVG9vbHRpcFdyYXA+O1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGdldCBsaW5rcygpIHtcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXTtcbiAgICAgICAgY29uc3QgYWRkb24gPSB0aGlzLnByb3BzLmFkZG9uO1xuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XG4gICAgICAgIGlmIChhZGRvbi5zb3VyY2UpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlNvdXJjZVwiLCBhZGRvbi5zb3VyY2UpKTtcbiAgICAgICAgaWYgKGFkZG9uLmludml0ZSkge1xuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RlciA9IC9cXC5nZ1xcLyguKikkLztcbiAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGFkZG9uLmludml0ZTtcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XG4gICAgICAgICAgICAgICAgQkRWMi5MYXllclN0YWNrLnBvcExheWVyKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoY29kZSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZG9uLmRvbmF0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiRG9uYXRlXCIsIGFkZG9uLmRvbmF0ZSkpO1xuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XG4gICAgICAgIHJldHVybiBsaW5rcztcbiAgICB9XG5cbiAgICBnZXQgZm9vdGVyKCkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IHRoaXMubGlua3M7XG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tbGlua3MgYmRhLWxpbmtzXCJ9LFxuICAgICAgICAgICAgICAgIC4uLihsaW5rcy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiBpbmRleCA8IGxpbmtzLmxlbmd0aCAtIDEgPyBbZWxlbWVudCwgXCIgfCBcIl0gOiBlbGVtZW50KS5mbGF0KCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge29uQ2xpY2s6IHRoaXMuc2hvd1NldHRpbmdzLCBjbGFzc05hbWU6IFwiYmQtYnV0dG9uIGJkYS1zZXR0aW5ncy1idXR0b25cIiwgZGlzYWJsZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9LCBcIlNldHRpbmdzXCIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9KTtcbiAgICB9XG5cbiAgICBlZGl0KCkge3RoaXMucHJvcHMuZWRpdCh0aGlzLm5hbWUpO31cbiAgICBkZWxldGUoKSB7dGhpcy5wcm9wcy5yZW1vdmUodGhpcy5uYW1lKTt9XG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxuXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogdGhpcy5wcm9wcy5hZGRvbi5uYW1lKTt9XG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLmRlc2NyaXB0aW9uKTt9XG4gICAgZ2V0IHZlcnNpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogdGhpcy5wcm9wcy5hZGRvbi52ZXJzaW9uKTt9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XG5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSB7fVxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XG4gICAgICAgICAgICBpZighdGhpcy5pc1NjYW5uaW5nKXtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nhbm5pbmcgPSB0cnVlXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudW5tb3VudGVkKXJldHVyblxuICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJ1c3RlZDogcmVzdWx0LnN1c3BlY3QgPyBcInN1c3BlY3RcIiA6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaXNUcnVzdGVkID09PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gXCJzdXNwZWN0XCIpe1xuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwiLCBzdHlsZX0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC10aXRsZSBiZGEtaGVhZGVyLXRpdGxlXCJ9LCB0aGlzLmJ1aWxkVGl0bGUodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHtuYW1lOiB0aGlzLmF1dGhvciwgaWQ6IGF1dGhvcklkLCBsaW5rOiBhdXRob3JMaW5rfSkpLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1jb250cm9scyBiZGEtY29udHJvbHNcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZW1vdmUgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRGVsZXRlXCIsIDxEZWxldGVJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5kZWxldGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZWxvYWQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiUmVsb2FkXCIsIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5yZWxvYWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyIGJkLWFkZG9uLWRlc2NyaXB0aW9uIGJkYS1kZXNjcmlwdGlvbiBzY3JvbGxlclwifSwgdGhpcy5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUucmVuZGVyO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXG59KTsiLCJpbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tIFwiLi9lcnJvckJvdW5kYXJ5XCI7XG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi9yZWxvYWRJY29uXCI7XG5pbXBvcnQgQWRkb25DYXJkIGZyb20gXCIuL2FkZG9uY2FyZFwiO1xuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcblxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4uL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5pbXBvcnQgVG9vbHRpcFdyYXAgZnJvbSBcIi4vdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xuaW1wb3J0IEVtdWxhdGVkVG9vbHRpcCBmcm9tIFwiLi90b29sdGlwXCI7XG5cbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FyZExpc3QgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7c29ydDogXCJuYW1lXCIsIGFzY2VuZGluZzogdHJ1ZSwgcXVlcnk6IFwiXCJ9O1xuICAgICAgICB0aGlzLmlzUGx1Z2lucyA9IHRoaXMucHJvcHMudHlwZSA9PSBcInBsdWdpbnNcIjtcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xuICAgICAgICB0aGlzLm1hbmFnZXIgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbk1vZHVsZSA6IHRoZW1lTW9kdWxlO1xuXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJldmVyc2UgPSB0aGlzLnJldmVyc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IHRoaXMub25BZGRvbkNoYW5nZXMuYmluZCh0aGlzKVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX11bmxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgIH1cblxuICAgIG9wZW5Gb2xkZXIoKSB7XG4gICAgICAgIGNvbnN0IHNoZWxsID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsO1xuICAgICAgICBjb25zdCBvcGVuID0gc2hlbGwub3BlblBhdGggfHwgc2hlbGwub3Blbkl0ZW07XG4gICAgICAgIG9wZW4odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcbiAgICB9XG5cbiAgICBlZGl0KG5hbWUpIHtcbiAgICAgICAgY29uc29sZS5sb2cobmFtZSk7XG4gICAgICAgIHRoaXMubWFuYWdlci5lZGl0KG5hbWUpO1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZShuYW1lKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcbiAgICAgICAgaWYgKCFzaG91bGREZWxldGUpIHJldHVybjtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmRlbGV0ZShuYW1lKTtcbiAgICB9XG5cbiAgICBjb25maXJtRGVsZXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiQXJlIFlvdSBTdXJlP1wiLCBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSAke25hbWV9P2AsIHtcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7cmVzb2x2ZSh0cnVlKTt9LFxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBzb3J0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXV0aG9yXCIsIHZhbHVlOiBcImF1dGhvclwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJWZXJzaW9uXCIsIHZhbHVlOiBcInZlcnNpb25cIn0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiTGFzdCBNb2RpZmllZFwiLCB2YWx1ZTogXCJtb2RpZmllZFwifSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJGaWxlIFNpemVcIiwgdmFsdWU6IFwic2l6ZVwifSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtsYWJlbDogXCJBc2NlbmRpbmdcIiwgdmFsdWU6IHRydWV9LFxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHJldmVyc2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIHNvcnQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcbiAgICB9XG5cbiAgICBzZWFyY2goZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cXVlcnk6IGV2ZW50LnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvcHMoYWRkb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY29va2llW3RoaXMuZ2V0TmFtZShhZGRvbildLFxuICAgICAgICAgICAgdG9nZ2xlOiB0aGlzLm1hbmFnZXIudG9nZ2xlLmJpbmQodGhpcy5tYW5hZ2VyKSxcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxuICAgICAgICAgICAgcmVtb3ZlOiB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgYWRkb246IGFkZG9uLFxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldCBsaXN0KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnR5cGUgPT09IFwicGx1Z2luc1wiID8gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpIDogT2JqZWN0LnZhbHVlcyhiZHRoZW1lcyk7XG4gICAgfVxuXG4gICAgZ2V0QWRkb25zKCkge1xuICAgICAgICBjb25zdCBzb3J0ZWRBZGRvbnMgPSB0aGlzLmxpc3Quc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBhLnBsdWdpbiAmJiBhLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhhLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgOiB0aGlzLmdldFN0cmluZyhhW3RoaXMuc3RhdGUuc29ydF0pO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYi5wbHVnaW4gJiYgYi5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYi5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpICA6IHRoaXMuZ2V0U3RyaW5nKGJbdGhpcy5zdGF0ZS5zb3J0XSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID4gZmlyc3QpIHJldHVybiAtMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmFzY2VuZGluZykgc29ydGVkQWRkb25zLnJldmVyc2UoKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBzb3J0ZWRBZGRvbnMubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uID0gc29ydGVkQWRkb25zW2FdO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZShhZGRvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRBdXRob3IoYWRkb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbihhZGRvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0VmVyc2lvbihhZGRvbik7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIG1hdGNoZXMgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvcikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBkZXNjcmlwdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCB2ZXJzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhhZGRvbik7XG4gICAgICAgICAgICByZW5kZXJlZC5wdXNoKDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgey4uLnByb3BzfSByZWxvYWQ9eyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiB0aGlzLm1hbmFnZXIucmVsb2FkLmJpbmQodGhpcy5tYW5hZ2VyKX0gLz48L0Vycm9yQm91bmRhcnk+KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyZWQ7XG4gICAgfVxuXG4gICAgZ2V0TmFtZShhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogYWRkb24ubmFtZSk7fVxuICAgIGdldEF1dGhvcihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiBhZGRvbi5hdXRob3IpO31cbiAgICBnZXREZXNjcmlwdGlvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IGFkZG9uLmRlc2NyaXB0aW9uKTt9XG4gICAgZ2V0VmVyc2lvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogYWRkb24udmVyc2lvbik7fVxuXG4gICAgcmVuZGVyQ2hlY2tVcGRhdGVzKCl7XG4gICAgICAgIGlmKCF3aW5kb3cuWmVyZXNQbHVnaW5MaWJyYXJ5KXJldHVybiBudWxsXG4gICAgICAgIGlmKCF3aW5kb3cuUGx1Z2luVXBkYXRlcylyZXR1cm4gbnVsbFxuICAgICAgICBpZih0eXBlb2Ygd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwgIT09IFwiZnVuY3Rpb25cIilyZXR1cm4gbnVsbFxuICAgICAgICBpZighdGhpcy5pc1BsdWdpbnMpcmV0dXJuIG51bGxcblxuICAgICAgICBsZXQgdG9vbHRpcElzU2hvd2luZyA9IGZhbHNlXG4gICAgICAgIGxldCB0b29sdGlwXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgdGV4dD1cIkNoZWNrcyBmb3IgdXBkYXRlcyBvZiBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFJpZ2h0LWNsaWNrIGZvciBhIGxpc3QuXCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbkxlZnQ6IFwiMTBweFwifX0gb25Nb3VzZUxlYXZlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBJc1Nob3dpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwLmhpZGUoKVxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiByZWY9XCJjaGVja1VwZGF0ZUJ1dHRvblwiIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGluIHByb2dyZXNzLlwiLCB7dHlwZTogXCJpbmZvXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgY29tcGxldGUuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfSBkaXNhYmxlZD17ZmFsc2V9IG9uUmlnaHRDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5yZWZzLmNoZWNrVXBkYXRlQnV0dG9uKXJldHVyblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5QbHVnaW5VcGRhdGVzIHx8ICF3aW5kb3cuUGx1Z2luVXBkYXRlcy5wbHVnaW5zKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGlmKHRvb2x0aXBJc1Nob3dpbmcpcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBuZXcgRW11bGF0ZWRUb29sdGlwKHRoaXMucmVmcy5jaGVja1VwZGF0ZUJ1dHRvbi5yZWZzLm9yaWdpbmFsLnJlZnMuYnV0dG9uLCBPYmplY3QudmFsdWVzKHdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpLm1hcChwID0+IHAubmFtZSkuam9pbihcIiwgXCIpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRlOiBcImJvdHRvbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoRXZlbnRzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwLnNob3coKVxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwSXNTaG93aW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgVXBkYXRlc1xuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvVG9vbHRpcFdyYXA+XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCByZWZyZXNoSWNvbiA9IDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9XCJSZWxvYWQgTGlzdFwiPlxuICAgICAgICAgICAgeyhwcm9wcykgPT4gXG4gICAgICAgICAgICA8UmVsb2FkSWNvbiB7Li4ucHJvcHN9IGNsYXNzTmFtZT1cImJkLWljb24gYmQtcmVsb2FkIGJkLXJlbG9hZC1oZWFkZXJcIiBzaXplPVwiMThweFwiIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BsdWdpbnMpIHBsdWdpbk1vZHVsZS51cGRhdGVQbHVnaW5MaXN0KCk7XG4gICAgICAgICAgICAgICAgZWxzZSB0aGVtZU1vZHVsZS51cGRhdGVUaGVtZUxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgICB9fSAvPlxuICAgICAgICAgICAgfTwvVG9vbHRpcD47XG4gICAgICAgIGNvbnN0IGFkZG9uQ2FyZHMgPSB0aGlzLmdldEFkZG9ucygpO1xuXG4gICAgICAgIHJldHVybiA8Q29udGVudENvbHVtbiB0aXRsZT17YCR7dGhpcy5wcm9wcy50eXBlLnRvVXBwZXJDYXNlKCl94oCUJHthZGRvbkNhcmRzLmxlbmd0aH1gfT5cbiAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBrZXk9XCJmb2xkZXItYnV0dG9uXCIgY29sb3I9XCJicmFuZFwiIFxuICAgICAgICAgICAgICAgIGxvb2s9XCJmaWxsZWRcIiBzaXplPVwibWluXCIgaG92ZXJDb2xvcj1cImRlZmF1bHRcIiBvbkNsaWNrPXt0aGlzLm9wZW5Gb2xkZXIuYmluZCh0aGlzKX0gd3JhcHBlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCJcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICBPcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlclxuICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckNoZWNrVXBkYXRlcygpfVxuICAgICAgICAgICAgeyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiByZWZyZXNoSWNvbn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICA8U2VhcmNoIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH0gcGxhY2Vob2xkZXI9e2BTZWFyY2ggJHt0aGlzLnByb3BzLnR5cGV9Li4uYH0gLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5Tb3J0IGJ5OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5PcmRlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZGEtc2xpc3QgYmQtYWRkb24tbGlzdFwiPnthZGRvbkNhcmRzfTwvZGl2PlxuICAgICAgICA8L0NvbnRlbnRDb2x1bW4+XG4gICAgfVxufVxuXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IENhcmRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FyZExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcbn0pOyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCRExvZ28gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7aGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ28gXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHtmaWxsUnVsZTogXCJldmVub2RkXCIsIGNsaXBSdWxlOiBcImV2ZW5vZGRcIiwgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLCBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwifSwgdmlld0JveDogXCIwIDAgMjAwMCAyMDAwXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtZXRhZGF0YVwiLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cxXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIyMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjE1XCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93M1wifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MylcIn0sIGQ6IFwiTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaXCIsIGZpbGw6IFwiIzE3MTcxN1wiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cyKVwifSwgZDogXCJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWlwiLCBmaWxsOiBcIiMzRTgyRTVcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MSlcIn0sIGQ6IFwiTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWlwiLCBmaWxsOiBcIiNGRkZGRkZcIiwgb3BhY2l0eTogXCIxXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ2hlY2tib3ggZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwibGlcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3ggXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtaW5uZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hJbm5lcilbMF0uY2hlY2tib3hJbm5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveEVsZW1lbnQsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCAhdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgY2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IEFycm93IGZyb20gXCIuLi9pY29ucy9kb3duYXJyb3dcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtvcGVuOiBmYWxzZSwgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy5vcHRpb25zWzBdLnZhbHVlfTtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dNZW51ID0gdGhpcy5zaG93TWVudS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGlkZU1lbnUgPSB0aGlzLmhpZGVNZW51LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd01lbnUoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IHRydWV9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTWVudSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiBmYWxzZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT0gdGhpcy5zdGF0ZS52YWx1ZSk7fVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcHQgPT4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdC1vcHRpb24ke3NlbGVjdGVkLnZhbHVlID09IG9wdC52YWx1ZSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWB9IG9uQ2xpY2s9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBvcHQudmFsdWUpfT57b3B0LmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLnByb3BzLnN0eWxlID09IFwidHJhbnNwYXJlbnRcIiA/IFwiIGJkLXNlbGVjdC10cmFuc3BhcmVudFwiIDogXCJcIjtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLnN0YXRlLm9wZW4gPyBcIiBtZW51LW9wZW5cIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcFwiPlxyXG4vLyA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57dGhpcy5wcm9wcy5sYWJlbH08L2xhYmVsPlxyXG4vLyA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuLy8gICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWNvbnRyb2xzXCI+XHJcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuLy8gICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuLy8gICAgIDwvZGl2PlxyXG4vLyA8L2Rpdj5cclxuLy8ge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbi8vIDwvZGl2PjsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBbXCJiZC1zZWFyY2gtd3JhcHBlclwiXVxuICAgICAgICBpZih0aGlzLnN0YXRlLmZvY3VzZWQpY2xhc3NOYW1lLnB1c2goXCJmb2N1c2VkXCIpXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lLmpvaW4oXCIgXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZC1zZWFyY2hcIiBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gbWF4TGVuZ3RoPVwiNTBcIiBcbiAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgICAgIH19IG9uQmx1cj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogZmFsc2V9KVxuICAgICAgICAgICAgICAgICAgICB9fS8+XG4gICAgICAgICAgICAgICAgICAgIDxTZWFyY2hJY29uIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+O1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge2NoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH07XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3dpdGNoID0gPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuU3dpdGNoIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5zdGF0ZS5jaGVja2VkfSAvPlxuICAgIH1cblxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3dpdGNoXG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ29udGVudENvbHVtbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBkaXNwbGF5TmFtZSgpIHtyZXR1cm4gXCJDb250ZW50Q29sdW1uXCI7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICAvL2xldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF1cclxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLnByb3BzLnRpdGxlID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCB0aGlzLnByb3BzLnRpdGxlKSA6IG51bGxcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4gKyBcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIiwgc3R5bGU6IHtwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19LFxyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiXG5cbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xuaW1wb3J0IFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCBmcm9tIFwiLi9jc3NFZGl0b3JEZXRhY2hlZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLnByb3BzLmxpbmVzID0gMDtcbiAgICAgICAgc2VsZi5zZXRJbml0aWFsU3RhdGUoKTtcbiAgICAgICAgc2VsZi5hdHRhY2ggPSBzZWxmLmF0dGFjaC5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLmRldGFjaGVkRWRpdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCwge2F0dGFjaDogc2VsZi5hdHRhY2h9KTtcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYudXBkYXRlQ3NzID0gc2VsZi51cGRhdGVDc3MuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYuZGV0YWNoID0gc2VsZi5kZXRhY2guYmluZChzZWxmKTtcbiAgICB9XG5cbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBkZXRhY2hlZDogdGhpcy5wcm9wcy5kZXRhY2hlZCB8fCBCRFYyLmVkaXRvckRldGFjaGVkXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9kaXNjb3JkXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5kZXRhY2hlZCAmJiAhc2VsZi5zdGF0ZS5kZXRhY2hlZCkge1xuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYuZGV0YWNoZWRSb290KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvZGVNaXJyb3IoKSB7XG4gICAgfVxuXG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGNzcygpIHtcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBjY3NzID0gQnVmZmVyLmZyb20oX2Njc3MsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2NzcztcbiAgICB9XG5cbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7aWQ6IFwiZWRpdG9yLWRldGFjaGVkXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImgzXCIsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAhZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXRhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBkZXRhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlByZXNzIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiY3RybFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcIixcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgd2l0aCB0aGUgZWRpdG9yIGZvY3VzZWQgdG8gYWNjZXNzIHRoZSBlZGl0b3IncyBzZXR0aW5ncy5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICBdXG4gICAgfVxuXG4gICAgb25DbGljayhhcmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZGV0YWNoXCI6XG4gICAgICAgICAgICAgICAgc2VsZi5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hhbmdlKGlkLCBjaGVja2VkKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUNzcygpIHtcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICBzYXZlQ3NzKCkge1xuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20odGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpLCBcInV0Zi04XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKTtcbiAgICB9XG5cbiAgICBkZXRhY2goKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGRldGFjaGVkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xuICAgICAgICBpZiAoIWRyb290KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBJTkpFQ1QgUk9PVDogLmFwcFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzZWxmLmRldGFjaGVkRWRpdG9yLCBkcm9vdCk7XG4gICAgfVxuXG4gICAgZ2V0IGRldGFjaGVkUm9vdCgpIHtcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XG4gICAgICAgIGlmICghX3Jvb3QpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3REZXRhY2hlZFJvb3QoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9yb290O1xuICAgIH1cblxuICAgIGluamVjdERldGFjaGVkUm9vdCgpIHtcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK1V0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwKSk7XG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGF0dGFjaCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiXG5cbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLm9uQ2hhbmdlID0gc2VsZi5vbkNoYW5nZS5iaW5kKHNlbGYpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSB0cnVlO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvZGlzY29yZFwiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xuICAgIH1cblxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBjc3MoKSB7XG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xuICAgICAgICAgICAgY2NzcyA9IEJ1ZmZlci5mcm9tKF9jY3NzLCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNjc3M7XG4gICAgfVxuXG4gICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xuICAgICAgICBpZiAoIV9yb290KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Jvb3Q7XG4gICAgfVxuXG4gICAgaW5qZWN0Um9vdCgpIHtcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK1V0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwKSk7XG4gICAgICAgIGlmICghYXBwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiZC1kZXRhY2hlZC1jc3MtZWRpdG9yXCIsIGlkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtZWRpdG9yXCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1pbm5lcnBhbmVcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHNlbGYub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiYXR0YWNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DbGljayhpZCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImF0dGFjaFwiOlxuICAgICAgICAgICAgICAgIGlmIChET00ucXVlcnkoXCIjZWRpdG9yLWRldGFjaGVkXCIpKSBzZWxmLnByb3BzLmF0dGFjaCgpO1xuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLnJvb3QpO1xuICAgICAgICAgICAgICAgIHNlbGYucm9vdC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUNzcygpIHtcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICBzYXZlQ3NzKCkge1xuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20odGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpLCBcInV0Zi04XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJERXJyb3JCb3VuZGFyeSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICB0aGlzLnN0YXRlID0ge2hhc0Vycm9yOiBmYWxzZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2hhc0Vycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInJlYWN0LWVycm9yXCJ9LCBcIkNvbXBvbmVudCBFcnJvclwiKTsgIFxyXG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjsgXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCREVycm9yQm91bmRhcnkucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz48cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz47XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3pcIiAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJ7LyogPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ3aGl0ZVwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIj5cbiAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxuICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cbjwvc3ZnPiAqL31cblxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxOHB4XCI7XG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxuICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cbiAgICAgICAgPC9zdmc+O1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz47XG4gICAgfVxufSIsImxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmdpblRvcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlKW1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpblRvcDYwfT48L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuaW1wb3J0IFYyQ19TZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzR3JvdXBcIjtcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi4vbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2VcIlxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxubGV0IFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxuICAgICAgICAgICAgYXNzZXRzOiBbXVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gbnVsbFxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxuICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cyA9IG5ldyBTZXQoKVxuICAgIH1cblxuICAgIHVwZGF0ZVdoZW5GZXRjaGVkKGNvbXApe1xuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5hZGQoY29tcClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge0lucHV0VGV4dH0gc2V0dGluZyBcbiAgICAgKi9cbiAgICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSl7XG4gICAgICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgdGhpcy5zdGF0ZS5kYXRhLCB7XG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuc3RhdGUuYXNzZXRzXG4gICAgICAgIH0pXG4gICAgICAgIGlmKHNldHRpbmcucHJvcHMuaWQgPT09IFwiYXBwbGljYXRpb25faWRcIil7XG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKVxuICAgIH1cblxuICAgIGZldGNoQXNzZXRzKCl7XG4gICAgICAgIGlmKHRoaXMuaXNmZXRjaGluZyA9PT0gdHJ1ZSl7XG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQgIT09IGFwcCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSB0cnVlXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5mZXRjaEFzc2V0cyh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIGFzc2V0czogT2JqZWN0LmtleXMoYXNzZXRzKS5tYXAoayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgdXBkYXRlUHJldmlldyhkYXRhKXtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkYXRhXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyB8fCAoVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NHcm91cCB0aXRsZT1cIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiIHNldHRpbmdzPXt0aGlzLnByb3BzLnNldHRpbmdzfSBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0vPixcbiAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz4sXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlJpY2hQcmVzZW5jZVwiLz4sXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHsvKiogb3B0aW9ucyAqL31cbiAgICAgICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29tcG9uZW50c31cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcCAvPlxuICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUHJldmlld1wiLz5cbiAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XG4gICAgICAgICAgICAgICAgPFJwY1ByZXZpZXcgc2V0dGluZ3M9e3RoaXN9Lz5cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PjwvZGl2PixcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17d2luZG93Lm9oZ29kb2hmdWNrfT5cbiAgICAgICAgICAgICAgICBPaCBnb2QgT2ggZnVja1xuICAgICAgICAgICAgPC9idXR0b24+LFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIilcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIFNlZSA/IEkgcHVsbGVkIGEgbGl0bGUgc25lYWt5IG9uIHlhXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgXVxuICAgIH1cblxuICAgIGdldCBvcHRpb25zQ29tcG9uZW50cygpe1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgfHwgKHRoaXMuX29wdGlvbnNDb21wb25lbnRzID0gUlBDUHJvcHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgaWYoZS50eXBlID09PSBcInRleHRcIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gWzxJbnB1dE51bWJlciBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPl0vKlxuICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkudW5zaGlmdCg8RGlzY29yZEJ1dHRvbiB0aXRsZT1cIkNvcHkgQ3VycmVudCBUaW1lc3RhbXBcIiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcbiAgICAgICAgICAgICAgICAgICAgfX0gLz4pXG4gICAgICAgICAgICAgICAgfSovXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xuICAgICAgICAgICAgICAgIGlmKFtcImFzc2V0cy5zbWFsbFwiLCBcImFzc2V0cy5sYXJnZVwiXS5pbmNsdWRlcyhlLmlkKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRDaG9pY2Ugc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9IGNob2ljZXM9e1t7dmFsdWU6IFwibm9uZVwiLCBsYWJlbDogXCJObyBhc3NldHNcIn1dLmNvbmNhdCh0aGlzLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSl9Lz5cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgIH1cbn1cbmNvbnN0IFJQQ1Byb3BzID0gW1xuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxuICAgICAgICBpZDogXCJuYW1lXCIsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmRcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJEZXRhaWxzXCIsXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkJyb3dzaW5nIERpc2NvcmRcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJTdGF0ZVwiLFxuICAgICAgICBpZDogXCJzdGF0ZVwiLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkIENsaWVudFwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlRpbWVzdGFtcCBTdGFydFwiLFxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGdldCBwbGFjZWhvbGRlcigpe1xuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJMYXJnZUFzc2V0XCIsXG4gICAgICAgIGlkOiBcImFzc2V0cy5sYXJnZVwiLFxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlNtYWxsQXNzZXRcIixcbiAgICAgICAgaWQ6IFwiYXNzZXRzLnNtYWxsXCIsXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcbiAgICB9LFxuXVxuXG5sZXQgaW5wdXRUZXh0TW9kdWxlc1xuY2xhc3MgSW5wdXRUZXh0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgaWYoaW5wdXRUZXh0TW9kdWxlcyAmJiBpbnB1dFRleHRNb2R1bGVzWzBdKXJldHVybiBpbnB1dFRleHRNb2R1bGVzXG4gICAgICAgIHJldHVybiBpbnB1dFRleHRNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgcm93TW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXG4gICAgICAgICAgICBpbnB1dE1vZHVsZSxcbiAgICAgICAgICAgIHNpemVNb2R1bGUyLFxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxEaXZpZGVyLz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn1cblxubGV0IElucHV0TnVtYmVyTW9kdWxlc1xuY2xhc3MgSW5wdXROdW1iZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gSW5wdXROdW1iZXJNb2R1bGVzIHx8IChJbnB1dE51bWJlck1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdLFxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IHR5cGU9XCJudW1iZXJcIiBvbkNoYW5nZT17KHZhbHVlLCBuYW1lLCBpbnB1dCkgPT4ge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0rL2csIFwiXCIpXG4gICAgICAgICAgICBpZih2YWx1ZSA9PSB0aGlzLnN0YXRlLmRhdGEpe1xuICAgICAgICAgICAgICAgIGlucHV0LnNldFZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgcm93TW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcblxuXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxuICAgICAgICAgICAgICAgIHtzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxuICAgICAgICAgICAgICAgIH19IGNvbG9yPVwiYnJhbmRcIj5Db3B5IGN1cnJlbnQgdGltZXN0YW1wPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj4gOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8RGl2aWRlci8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59XG5cbmxldCBJbnB1dENob2ljZU1vZHVsZXNcbmNsYXNzIElucHV0Q2hvaWNlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdID8gXCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA6IFwibm9uZVwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLnVwZGF0ZVdoZW5GZXRjaGVkKHRoaXMpXG4gICAgfVxuXG4gICAgb25DaGFuZ2UodmFsdWUpe1xuICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiB2YWx1ZS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxuICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XG4gICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSA9PT0gXCJub25lXCIgPyBudWxsIDogdGhpcy5zdGF0ZS5kYXRhLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGF0YTogdmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgfVxuICAgIFxuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBJbnB1dENob2ljZU1vZHVsZXMgfHwgKElucHV0Q2hvaWNlTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xuXG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICByb3dNb2R1bGUsXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxuICAgICAgICAgICAgZmxleE1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG4gICAgICAgIFxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBvcHRpb25zLnVuc2hpZnQoe1xuICAgICAgICAgICAgdmFsdWU6IFwibm9uZVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiTm8gYXNzZXRzXCJcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb3B0aW9ucz17b3B0aW9uc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gLz5cbiAgICAgICAgICAgICAgICB7Lyo8U2VsZWN0IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IG9wdGlvbnM9e29wdGlvbnN9Lz4qL31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPERpdmlkZXIvPlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5sZXQgRGl2aWRlck1vZHVsZXMgPSBbXVxuY2xhc3MgRGl2aWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBEaXZpZGVyTW9kdWxlcyYmRGl2aWRlck1vZHVsZXNbMF0gPyBEaXZpZGVyTW9kdWxlcyA6IChEaXZpZGVyTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgZGl2aWRlcixcbiAgICAgICAgICAgIGRpdmlkZXJEZWZhdWx0XG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YCR7ZGl2aWRlci5kaXZpZGVyfSAke2RpdmlkZXJEZWZhdWx0LmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxuICAgIH1cbn1cblxuY2xhc3MgRGlzY29yZEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXG5cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNvbG9yPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5jbGFzcyBScGNQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJzID0gW11cblxuICAgICAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzXG4gICAgfVxuXG4gICAgY2hhbmdlVGFiKHRhYil7XG4gICAgICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmVcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxuXG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXG4gICAgICAgIH0pXG4gICAgICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSlcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJGdWxsIFByb2ZpbGVcIiBpZD1cInByb2ZpbGVcIi8+XG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxQcmVzZW5jZUVycm9yQ2F0Y2hlciBwcmV2aWV3PXt0aGlzLnByZXZpZXd9IHN0YXRlPXt0aGlzLnN0YXRlLnJwY30gcHJvcHM9e3twcmV2aWV3OiB0aGlzfX0ga2V5PXt0aGlzLnN0YXRlLmFjdGl2ZX0gLz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH0gICBcblxuICAgIGlzQWN0aXZlKHRhYil7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gdGFiXG4gICAgfVxuXG4gICAgZ2V0IHByZXZpZXcoKXtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUgPT09IFwicHJvZmlsZVwiKXJldHVybiBQcm9maWxlXG4gICAgICAgIHJldHVybiBQb3BvdXRcbiAgICB9XG59XG5cbmNsYXNzIFRhYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxuICAgICAgICB9XG4gICAgICAgIHByb3BzLnByZXZpZXcudGFicy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgc2V0QWN0aXZlKGlzQWN0aXZlKXtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmU6ICEhaXNBY3RpdmVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSl7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtQWN0aXZlYFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1JbmFjdGl2ZWBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XG4gICAgICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpXG4gICAgICAgIH19PlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59XG5cbmxldCBlbXB0eUNsYXNzZXNcbmNsYXNzIFByZXNlbmNlRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIsIGVyckluZm8pe1xuICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJySW5mbylcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBlcnJvcjogdHJ1ZVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUpe1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5zdGF0ZS5lcnJvcil7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IG5ldyB0aGlzLnByb3BzLnByZXZpZXcodGhpcy5wcm9wcy5wcm9wcylcbiAgICAgICAgICAgICAgICBwcmV2aWV3LnNldFN0YXRlKHRoaXMucHJvcHMuc3RhdGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpZXcucmVuZGVyKClcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSB0cnVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBlbXB0eUNsYXNzZXMgPSBlbXB0eUNsYXNzZXMgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5lbXB0eVN0YXRlSW1hZ2UgJiYgZS5lbXB0eVN0YXRlKVxuICAgICAgICAgICAgaWYoIWVtcHR5Q2xhc3Nlcyl7XG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBtYXJnaW46IFwiMjBweFwiXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXByaW1hcnkpXCIsIFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPXtgbGMtdGFiLWJveC1zaGFkb3cgJHtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSW1hZ2V9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIH19PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVIZWFkZXJ9PkFuIGVycm9yIG9jY3VyZWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZVN1YnRleHR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17YCR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9ezB9IG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLmpvaW5MQygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IHNlcnZlclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxufVxuXG5sZXQgcG9wb3V0TW9kdWxlc1xubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcbmxldCBQb3BvdXRQcm9wc1xuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlcyB8fCAocG9wb3V0TW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclBvcG91dFwiKSxcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgZ2V0Q29tcG9uZW50KCl7XG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBVc2VyUG9wb3V0LFxuICAgICAgICAgICAgdXNlck1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcbiAgICAgICAgICAgIGxldCByZW5kZXIxID0gVXNlclBvcG91dC5kZWZhdWx0KHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHVzZXIuaWQsIFxuICAgICAgICAgICAgICAgIGd1aWxkSWQ6IG51bGwsIFxuICAgICAgICAgICAgICAgIGNoYW5uZWxJZDogbnVsbCwgXG4gICAgICAgICAgICAgICAgZGlzYWJsZVVzZXJQcm9maWxlTGluazogdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIxLnR5cGVcbiAgICAgICAgICAgIFBvcG91dFByb3BzID0gcmVuZGVyMS5wcm9wc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcbiAgICAgICAgfSwgbnVsbClcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50KClcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIF9Vc2VyUG9wb3V0LFxuICAgICAgICAgICAgdXNlck1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG5cbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcbiAgICAgICAgICAgIGxldCBnYW1lID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcbiAgICAgICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnYW1lXG4gICAgICAgIH0pLmNhbGwoe1xuICAgICAgICAgICAgZ2FtZTogZGF0YVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHBvcG91dCA9IG5ldyBVc2VyUG9wb3V0Q29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFBvcG91dFByb3BzLCB7XG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHksXG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIuaWRcbiAgICAgICAgfSkpLnJlbmRlcigpLnByb3BzLmNoaWxkcmVuIC8vIGJ5cGFzcyB0cmFja2luZ1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxuICAgICAgICBjb25zdCBjb250YWluZXIgPSA8ZGl2IHsuLi53aW5kb3cuTGlnaHRjb3JkLkFwaS5fLmV4Y2x1ZGVQcm9wZXJ0aWVzKHBvcG91dC5wcm9wcywgW1wib25DbGlja1wiLCBcIm9uQ29udGV4dE1lbnVcIl0pfSAvPlxuXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgIHtjb250YWluZXJ9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbn1cblxubGV0IHByb2ZpbGVNb2R1bGVzXG5sZXQgVXNlclByb2ZpbGVDb21wb25lbnRcbmxldCBQcm9maWxlUHJvcHNcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlVzZXJQcm9maWxlXCIpLFxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIFVzZXJQcm9maWxlLFxuICAgICAgICAgICAgdXNlck1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl7XG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQcm9maWxlLmRlZmF1bHQoe1xuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcbiAgICAgICAgICAgIH0pLnJlbmRlcigpXG4gICAgICAgICAgICBjb25uZWN0ZWRQcm9maWxlU3RvcmUgPSByZW5kZXIxLnR5cGVcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXG4gICAgICAgICAgICBjb25zdCByZW5kZXIzID0gcmVuZGVyMi50eXBlLnJlbmRlcihyZW5kZXIyLnByb3BzLCBudWxsKVxuICAgICAgICAgICAgY29uc3QgcmVuZGVyNCA9IG5ldyByZW5kZXIzLnR5cGUocmVuZGVyMy5wcm9wcykucmVuZGVyKClcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXG4gICAgICAgIH1cbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCB0aGUgVXNlclByb2ZpbGVDb21wb25lbnQgY29tcG9uZW50LmApXG5cbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcbiAgICAgICAgICAgIGxldCBnYW1lID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcbiAgICAgICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnYW1lXG4gICAgICAgIH0pLmNhbGwoe1xuICAgICAgICAgICAgZ2FtZTogZGF0YVxuICAgICAgICB9KVxuXG4gICAgICAgIFByb2ZpbGVQcm9wcyA9IG5ldyBjb25uZWN0ZWRQcm9maWxlU3RvcmUoe1xuICAgICAgICAgICAgdXNlcjogdXNlcixcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7fVxuICAgICAgICB9KS5yZW5kZXIoKS5wcm9wc1xuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xuICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5XG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcblxuICAgICAgICBwcm9maWxlLnByb3BzLnN0eWxlID0ge1xuICAgICAgICAgICAgd2lkdGg6IFwiYXV0b1wiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgIHtwcm9maWxlfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3NldHRpbmdzVGl0bGVcIjtcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xuXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9zZXJ2ZXJDYXJkXCI7XG5pbXBvcnQgeyB1c2VGb3JjZVVwZGF0ZSB9IGZyb20gXCIuLi8uLi9tb2R1bGVzL2hvb2tzXCI7XG5cbmxldCBTZXR0aW5nc1ZpZXdcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QdWJsaWNTZXJ2ZXJzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY29ubmVjdCA9IHRoaXMuY29ubmVjdC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xuICAgICAgICB0aGlzLkF2YXRhckRlZmF1bHRzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJERUZBVUxUX0FWQVRBUlNcIl0pO1xuICAgICAgICB0aGlzLkludml0ZUFjdGlvbnMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTtcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XG5cbiAgICAgICAgdGhpcy5ob29rcyA9IFtdXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2VydmVyczogW10sXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWN0aW9uOiB0aGlzLmNhdGVnb3J5U2x1Z3NbMF0sXG4gICAgICAgICAgICB0aGVtZTogXCJkYXJrXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9zZSgpXG4gICAgfVxuXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZmV0Y2goYCR7c2VsZi5zZWFyY2hFbmRQb2ludH0ke3F1ZXJ5fSR7cXVlcnkgPyBcIiZzY2hlbWE9bmV3XCIgOiBcIj9zY2hlbWE9bmV3XCJ9YCwge1xuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBhd2FpdCByZXMudGV4dCgpXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBkYXRhLnJlc3VsdHMucmVkdWNlKChhcnIsIHNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIC8vIGFyci5wdXNoKDxTZXJ2ZXJDYXJkIHNlcnZlcj17c2VydmVyfSBqb2luPXtzZWxmLmpvaW59Lz4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gc2VsZi5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHNlbGYuYmRTZXJ2ZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZW5kID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xuICAgICAgICAgICAgZGF0YS5uZXh0ID0gYD9mcm9tPSR7ZW5kfWA7XG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5KSBkYXRhLm5leHQgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XG4gICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgdGl0bGUgKz0gYCBmb3IgJHtzZWxmLnN0YXRlLnRlcm19YDtcblxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXG4gICAgICAgICAgICAgICAgbmV4dDogZGF0YS5uZXh0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBqb2luKHNlcnZlckNhcmQpIHtcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcblxuICAgICAgICBhd2FpdCBmZXRjaChgJHt0aGlzLmpvaW5FbmRQb2ludH0vJHtzZXJ2ZXJDYXJkLnByb3BzLnNlcnZlci5pZGVudGlmaWVyfWAse1xuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxmLndpbmRvd09wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcblxuICAgICAgICBjb25zdCB3aW4gPSBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuQnJvd3NlcldpbmRvdykob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XG4gICAgICAgICAgICBpZiAodXJsICE9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCIpIHJldHVybjtcbiAgICAgICAgICAgIHdpbi5jbG9zZSgpO1xuICAgICAgICAgICAgc2VsZi5jaGVja0Nvbm5lY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbi5sb2FkVVJMKHVybCk7XG4gICAgICAgIHdpbi5zZXRNZW51QmFyVmlzaWJpbGl0eShmYWxzZSlcbiAgICB9XG5cbiAgICBnZXQgd2luZG93T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDU1MCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IHRydWUsXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGJkU2VydmVyKCkge1xuICAgICAgICBjb25zdCBzZXJ2ZXIgPSB7XG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcbiAgICAgICAgICAgIG9ubGluZTogXCIzMDAwMCtcIixcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNzAwMDArXCIsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBCZXR0ZXJEaXNjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmRcIixcbiAgICAgICAgICAgIG9ubGluZTogXCIxMDArXCIsXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjMwMCtcIixcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIExpZ2h0Y29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjcwNTkwODM1MDIxODY2NjExN1wiLFxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkLnBuZ1wiLFxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoRW5kUG9pbnQoKSB7XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xuICAgIH1cblxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcbiAgICB9XG5cbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gXCJodHRwczovL2pvaW4uZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3RcIjtcbiAgICB9XG5cbiAgICBhc3luYyBjaGVja0Nvbm5lY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvYCx7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgICAgICAgICAgaWYoIXRleHQpe1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0KVxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAyLFxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKChlKSA9PiBlKCkpXG4gICAgICAgIFNldHRpbmdzVmlldyA9IFNldHRpbmdzVmlldyB8fCBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiU2V0dGluZ3NWaWV3XCIpXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcInB1YnNsYXllcnJvb3RcIn0sIFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1ZpZXcsIHtcbiAgICAgICAgICAgICAgICBvblNldFNlY3Rpb246IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkodGhpcy5jYXRlZ29yeVNsdWdzLmluZGV4T2Yoc2VjdGlvbikpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uczogdGhpcy5zZWN0aW9ucyxcbiAgICAgICAgICAgICAgICBvbkNsb3NlOiB0aGlzLmNsb3NlLFxuICAgICAgICAgICAgICAgIHNlY3Rpb246IHRoaXMuc3RhdGUuc2VjdGlvblxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IHNlY3Rpb25zKCl7XG4gICAgICAgIGxldCBzZWN0aW9ucyA9IFtdXG4gICAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIlB1YmxpYyBTZXJ2ZXJzXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuc2VhcmNoSW5wdXQuYmluZChudWxsLCAoKSA9PiB0aGlzLCB0aGlzLnNlYXJjaEtleURvd24pXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJDYXRlZ29yaWVzXCJcbiAgICAgICAgfSwgLi4udGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5jYXRlZ29yeVNsdWdzW2luZGV4XSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5jb250ZW50LmJpbmQobnVsbCwgKCkgPT4gdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmZvb3RlclxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5jb25uZWN0aW9uLmJpbmQobnVsbCwgKCkgPT4gdGhpcylcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zXG4gICAgfVxuICAgIFxuICAgIHNlYXJjaElucHV0KGdldFRoaXMsIHNlYXJjaEtleURvd24pIHtcbiAgICAgICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBCRFYyLnJlYWN0LnVzZVN0YXRlKFwiXCIpXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICByZWY6IChzZXJjaGlucHV0KSA9PiAoZ2V0VGhpcygpLnJlZnMuc2VhcmNoaW5wdXQgPSBzZXJjaGlucHV0KSwgXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bjogc2VhcmNoS2V5RG93biwgXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIiwgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJpbnB1dCBkZWZhdWx0XCIsIFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgXG4gICAgICAgICAgICAgICAgICAgIG1heExlbmd0aDogXCI1MFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNlYXJjaEtleURvd24oZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXG4gICAgICAgICAgICB0ZXJtOiBlLnRhcmdldC52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSAhPT0gMCkge1xuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnNlYXJjaChxdWVyeSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGNhdGVnb3J5U2x1Z3MoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcChlID0+IGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlxcd1xcZF0rL2csIFwiX1wiKSlcbiAgICB9XG5cbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xuICAgICAgICByZXR1cm4gW1wiQWxsXCIsIFwiRlBTIEdhbWVzXCIsIFwiTU1PIEdhbWVzXCIsIFwiU3RyYXRlZ3kgR2FtZXNcIiwgXCJNT0JBIEdhbWVzXCIsIFwiUlBHIEdhbWVzXCIsIFwiVGFibGV0b3AgR2FtZXNcIiwgXCJTYW5kYm94IEdhbWVzXCIsIFwiU2ltdWxhdGlvbiBHYW1lc1wiLCBcIk11c2ljXCIsIFwiQ29tbXVuaXR5XCIsIFwiTGFuZ3VhZ2VcIiwgXCJQcm9ncmFtbWluZ1wiLCBcIk90aGVyXCJdO1xuICAgIH1cblxuICAgIGNoYW5nZUNhdGVnb3J5KGlkKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IGlkLFxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxuICAgICAgICAgICAgdGVybTogbnVsbCxcbiAgICAgICAgICAgIHNlY3Rpb246IHNlbGYuY2F0ZWdvcnlTbHVnc1tpZF1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5zZWFyY2goYD9jYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW2lkXX1gLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjb250ZW50KGdldFRoaXMpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IGdldFRoaXMoKTtcbiAgICAgICAgc2VsZi51c2VTdGF0ZSgpXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHNlbGYuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHNlbGYuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHNlbGYubm90Q29ubmVjdGVkLmJpbmQobnVsbCwgZ2V0VGhpcykpO1xuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtyZWY6IChyZWYpID0+IHtcbiAgICAgICAgICAgICAgICAoc2VsZi5yZWZzLmNvbnRlbnQgPSByZWYpXG4gICAgICAgICAgICB9LCBrZXk6IFwicGNcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXG4gICAgICAgICAgICBzZWxmLmJkU2VydmVyLFxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLm1hcCgoc2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXh0ICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47c2VsZi5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pOyBzZWxmLnNlYXJjaChzZWxmLnN0YXRlLm5leHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KVxuICAgICAgICApXTtcbiAgICB9XG5cbiAgICBub3RDb25uZWN0ZWQoZ2V0VGhpcykge1xuICAgICAgICBjb25zdCBzZWxmID0gZ2V0VGhpcygpO1xuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtrZXk6IFwibmNjXCIsIHJlZjogKHJlZikgPT4gKHNlbGYucmVmcy5jb250ZW50ID0gcmVmKSwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiaDJcIixcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHNlbGYuY29ubmVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjE4cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxuICAgICAgICApXTtcbiAgICB9XG5cbiAgICBmb290ZXIoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1c2VTdGF0ZSgpe1xuICAgICAgICBjb25zdCBmb3JjZVVwZGF0ZSA9IHVzZUZvcmNlVXBkYXRlKClcbiAgICAgICAgQkRWMi5SZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob29rcy5wdXNoKGxpc3RlbmVyKVxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaG9va3MuZmluZEluZGV4KGUgPT4gZT09PWxpc3RlbmVyKVxuICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgMClyZXR1cm5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pXG4gICAgfVxuXG4gICAgY29ubmVjdGlvbihnZXRUaGlzKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSBnZXRUaGlzKCk7XG4gICAgICAgIHNlbGYudXNlU3RhdGUoKVxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxuICAgICAgICAgICAgICAgIFwiQ29ubmVjdGVkIGFzOiBcIixcbiAgICAgICAgICAgICAgICBgJHtjb25uZWN0aW9uLnVzZXIudXNlcm5hbWV9IyR7Y29ubmVjdGlvbi51c2VyLmRpc2NyaW1pbmF0b3J9YFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWNvbm5lY3RcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlcnZlckNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCkgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaW1hZ2VFcnJvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGpvaW5lZDogdGhpcy5wcm9wcy5ndWlsZExpc3QuaW5jbHVkZXModGhpcy5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2VydmVyfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgbGV0IGNhcmRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jYXJkICYmIGUuY2FyZFByaW1hcnkpWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4Q2hpbGQgJiYgZS5faG9yaXpvbnRhbFJldmVyc2UpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub1dyYXAgJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLCAvLyBjYXJkUHJpbWFyeS0xSHYtdG9cclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYCR7Y2FyZE1vZHVsZS5jYXJkfSAke2NhcmRNb2R1bGUuY2FyZFByaW1hcnl9ICR7QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0gYmQtc2VydmVyLWNhcmQke3NlcnZlci5waW5uZWQgPyBcIiBiZC1zZXJ2ZXItY2FyZC1waW5uZWRcIiA6IFwiXCJ9YH0sXHJcbiAgICAgICAgICAgIC8vIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIC8vIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAvLyB7IGNsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBmbGV4LTFPMUdLWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIGp1c3RpZnlTdGFydC0yeUlabzAgYWxpZ25TdHJldGNoLTFod3hNYSBub1dyYXAtM2p5bnY2XCIgfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7cmVmOiBcImltZ1wiLCBjbGFzc05hbWU6IFwiYmQtc2VydmVyLWltYWdlXCIsIHNyYzogc2VydmVyLmljb25VcmwsIG9uRXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSwgZHJhZ2dhYmxlOiBmYWxzZX0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5mbGV4Q2hpbGQrXCIgYmQtc2VydmVyLWNvbnRlbnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXArXCIgYmQtc2VydmVyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW5hbWVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbWVtYmVyLWNvdW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm1lbWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBNZW1iZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXkgYmQtc2VydmVyLWRlc2NyaXB0aW9uLWNvbnRhaW5lclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIHNjcm9sbGVyIGJkLXNlcnZlci1kZXNjcmlwdGlvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjYgYmQtc2VydmVyLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItdGFnc1wiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmNhdGVnb3JpZXMuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gY29sb3JHcmVlbi0yOWlBS1lcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjM2FjMTVjXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmVycm9yICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gZGlzYWJsZWQtOWFGMnVnXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiI2MxM2EzYVwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlcnZlci5lcnJvciAmJiAhdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTlwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIn0sIG9uQ2xpY2s6ICgpID0+IHt0aGlzLmpvaW4oKTt9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuam9pbih0aGlzKTtcclxuICAgICAgICAvL3RoaXMuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19SZWxvYWRJY29uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XHJcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiI2RjZGRkZVwiLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXJlbG9hZCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHt3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIn1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6XCJ9KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDogXCJub25lXCIsIGQ6IFwiTTAgMGgyNHYyNEgwelwifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzR3JvdXBcIjtcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnNlY3Rpb25zLm1hcCgoc2VjdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgaSAhPT0gMCA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChNYXJnaW5Ub3AsIHt9KSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NHcm91cCwgT2JqZWN0LmFzc2lnbih7fSwgc2VjdGlvbiwge29uQ2hhbmdlOiB0aGlzLnByb3BzLm9uQ2hhbmdlfSkpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcblxubGV0IGZvcm1Nb2R1bGVcbmxldCBzd2l0Y2hJdGVtXG5sZXQgYmV0YUNsYXNzTmFtZXNcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVycm9yOiBmYWxzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyT2xkU2V0dGluZ3MoKSB7XG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBidXR0b25Db21wb25lbnQgPSBidXR0b24gPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge2tleTogXCJ0aXRsZS1idXR0b25cIiwgY2xhc3NOYW1lOiBcImJkLXBmYnRuXCIsIG9uQ2xpY2s6IGJ1dHRvbi5vbkNsaWNrfSwgYnV0dG9uLnRpdGxlKSA6IG51bGw7XG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICAgICAgfSldO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZENhdGNoKGVyciwgZXJySW5mbyl7XG4gICAgICAgIGNvbnNvbGUubG9nKGVyciwgZXJySW5mbylcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBlcnJvcjogdHJ1ZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBpZih0aGlzLnN0YXRlLmVycm9yKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJPbGRTZXR0aW5ncygpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGlmKCFmb3JtTW9kdWxlKWZvcm1Nb2R1bGUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxuICAgICAgICAgICAgICAgIGlmKCFzd2l0Y2hJdGVtKXN3aXRjaEl0ZW0gPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlN3aXRjaEl0ZW1cIilcbiAgICAgICAgICAgICAgICBpZighYmV0YUNsYXNzTmFtZXMpYmV0YUNsYXNzTmFtZXMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW11cbiAgICAgICAgICAgICAgICBpZih0aGlzLnByb3BzLmRlc2NyaXB0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCg8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBzZWxlY3RhYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1UZXh0PiwgPE1hcmdpblRvcD48L01hcmdpblRvcD4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4udGhpcy5wcm9wcy5zZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5leHBlcmltZW50YWwpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wdXNoKDxzdXAgY2xhc3NOYW1lPXtiZXRhQ2xhc3NOYW1lcy5iZXRhfT4oRVhQRVJJTUVOVEFMKTwvc3VwPilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHN3aXRjaEl0ZW0uZGVmYXVsdCBvbkNoYW5nZT17KGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHNldHRpbmcuaWQsIGV2LnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9fSBrZXk9e3NldHRpbmcuaWR9IHZhbHVlPXtzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXX0gY2xhc3NOYW1lPXtfX1NFQ1JFVF9FTU9USU9OX18uY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSl9IGRpc2FibGVkPXtmYWxzZX0gaGlkZUJvcmRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtzd2l0Y2hJdGVtLmRlZmF1bHQuU2l6ZXMuREVGQVVMVH0gdGhlbWU9e3N3aXRjaEl0ZW0uZGVmYXVsdC5UaGVtZXMuREVGQVVMVH0gbm90ZT17c2V0dGluZy5pbmZvfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpbmZvfVxuICAgICAgICAgICAgICAgICAgICA8L3N3aXRjaEl0ZW0uZGVmYXVsdD5cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gPGZvcm1Nb2R1bGUuRm9ybVNlY3Rpb24gdGFnPVwiaDJcIiB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+XG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XG5cbmxldCBjbGFzc25hbWVzID0gW11cbmZ1bmN0aW9uIGdldENsYXNzTmFtZShuYW1lKXtcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxuICAgIGlmKGNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lID0gQkRNb2R1bGVzLmdldChlID0+IGVbbmFtZV0pWzBdW25hbWVdXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcbiAgICByZXR1cm4gY2xhc3NOYW1lXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaEl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmNoZWNrZWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt0ZXh0LCBpbmZvfSA9IHRoaXMucHJvcHMuZGF0YTtcbiAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XG4gICAgICAgICAgICBjbGFzc25hbWVzLnB1c2goQkRNb2R1bGVzLmdldChlID0+IGUuYmV0YSAmJiAoIWUuY29udGFpbmVyICYmICFlLnVzZXJTZXR0aW5nc1ZvaWNlKSlbMF0uYmV0YSlcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcbiAgICAgICAgICAgIGluZm8gPSBbXG4gICAgICAgICAgICAgICAgaW5mbyxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3VwXCIsIHtjbGFzc05hbWU6IGdldENsYXNzTmFtZShcImJldGFcIil9LCBcIihFWFBFUklNRU5UQUwpXCIpXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZmxleCBmbGV4LWhvcml6b250YWwgZmxleC1qdXN0aWZ5LXN0YXJ0IGZsZXgtYWxpZ24tc3RyZXRjaCBmbGV4LW5vd3JhcFwifSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7a2V5OiBcInRpdGxlXCIsIGNsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2tleTogXCJzd2l0Y2hcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10ZXh0IHN0eWxlLWRlc2NyaXB0aW9uIG1hcmdpbi10b3AtNFwiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LCBpbmZvKVxuICAgICAgICApO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhclNlcGFyYXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLXNlcGFyYXRvciBtYXJnaW4tdG9wLTggbWFyZ2luLWJvdHRvbS04XCJ9KTtcclxuICAgIH1cclxufSIsIi8qKlxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxuICogV2lsbCBhbHNvIHJlbW92ZSB0aGVtc2VsdmVzIGlmIHRoZSBub2RlIHRvIHdhdGNoIGlzIHJlbW92ZWQgZnJvbSBET00gdGhyb3VnaFxuICogYSBNdXRhdGlvbk9ic2VydmVyLlxuICpcbiAqIE5vdGUgdGhpcyBpcyBub3QgdXNpbmcgRGlzY29yZCdzIGludGVybmFscyBidXQgbm9ybWFsIERPTSBtYW5pcHVsYXRpb24gYW5kIGVtdWxhdGVzXG4gKiBEaXNjb3JkJ3Mgb3duIHRvb2x0aXBzIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXG4gKlxuICogQG1vZHVsZSBFbXVsYXRlZFRvb2x0aXBcbiAqIEB2ZXJzaW9uIDAuMC4xXG4gKi9cblxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcbmxldCBUb29sdGlwQ2xhc3Nlc1xuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcblx0aWYoVG9vbHRpcENsYXNzZXMpcmV0dXJuIFRvb2x0aXBDbGFzc2VzXG5cdHJldHVybiBUb29sdGlwQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwidG9vbHRpcFwiLCBcInRvb2x0aXBCbGFja1wiKTtcbn1cbmxldCBUb29sdGlwTGF5ZXJzXG5mdW5jdGlvbiBnZXRUb29sdGlwTGF5ZXJzKCl7XG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcblx0cmV0dXJuIFRvb2x0aXBMYXllcnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImxheWVyXCIsIFwibGF5ZXJDb250YWluZXJcIik7XG59XG5cbmNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcbiAgICBjb25zdCB1cHBlckNhc2UgPSBzaWRlT3JDb2xvclswXS50b1VwcGVyQ2FzZSgpICsgc2lkZU9yQ29sb3Iuc2xpY2UoMSk7XG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xuICAgIGlmICh0b29sdGlwQ2xhc3MpIHJldHVybiB0b29sdGlwQ2xhc3M7XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBjbGFzc0V4aXN0cyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBgJHt2YWx1ZX1weGA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xuXHQvKipcblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXAgLSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9vbHRpcFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2lkZT10b3BdIC0gY2FuIGJlIGFueSBvZiB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdHRhY2hFdmVudHM9dHJ1ZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBsaXN0ZW4gdG8gbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihub2RlLCB0ZXh0LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlLCBhdHRhY2hFdmVudHMgPSB0cnVlfSA9IG9wdGlvbnM7XG5cdFx0dGhpcy5ub2RlID0gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xuICAgICAgICB0aGlzLmxhYmVsID0gdGV4dDtcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XG5cdFx0dGhpcy5zaWRlID0gc2lkZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLnByZXZlbnRGbGlwID0gcHJldmVudEZsaXA7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcblxuICAgICAgICBpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc2lkZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFNpZGUgJHt0aGlzLnNpZGV9IGRvZXMgbm90IGV4aXN0LmApO1xuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XG5cdFx0XG5cdFx0dGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xuXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcblxuXHRcdHRoaXMubGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XG5cblx0XHRjb25zdCBwb2ludGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcblxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHBvaW50ZXJFbGVtZW50KTtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XG5cdFx0dGhpcy5lbGVtZW50LmFwcGVuZCh0aGlzLnRvb2x0aXBFbGVtZW50KTtcblxuXHRcdGlmKGF0dGFjaEV2ZW50cyl7XG5cdFx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLnNob3coKTtcblx0XG5cdFx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRcdFx0XHRcdG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG5cdFx0XHRcdFx0XHRjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2YodGhpcy5ub2RlKSA+IC0xO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnModGhpcy5ub2RlKSk7XG5cdFx0XHRcdFx0XHRpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFxuXHRcdFx0XHRvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcblx0XHRcdH0pO1xuXHRcblx0XHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuICAgIH1cblxuICAgIC8qKiBDb250YWluZXIgd2hlcmUgdGhlIHRvb2x0aXAgd2lsbCBiZSBhcHBlbmRlZC4gKi9cbiAgICBnZXQgY29udGFpbmVyKCkgeyBcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzKStcIiB+IC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIpKTsgXG5cdH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGFib3ZlIHRoZSBlbGVtZW50ICovXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGJlbG93IHRoZSBlbGVtZW50ICovXG4gICAgZ2V0IGNhblNob3dCZWxvdygpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA8PSBVdGlscy5zY3JlZW5IZWlnaHQ7IH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXG4gICAgZ2V0IGNhblNob3dMZWZ0KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggPj0gMDsgfVxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbGVtZW50ICovXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxuXG4gICAgLyoqIEhpZGVzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWxlYXZlLiAqL1xuXHRoaWRlKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuXHR9XG5cbiAgICAvKiogU2hvd3MgdGhlIHRvb2x0aXAuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIG1vdXNlZW50ZXIuIFdpbGwgYXR0ZW1wdCB0byBmbGlwIGlmIHBvc2l0aW9uIHdhcyB3cm9uZy4gKi9cblx0c2hvdygpIHtcbiAgICAgICAgdGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcblx0XHR0aGlzLmxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubGFiZWw7XG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XG5cblx0XHRpZiAodGhpcy5zaWRlID09IFwidG9wXCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dCZWxvdygpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJib3R0b21cIikge1xuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0JlbG93IHx8ICghdGhpcy5jYW5TaG93QmVsb3cgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0JlbG93KCk7XG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0xlZnQgfHwgKCF0aGlzLmNhblNob3dMZWZ0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dMZWZ0KCk7XG5cdFx0XHRlbHNlIHRoaXMuc2hvd1JpZ2h0KCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInJpZ2h0XCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dMZWZ0KCk7XG5cdFx0fVxuXHR9XG5cbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBhYm92ZSB0aGUgbm9kZS4gKi9cblx0c2hvd0Fib3ZlKCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcInRvcFwiKSk7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAxMCkpO1xuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XG5cdH1cblxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xuXHRzaG93QmVsb3coKSB7XG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwiYm90dG9tXCIpKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XG5cdFx0dGhpcy5jZW50ZXJIb3Jpem9udGFsbHkoKTtcblx0fVxuXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIGxlZnQgb2YgdGhlIG5vZGUuICovXG5cdHNob3dMZWZ0KCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAtIDEwKSk7XG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cdH1cblxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCBvZiB0aGUgbm9kZS4gKi9cblx0c2hvd1JpZ2h0KCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcInJpZ2h0XCIpKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyAxMCkpO1xuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xuXHR9XG5cblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xuICAgICAgICBjb25zdCBub2RlY2VudGVyID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyAodGhpcy5ub2RlLm9mZnNldFdpZHRoIC8gMik7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpKSk7XG5cdH1cblxuXHRjZW50ZXJWZXJ0aWNhbGx5KCkge1xuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyKSkpO1xuXHR9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdGhpcy5ub2RlID0gQkRWMi5yZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAodGhpcy5ub2RlLCB0ZXh0LCB7c3R5bGUsIHNpZGV9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMudG9vbHRpcDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1hTdmcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7eG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdmlld0JveDogXCIwIDAgMTIgMTJcIiwgc3R5bGU6IHt3aWR0aDogXCIxOHB4XCIsIGhlaWdodDogXCIxOHB4XCJ9fSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJnXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJhY2tncm91bmRcIiwgZmlsbDogXCJub25lXCIsIGZpbGxSdWxlOiBcImV2ZW5vZGRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtkOiBcIk0wIDBoMTJ2MTJIMFwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtjbGFzc05hbWU6IFwiZmlsbFwiLCBmaWxsOiBcIiNkY2RkZGVcIiwgZDogXCJNOS41IDMuMjA1TDguNzk1IDIuNSA2IDUuMjk1IDMuMjA1IDIuNWwtLjcwNS43MDVMNS4yOTUgNiAyLjUgOC43OTVsLjcwNS43MDVMNiA2LjcwNSA4Ljc5NSA5LjVsLjcwNS0uNzA1TDYuNzA1IDZcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb2R1bGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9kZS1mZXRjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0xheWVycy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvaG9va3MuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3BsdWdpbkNlcnRpZmllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luTW9kdWxlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wb3BvdXRXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvYnVnX2h1bnRlci5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvY2lyY3VzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9zZXJ2ZXJDYXJkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcmVsb2FkSWNvbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NlY3Rpb25lZFNldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZXR0aW5nc0dyb3VwLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJTZXBhcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1vZHVsZVwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJub2RlLWZldGNoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInBhdGhcIiJdLCJuYW1lcyI6WyJtaW5pbXVtRGlzY29yZFZlcnNpb24iLCJjdXJyZW50RGlzY29yZFZlcnNpb24iLCJ3aW5kb3ciLCJEaXNjb3JkTmF0aXZlIiwicmVtb3RlQXBwIiwiZ2V0VmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJiYmRWZXJzaW9uIiwiYmJkQ2hhbmdlbG9nIiwiZGVzY3JpcHRpb24iLCJjaGFuZ2VzIiwidGl0bGUiLCJ0eXBlIiwiaXRlbXMiLCJzZXR0aW5ncyIsImlkIiwiaW5mbyIsImltcGxlbWVudGVkIiwiaGlkZGVuIiwiY2F0IiwiY2F0ZWdvcnkiLCJleHBlcmltZW50YWwiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJkZWZhdWx0Q29va2llIiwic2V0dGluZ3NDb29raWUiLCJzZXR0aW5nc1JQQyIsImRlZmF1bHRSUEMiLCJEYXRlIiwibm93IiwibGlnaHRjb3JkU2V0dGluZ3MiLCJkZWZhdWx0TGlnaHRjb3JkU2V0dGluZ3MiLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIkxheWVycyIsImxheWVycyIsIkJldHRlckRpc2NvcmQiLCJpc0luamVjdGVkIiwicXVlcnlTZWxlY3RvciIsImluamVjdCIsImNsYXNzTmFtZUxheWVycyIsInJlbW92ZURhIiwidjIiLCJXZWJwYWNrTW9kdWxlcyIsImZpbmQiLCJsYXllciIsIlJlYWN0SW5zdGFuY2UiLCJBcGkiLCJGaW5kUmVhY3QiLCJyZW5kZXIiLCJjYWxsIiwiY2xhc3NMaXN0IiwicHJvcHMiLCJjaGlsZHJlbiIsInNwbGl0IiwicHVzaCIsImpvaW4iLCJmb3JFYWNoIiwiZm9yY2VVcGRhdGUiLCJjcmVhdGVMYXllciIsInV1aWR2NCIsImxheSIsImluZGV4IiwiZmluZEluZGV4Iiwic3BsaWNlIiwicmVtb3ZlIiwiTGF5ZXJNb2R1bGVzIiwiTGF5ZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFuaW1hdGlvbiIsIm1vZHVsZXMiLCJWYWx1ZSIsImdldExheWVyIiwia2V5ZG93biIsIndoaWNoIiwiZGl2IiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29tcG9uZW50RGlkTW91bnQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbEVudGVyIiwidGltaW5nIiwidG9WYWx1ZSIsImR1cmF0aW9uIiwiY29tcG9uZW50V2lsbExlYXZlIiwiaW50ZXJwb2xhdGlvbiIsImludGVycG9sYXRlIiwiaW5wdXRSYW5nZSIsIm91dHB1dFJhbmdlIiwic3R5bGUiLCJvcGFjaXR5IiwidHJhbnNmb3JtIiwic2NhbGUiLCJEaXYiLCJfX1NFQ1JFVF9FTU9USU9OX18iLCJjc3MiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwb3NpdGlvbiIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsImRpc3BsYXkiLCJvdmVyZmxvdyIsIldlYmtpdEJveE9yaWVudCIsIldlYmtpdEJveERpcmVjdGlvbiIsIm1zRmxleERpcmVjdGlvbiIsImZsZXhEaXJlY3Rpb24iLCJ6SW5kZXgiLCJwYWRkaW5nVG9wIiwiZmlsdGVyIiwiZGVmYXVsdFByb3BzIiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzIiwiZmluZE1vZHVsZUJ5UHJvdG90eXBlcyIsInByb3RvcyIsImZpbmRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsImZpbmRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJqUXVlcnkiLCJFbGVtZW50IiwibG9hZERhdGEiLCJwbHVnaW5OYW1lIiwiZ2V0UGx1Z2luRGF0YSIsImdldERhdGEiLCJzYXZlRGF0YSIsInNldFBsdWdpbkRhdGEiLCJzZXREYXRhIiwiZGVsZXRlRGF0YSIsImRlbGV0ZVBsdWdpbkRhdGEiLCJ3aGF0IiwibWV0aG9kTmFtZSIsIm9uUmVtb3ZlZCIsImNhbGxiYWNrIiwic3VwcHJlc3NFcnJvcnMiLCJtZXRob2QiLCJ0ZXN0SlNPTiIsImlzUGx1Z2luRW5hYmxlZCIsImlzVGhlbWVFbmFibGVkIiwiaXNTZXR0aW5nRW5hYmxlZCIsImVuYWJsZVNldHRpbmciLCJvbkNoYW5nZSIsImRpc2FibGVTZXR0aW5nIiwidG9nZ2xlU2V0dGluZyIsImdldEJERGF0YSIsInNldEJERGF0YSIsIm1ha2VBZGRvbkFQSSIsImNvb2tpZSIsImxpc3QiLCJtYW5hZ2VyIiwiQWRkb25BUEkiLCJmb2xkZXIiLCJpc0VuYWJsZWQiLCJ0b2dnbGUiLCJyZWxvYWQiLCJnZXRBbGwiLCJrIiwiYSIsIlBsdWdpbnMiLCJUaGVtZXMiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwiZ2V0U2VsZWN0b3JzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsImRlZmF1bHRDbGFzc05hbWUiLCJzZWxlY3RzIiwidXNlclNldHRpbmdzQWNjb3VudCIsInBheW1lbnRTb3VyY2VSb3ciLCJzdWJUZXh0IiwiZGVzY3JpcHRpb25XcmFwcGVyIiwidmlld0JvZHkiLCJ1c2VyU2V0dGluZ3NTZWN1cml0eSIsIkJsdXJQcml2YXRlIiwiZXJyb3IiLCJET01Ub29scyIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicGF0Y2hDbGFzc01vZHVsZXMiLCJub3JtYWxpemVFbGVtZW50IiwicGF0Y2hET01NZXRob2RzIiwibW9kdWxlIiwicGF0Y2hDbGFzc01vZHVsZSIsInVucGF0Y2hDbGFzc01vZHVsZSIsInNob3VsZElnbm9yZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwiQXJyYXkiLCJpc0FycmF5IiwiX19lc01vZHVsZSIsImJhc2VDbGFzc05hbWUiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsIm5vcm1hbENsYXNzIiwiY2FtZWxDYXNlIiwicyIsImkiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJjbGFzc2VzIiwiYyIsImNsZW4iLCJuZXdDbGFzcyIsImFkZCIsImNoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJjb250YWlucyIsIkRPTVRva2VuTGlzdCIsInRva2VuIiwidG9rZW5zIiwidCIsIkNvbG9yZWRUZXh0IiwiaW5qZWN0Q29sb3JlZFRleHQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIk1lc3NhZ2VDb21wb25lbnQiLCJiZWZvcmUiLCJtZXRob2RBcmd1bWVudHMiLCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50IiwibWVzc2FnZUNvbnRlbnQiLCJkaXNwbGF5TmFtZSIsIm9yaWdpbmFsVHlwZSIsIl9fb3JpZ2luYWxNZXRob2QiLCJyb2xlQ29sb3IiLCJjb2xvclN0cmluZyIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZWxlbSIsInNldFByb3BlcnR5IiwicGF0aCIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJyZXNvbHZlIiwiZWxlY3Ryb24iLCJzZW5kU3luYyIsIk1ldGFFcnJvciIsIm9yaWdpbmFsSlNSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJvcmlnaW5hbENTU1JlcXVpcmUiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJhZGRvbkNhY2hlIiwidGltZUNhY2hlIiwid2F0Y2hlcnMiLCJwYXRjaEV4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsInBsdWdpbnNGb2xkZXIiLCJfcGx1Z2luc0ZvbGRlciIsInJlYWxwYXRoU3luYyIsImRhdGFQYXRoIiwidGhlbWVzRm9sZGVyIiwiX3RoZW1lc0ZvbGRlciIsImxvYWRBZGRvbkNlcnRpZmllckNhY2hlIiwiZGF0YVN0b3JlIiwiZ2V0U2V0dGluZ0dyb3VwIiwic2V0U2V0dGluZ0dyb3VwIiwiZW5jcnlwdFNldHRpbmdzQ2FjaGUiLCJKU09OIiwicGFyc2UiLCJkZWNyeXB0U2V0dGluZ3NDYWNoZSIsImhhc2giLCJyZXN1bHQiLCJzdXNwZWN0Iiwic2F2ZUFkZG9uQ2FjaGUiLCJzdHJpbmdpZnkiLCJ3YXRjaENvbnRlbnQiLCJjb250ZW50VHlwZSIsImlzUGx1Z2luIiwiYmFzZUZvbGRlciIsImZpbGVFbmRpbmciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsIlByb21pc2UiLCJyIiwic2V0VGltZW91dCIsInN0YXRTeW5jIiwiZXJyIiwiY29kZSIsInVubG9hZFBsdWdpbiIsInVubG9hZFRoZW1lIiwiaXNGaWxlIiwic3RhdHMiLCJtdGltZSIsImdldFRpbWUiLCJsb2FkUGx1Z2luIiwibG9hZFRoZW1lIiwicmVsb2FkUGx1Z2luIiwicmVsb2FkVGhlbWUiLCJ1bndhdGNoQ29udGVudCIsImNsb3NlIiwiZXh0cmFjdE1ldGEiLCJmaXJzdExpbmUiLCJoYXNPbGRNZXRhIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIm1ldGEiLCJyYXdNZXRhIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJpbmRleE9mIiwicGFyc2VkIiwiZm9ybWF0IiwiYmxvY2siLCJvdXQiLCJmaWVsZCIsImFjY3VtIiwibGluZSIsImNoYXJBdCIsImwiLCJzdWJzdHIiLCJzZWxmIiwib3JpZ2luYWxSZXF1aXJlIiwicG9zc2libGVQYXRoIiwiYmFzZW5hbWUiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3RyaXBCT00iLCJhZGRlZCIsImF0aW1lTXMiLCJtb2RpZmllZCIsIm10aW1lTXMiLCJzaXplIiwiX2NvbXBpbGUiLCJkaWRFeHBvcnQiLCJpc0VtcHR5IiwiZXhwb3J0cyIsIm1ha2VQbGFjZWhvbGRlclBsdWdpbiIsImdldE5hbWUiLCJnZXRBdXRob3IiLCJnZXREZXNjcmlwdGlvbiIsInNvdXJjZSIsIndlYnNpdGUiLCJsb2FkQ29udGVudCIsInByb2Nlc3NGaWxlIiwidGltZXN0YW1wIiwiZmlsZSIsImhhcm0iLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInN0YWNrIiwidW5sb2FkQ29udGVudCIsImNhY2hlIiwiaXNMb2FkZWQiLCJyZWxvYWRDb250ZW50IiwiY2FudFVubG9hZCIsImxvYWROZXdDb250ZW50IiwiYmFzZWRpciIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJjb250ZW50TGlzdCIsInZhbHVlcyIsInJlbW92ZWQiLCJmIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJsb2FkUGx1Z2lucyIsImxvYWRUaGVtZXMiLCJjb25maWciLCJoYXNTdGFydGVkIiwiZmxhdCIsInZlcnNpb24iLCJFRCIsIldlYlNvY2tldCIsInBhdGNoQXR0cmlidXRlcyIsImluaXRTZXR0aW5ncyIsImNoZWNrRm9yR3VpbGRzIiwiaW5pdGlhbGl6ZSIsImluaXRpYWxpemVTZXR0aW5ncyIsImNvbnRlbnRNYW5hZ2VyIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJBbmNob3IiLCJlbnN1cmVFeHBvcnRlZCIsInRoZW4iLCJEaXNjb3JkVGFnIiwiRGlzY29yZFRhZ0NvbXAiLCJiYWRnZURpdiIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJzZWN0aW9uIiwicG9wZWQiLCJwb3AiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwibW9kYWwiLCJpbm5lciIsInJlc3BvbnNpdmVXaWR0aE1vYmlsZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwic29jaWFsTW9kdWxlMSIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwibGluayIsImNsYXNzTmFtZUNvbG9yTXV0ZWQiLCJzaXplcyIsImNsYXNzTmFtZVZlcnNpb25IYXNoIiwiY29sb3JNdXRlZCIsInNpemUzMiIsInZlcnNpb25IYXNoIiwiYnJhbmNoIiwiYnVpbGRJbmZvIiwiYWRkaXRpb25hbCIsInJlYWN0Iiwic2l6ZTEyIiwiY29tbWl0Iiwib3JpZ2luYWxWZXJzaW9ucyIsImdldEd1aWxkQ2xhc3NlcyIsImd1aWxkc1dyYXBwZXIiLCJmaW5kQnlQcm9wcyIsImd1aWxkcyIsInBpbGwiLCJndWlsZExpc3RJdGVtc1BhdGNoIiwiR3VpbGRDbGFzc2VzIiwibGlzdEl0ZW1DbGFzcyIsImJsb2JDbGFzcyIsInJlYWN0SW5zdGFuY2UiLCJHdWlsZENvbXBvbmVudCIsInJldHVybiIsInRoaXNPYmplY3QiLCJndWlsZERhdGEiLCJ1bnJlYWQiLCJzZWxlY3RlZCIsImF1ZGlvIiwidmlkZW8iLCJiYWRnZSIsImFuaW1hdGFibGUiLCJndWlsZFBpbGxQYXRjaCIsImd1aWxkUGlsbCIsImhvdmVyZWQiLCJndWlsZFNlcGFyYXRvclBhdGNoIiwiR3VpbGRzIiwiZ3VpbGRDb21wb25lbnRzIiwiR3VpbGRTZXBhcmF0b3IiLCJTZXBhcmF0b3IiLCJBdHRhY2htZW50UGF0Y2giLCJBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImdldE5lc3RlZFByb3AiLCJwYXRjaCIsIm1lc3NhZ2VIZWFkZXJQYXRjaCIsIk1lc3NhZ2VIZWFkZXIiLCJjaGF0IiwibmV4dFRpY2siLCJnZXRFbGVtZW50QnlJZCIsImNoaWxkTm9kZXMiLCJibG9ja0RpdiIsImRpc3RhbnQiLCJnZXRCYWRnZXMiLCJiYWRnZXMiLCJzdmciLCJ3aWR0aCIsInNjb3BlcyIsInNjb3BlIiwiY29tcG9uZW50IiwiZGl2MiIsInJlYWN0RG9tIiwibWVtYmVyTGlzdFBhdGNoIiwiTWVtYmVyTGlzdEl0ZW0iLCJyZW5kZXJEZWNvcmF0b3JzIiwidXBkYXRlSW5qZWN0b3IiLCJpbmplY3Rpb25QYXRoIiwicmVsZWFzZUNoYW5uZWwiLCJnbG9iYWxzIiwiYXBwIiwiZ2V0UmVsZWFzZUNoYW5uZWwiLCJlbnYiLCJBUFBEQVRBIiwiSE9NRSIsIlhER19DT05GSUdfSE9NRSIsInN0YWJsZSIsImNhbmFyeSIsInB0YiIsInBsdWdpbkRhdGEiLCJCREZpbGUiLCJ3cml0ZUZpbGVTeW5jIiwic2V0dGluZ3NGaWxlIiwidW5saW5rU3luYyIsIl9pbmplY3Rpb25QYXRoIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJzZWxlY3RvciIsImdldFNlbGVjdG9yIiwiY2xhc3NMYXllciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJtZW51IiwiYXR0YWNoIiwiY20iLCJxdWVyeSIsImNvbnRhaW5lciIsImxheWVyQ29udGFpbmVyIiwiY21XcmFwIiwic3R5bGVGbGV4aWJsZSIsImFjY29tbW9kYXRlU2Nyb2xsYmFyIiwiYXBwZW5kIiwiY2xpZW50WSIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJmdWxsUGF0aCIsImVsIiwibmFtZXMiLCJwYXJlbnROb2RlIiwidW5zaGlmdCIsIm93bmVyRG9jdW1lbnQiLCJ0YWdOYW1lIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsInJlcyIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwiXyIsInVwZGF0ZSIsInBlcmZvcm1hbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZSIsInRpbWVGcmFjdGlvbiIsInByb2dyZXNzIiwiUSIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0Iiwic29tZSIsIm4iLCJub2RlVHlwZSIsImJhc2VFbGVtZW50IiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwibWF0Y2hlcyIsInByZXZpb3VzIiwicHJldmlvdXNBbGwiLCJwcmV2aW91c1VudGlsIiwiaW5kZXhJblBhcmVudCIsIm51bSIsInBhcmVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJhdHRyaWJ1dGUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0IiwidGV4dENvbnRlbnQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJvbiIsImV2ZW50IiwiZGVsZWdhdGUiLCJuYW1lc3BhY2UiLCJoYXNEZWxlZ2F0ZSIsImV2ZW50RnVuYyIsImNhbmNlbCIsIm5ld0NhbmNlbCIsIm9uY2UiLCJfX29mZkFsbCIsIm1hdGNoRmlsdGVyIiwibGlzdGVuZXIiLCJkZWZhdWx0RmlsdGVyIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsIm5vZGVzIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJ3cmFwIiwiZG9tV3JhcHBlciIsInJlc29sdmVFbGVtZW50IiwiRW1vamlSZWdleCIsIkN1c3RvbUVtb2ppTW9kdWxlIiwiQ3VzdG9tRW1vamkiLCJFbW9qaU1vZHVsZUFwaSIsImdldEN1c3RvbUVtb2ppQnlJZCIsIkF1dG9jb21wbGV0ZU1vZHVsZSIsIkF1dG9Db21wbGV0aW9uVGVtcGxhdGVzIiwiZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyIsIkVtb2ppTW9kdWxlUXVlcnkiLCJxdWVyeUVtb2ppUmVzdWx0cyIsIk1lc3NhZ2VzIiwiRU1PSklfTUFUQ0hJTkciLCJndWlsZE1vZHVsZSIsImdldEd1aWxkIiwiZ2V0R3VpbGRzIiwiaXNGZXRjaGluZyIsImVtb2ppU2VhcmNoIiwiZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uQ2xpY2siLCJvbkhvdmVyIiwiUiIsInByZWZpeCIsIlRpdGxlIiwiRW1vamlGaWx0ZXJNb2R1bGUiLCJpc0Vtb2ppRGlzYWJsZWQiLCJpc1VzYWJsZSIsInVzYWJsZSIsInN1cnJvZ2F0ZXMiLCJkaXZlcnNpdHkiLCJ1c2VTdGF0ZSIsInVzZUZvcmNlVXBkYXRlIiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJ0ZXN0cyIsInRocmVhdHMiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwibm9fY29tbWVudHMiLCJzY3JwdCIsImhhc2hUb1VybCIsImNoZWNrSGFzaCIsIl9fcGF0aCIsImlzRnJvbUxvYWRlciIsImNyeXB0byIsImFsbG9jIiwiY3JlYXRlUmVhZFN0cmVhbSIsImNodW5rIiwiY29uY2F0IiwiaGFzaFJlc3VsdCIsImRpZ2VzdCIsInJlbmRlclRvRWxlbWVudHMiLCJmbG93ZXJTdGFyTW9kdWxlIiwiZmxvd2VyU3RhckNvbnRhaW5lciIsImNoaWxkTW9kdWxlIiwiY2hpbGRDb250YWluZXIiLCJib3JkZXJDb2xvciIsIm5leHROb2RlIiwiY29uZmlybVRleHQiLCJkYW5nZXIiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsInRvb2x0aXBXcmFwIiwidmlld0JveCIsIngiLCJ5IiwibWFzayIsImZpbGwiLCJwb2ludGVyRXZlbnRzIiwib2ZmaWNpYWwiLCJzcGFuIiwiZmxvYXQiLCJmbG93ZXJTdGFyIiwiZ2V0S2V5ZWRBcnJheSIsImJ1ZmZlciIsImluc3RhbGxQYXRoIiwiY3Vyc29yIiwic3Ryb2tlIiwic2F2ZSIsIk9iamVjdFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2VNb2R1bGUiLCJsb2NhbFN0b3JhZ2UiLCJpbXBsIiwiYnRvYSIsInNldEludGVydmFsIiwic2FmZUpTT05QYXJzZSIsImF0b2IiLCJnZW5lcmF0ZUtleSIsImRlY2lwaGVyIiwiZGVjcnlwdGVkIiwiZmluYWwiLCJjaXBoZXIiLCJlbmNyeXB0ZWQiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsInJlbW90ZSIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJkZWxldGUiLCJlZGl0Iiwic2hlbGwiLCJvcGVuSXRlbSIsInVwZGF0ZVBsdWdpbkxpc3QiLCJzYXZlZCIsIm5ld01lc3NhZ2UiLCJvbk1lc3NhZ2UiLCJvblN3aXRjaCIsInBvcG91dFdpbmRvdyIsIndpbmRvd3MiLCJNYXAiLCJwb3BvdXRNb2R1bGUiLCJnZXRXaW5kb3ciLCJzZXRJbW1lZGlhdGUiLCJiZEV2ZW50cyIsInJlbW92ZVRoZW1lcyIsImFwcGx5VGhlbWVzIiwidGhlbWVOYW1lIiwidGhlbWUiLCJleGlzdGluZyIsInVuZXNjYXBlIiwicmVtb3ZlQXR0cmlidXRlIiwiVjJfUHVibGljU2VydmVycyIsIl9hcHBlbmRCdXR0b24iLCJWMkNfUHVibGljU2VydmVycyIsInJvb3RJZCIsImJ1dHRvbiIsImJ0biIsImNpcmNsZUJ1dHRvbk1hc2siLCJjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lciIsImRvd25sb2FkUHJvZ3Jlc3MiLCJ0dXRvcmlhbENvbnRhaW5lciIsImFkZEJ1dHRvbiIsImd1aWxkUGF0Y2giLCJHdWlsZExpc3QiLCJ3ZWJwYWNrTW9kdWxlcyIsIkd1aWxkTGlzdE9sZCIsInJlbW92ZUJ1dHRvbiIsIkJEU2lkZWJhckhlYWRlciIsIlB1cmVDb21wb25lbnQiLCJzaWRlYmFyQ29tcG9uZW50cyIsIkhlYWRlciIsIkl0ZW0iLCJjaGFuZ2Vsb2dCdXR0b24iLCJIaXN0b3J5IiwicmVuZGVyZWQiLCJpc0NsZWFyaW5nQ2FjaGUiLCJWMl9TZXR0aW5nc1BhbmVsIiwidXBkYXRlU2V0dGluZ3MiLCJzaWRlYmFyIiwiVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIiwicmVnaXN0ZXJDb21wb25lbnRzIiwicmVnaXN0ZXIiLCJtYWtlQ29tcG9uZW50IiwibGlnaHRjb3JkQ29tcG9uZW50IiwiUHJlc2VuY2VDb21wb25lbnQiLCJBY2NvdW50SW5mb3NDb21wb25lbnQiLCJBcGlQcmV2aWV3Q29tcG9uZW50IiwiY29yZUNvbXBvbmVudCIsImN1c3RvbUNzc0NvbXBvbmVudCIsInJlbmRlckFkZG9uUGFuZSIsImNvcmVTZXR0aW5ncyIsImdldFNldHRpbmdzIiwiY2F0ZWdvcmllcyIsIlNldCIsInNlY3Rpb25zIiwiUHJlc2VuY2VTZXR0aW5ncyIsImNoZWNrZWQiLCJwdWJsaWNTZXJ2ZXJzTW9kdWxlIiwidm9pY2VNb2RlIiwidGZIb3VyIiwiY29sb3JlZFRleHQiLCJkTW9kZSIsIlNldHRpbmdzIiwiZGV2TW9kZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImlwY1JlbmRlcmVyIiwiQW50aUFkRE0iLCJibHVyUHJpdmF0ZSIsImRpc2FibGVUeXBpbmciLCJhcHBTZXR0aW5ncyIsInJlbGF1bmNoIiwiY29yZSIsIk5vdGlmaWNhdGlvbnNVc2VTaGltIiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJjaG9pY2VzIiwiYWN0dWFsIiwiZ2VuZXJhbCIsIlNldHRpbmdTdWJUaXRsZSIsIkRyb3Bkb3duIiwic2VhcmNoYWJsZSIsImNsZWFyYWJsZSIsImludm9rZSIsImFyZ3YiLCJzZXNzaW9uIiwiY2xlYXJDYWNoZSIsIlYyQ19QcmVzZW5jZVNldHRpbmdzIiwiVjJDX0FjY291bnRJbmZvcyIsIkFwaVByZXZpZXciLCJDc3NFZGl0b3IiLCJDb250ZW50TGlzdCIsIm9yaWdpbmFsUmVuZGVyIiwiZW51bWVyYWJsZSIsIkNhcmRMaXN0IiwiU2V0dGluZ0NvbXBvbmVudCIsInBhbmVscyIsInBhbmVsIiwiZ2V0Q29tcG9uZW50IiwiTENpdGVtcyIsIkxDRGV2SXRlbXMiLCJUaGVtZU1vZHVsZSIsImxvYWRUaGVtZURhdGEiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImZvcm1hdFN0cmluZyIsInN0cmluZyIsInJlcGxhY2VtZW50IiwiZXNjYXBlIiwicGFyYW1zIiwiaW5zdGVhZCIsInNpbGVudCIsImZvcmNlIiwib3JpZ01ldGhvZCIsImNhbmNlbGVkIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInRlbXBSZXQiLCJfX21vbmtleVBhdGNoZWQiLCJkaXNjb25uZWN0IiwiaGFzTm90aWNlIiwiZm9ybSIsInRvYXN0V3JhcHBlciIsImljb24iLCJ0aW1lb3V0IiwidG9hc3RFbGVtIiwiaW5uZXJUZXh0IiwibW9kYWxNb2R1bGUiLCJoaWRlT25GdWxsc2NyZWVuIiwiaGVhZGVyTW9kdWxlIiwiaGVhZGVyIiwiZm9vdGVyMk1vZHVsZSIsImZvY3VzTG9jayIsImJhY2tkcm9wIiwiYmFja2Ryb3BXaXRoTGF5ZXIiLCJjbG9zaW5nTGlzdGVuZXJzIiwicGx1Z2luRXJyb3JzIiwidGhlbWVFcnJvcnMiLCJnZW5lcmF0ZVRhYiIsInRhYnMiLCJNb2RhbFN0YWNrIiwiQ2hhbmdlbG9nQ2xhc3NlcyIsIlRleHRFbGVtZW50IiwiRmxleENoaWxkIiwiVGl0bGVzIiwiQ2hhbmdlbG9nIiwic2VsZWN0YWJsZSIsIk1hcmtkb3duUGFyc2VyIiwiaW1hZ2UiLCJzdWJ0aXRsZSIsImNlIiwiY2hhbmdlbG9nSXRlbXMiLCJlbnRyeSIsIm1hcmdpbiIsInJlbmRlckhlYWRlciIsIkNoaWxkIiwiZ3JvdyIsInNocmluayIsInRhZyIsIlRhZ3MiLCJINCIsIlNpemVzIiwiU01BTEwiLCJDb2xvcnMiLCJTVEFOREFSRCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3JDbGFzc2VzIiwiYW5jaG9yIiwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlciIsImpvaW5TdXBwb3J0U2VydmVyIiwiam9pbkJEMiIsInN1cHBvcnRMaW5rIiwiZGVmYXVsdEZvb3RlciIsIm9uU2Nyb2xsIiwiTW9kYWxBY3Rpb25zIiwiTWFya2Rvd24iLCJDb25maXJtYXRpb25Nb2RhbCIsImVtcHR5RnVuY3Rpb24iLCJvcGVuTW9kYWwiLCJyZWQiLCJtb2RhbEtleSIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJpc0RlZmF1bHQiLCJtb2QiLCJwcm94eSIsImZ1bmMiLCJfX3Byb3RvX18iLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImpvaW5MQyIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsIm1hcmdpbk1vZHVsZTIiLCJkZWZhdWx0TWFyZ2luaDUiLCJjb2xvck1vZHVsZSIsImNvbG9yU3RhbmRhcmQiLCJzaXplTW9kdWxlIiwic2Nyb2xsYmFyTW9kdWxlMSIsInNjcm9sbGJhckdob3N0SGFpcmxpbmUiLCJHdWlsZE1vZHVsZSIsImdldFJlbGF0aW9uc2hpcHMiLCJzZXNzaW9uTW9kdWxlIiwiZ2V0U2Vzc2lvbnMiLCJzaXplMTQiLCJoNSIsImdldFByb2ZpbGVWYWx1ZSIsImdldFN0YXRpc3RpY3MiLCJnZXRTZXNzaW9uVmFsdWUiLCJtYXJnaW5Cb3R0b20yMCIsInNlc3Npb25zUmF3Iiwic2Vzc2lvbnMiLCJzZXNzaW9uSWQiLCJjbGllbnRJbmZvIiwib3MiLCJjbGllbnQiLCJhY3Rpdml0aWVzIiwicmVwZWF0IiwiY3JlYXRlZEF0IiwiYXZhdGFyVVJMIiwiYXZhdGFyIiwiZ2V0QXZhdGFyVVJMIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZmxhZ3MiLCJoYXNQcmVtaXVtU3Vic2NyaXB0aW9uIiwiZW1haWwiLCJtZmFFbmFibGVkIiwibW9iaWxlIiwicGhvbmUiLCJ2ZXJpZmllZCIsIm5zZndBbGxvd2VkIiwicmVsYXRpb25zIiwiZnJpZW5kcyIsImlzRnJpZW5kIiwiaXNCbG9ja2VkIiwiaGlnaHRsaWdodEpTIiwiaGlnaGxpZ2h0IiwibWVzc2FnZU1vZHVsZTEiLCJtZXNzYWdlTW9kdWxlMiIsIkNvZGVDb250ZW50IiwibGlzdExhbmd1YWdlcyIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJvcGVuRXh0ZXJuYWwiLCJjb21wIiwiY29tcE5hbWUiLCJjb21wUGF0aCIsInJlbmRlcnMiLCJDb21wb25lbnRQcmV2aWV3IiwidGFiIiwiQWxsUHJldmlld3MiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wQ2F0ZWdvcnkiLCJwcm9wU3RyaW5ncyIsImNoaWxkcmVuUHJvcCIsInN0ciIsIm9wZW5UYWciLCJjbG9zZVRhZyIsInZpc2libGVLZXkiLCJwcm9wT2JqZWN0IiwiaXNMYXN0IiwiaXNGaXJzdCIsImNoaWxkcmVuRGF0YSIsImhlbHAiLCJzdWNjZXNzIiwic2V0U3RhdGUiLCJtYXJnaW5Cb3R0b20iLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInRydXN0ZWQiLCJjbG9zZVNldHRpbmdzIiwicGFuZWxSZWYiLCJzZXR0aW5nc09wZW4iLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsImlzSGlkZGVuIiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsImNhcmROb2RlIiwidGhpc05vZGVPZmZzZXQiLCJjb250YWluZXJPZmZzZXQiLCJlbmRQb2ludCIsImdldFN0cmluZyIsInNldHRpbmdzQ29tcG9uZW50IiwicmVmIiwiWFN2ZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWVJbmRleCIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwicG9wTGF5ZXIiLCJtYWtlTGluayIsIm1ha2VCdXR0b24iLCJhY3Rpb24iLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvbkFkZG9uQ2hhbmdlcyIsIm9wZW5Gb2xkZXIiLCJvcGVuUGF0aCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJzb3J0T3B0aW9ucyIsImRpcmVjdGlvbnMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImdldEFkZG9ucyIsInNvcnRlZEFkZG9ucyIsImIiLCJjYXAiLCJmaXJzdCIsInNlY29uZCIsImxvY2FsZUNvbXBhcmUiLCJyZW5kZXJDaGVja1VwZGF0ZXMiLCJaZXJlc1BsdWdpbkxpYnJhcnkiLCJQbHVnaW5VcGRhdGVzIiwiY2hlY2tBbGwiLCJ0b29sdGlwSXNTaG93aW5nIiwidG9vbHRpcCIsIm1hcmdpbkxlZnQiLCJjaGVja1VwZGF0ZUJ1dHRvbiIsIkVtdWxhdGVkVG9vbHRpcCIsImF0dGFjaEV2ZW50cyIsInJlZnJlc2hJY29uIiwiYWRkb25DYXJkcyIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsInN3aXRjaCIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImRldGFjaGVkUm9vdCIsImNvZGVNaXJyb3IiLCJsaW5lTnVtYmVycyIsIm1vZGUiLCJpbmRlbnRVbml0Iiwic2Nyb2xsYmFyU3R5bGUiLCJfY2NzcyIsImNjc3MiLCJ1cGRhdGVMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJTZXR0aW5nc1RpdGxlIiwiQ2hlY2tib3giLCJib3JkZXJSaWdodCIsImJvcmRlckxlZnQiLCJmb250U2l6ZSIsImFyZyIsImdldFZhbHVlIiwiZHJvb3QiLCJfcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsInJvb3QiLCJpbmplY3RSb290IiwiQkRFcnJvckJvdW5kYXJ5IiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsIkRlbGV0ZSIsIkRvd25BcnJvdyIsIkVkaXQiLCJtYXJnaW5Nb2R1bGUiLCJtYXJnaW5Ub3A2MCIsIlYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyIsInByZXZpZXciLCJpc2ZldGNoaW5nIiwiYXNzZXRDb21wb25lbnRzIiwidXBkYXRlV2hlbkZldGNoZWQiLCJkZWZhdWx0U2V0dGluZyIsIlJQQ1Byb3BzIiwiYXNzZXQiLCJ1cGRhdGVQcmV2aWV3Iiwib3B0aW9uc0NvbXBvbmVudHMiLCJvaGdvZG9oZnVjayIsIl9vcHRpb25zQ29tcG9uZW50cyIsImFycmF5IiwiaW5wdXRUZXh0TW9kdWxlcyIsIklucHV0VGV4dCIsInJlbW92ZUtleWJpbmQiLCJfaG9yaXpvbnRhbCIsImlucHV0TWluaSIsInNpemUxNiIsInNpemUyMCIsImlucHV0IiwibGFzdEVkaXRlZCIsImlzVGltaW5nIiwicm93TW9kdWxlIiwiZmxleE1vZHVsZSIsImlucHV0TW9kdWxlIiwic2l6ZU1vZHVsZTIiLCJyb3ciLCJmbGV4Q2hpbGQiLCJJbnB1dE51bWJlck1vZHVsZXMiLCJJbnB1dE51bWJlciIsImNvbG9yVHJhbnNwYXJlbnQiLCJzZXRWYWx1ZSIsImNsaXBib2FyZCIsIklucHV0Q2hvaWNlTW9kdWxlcyIsIklucHV0Q2hvaWNlIiwiRGl2aWRlck1vZHVsZXMiLCJEaXZpZGVyIiwiZGl2aWRlciIsImRpdmlkZXJEZWZhdWx0IiwiRGlzY29yZEJ1dHRvbiIsIlJwY1ByZXZpZXciLCJhY3RpdmUiLCJjaGFuZ2VUYWIiLCJhbmNpZW50VGFiIiwic2V0QWN0aXZlIiwiZmxleCIsInJwYyIsImlzQWN0aXZlIiwiUHJvZmlsZSIsIlBvcG91dCIsIlRhYiIsImVtcHR5Q2xhc3NlcyIsIlByZXNlbmNlRXJyb3JDYXRjaGVyIiwiZXJySW5mbyIsImVtcHR5U3RhdGVJbWFnZSIsImVtcHR5U3RhdGUiLCJlbXB0eVN0YXRlSGVhZGVyIiwiZW1wdHlTdGF0ZVN1YnRleHQiLCJwb3BvdXRNb2R1bGVzIiwiVXNlclBvcG91dENvbXBvbmVudCIsIlBvcG91dFByb3BzIiwiVXNlclBvcG91dCIsInJlbmRlcjEiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwiX1VzZXJQb3BvdXQiLCJwb3BvdXQiLCJleGNsdWRlUHJvcGVydGllcyIsInByb2ZpbGVNb2R1bGVzIiwiVXNlclByb2ZpbGVDb21wb25lbnQiLCJQcm9maWxlUHJvcHMiLCJjb25uZWN0ZWRQcm9maWxlU3RvcmUiLCJVc2VyUHJvZmlsZSIsInJlbmRlcjIiLCJyZW5kZXIzIiwicmVuZGVyNCIsInByb2ZpbGUiLCJTZXR0aW5nc1ZpZXciLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsImhvb2tzIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImNhdGVnb3J5U2x1Z3MiLCJmZXRjaCIsInNlYXJjaEVuZFBvaW50Iiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInJvdW5kIiwic2NyZWVuWCIsInNjcmVlblkiLCJ3aW4iLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInNldE1lbnVCYXJWaXNpYmlsaXR5IiwicmVzaXphYmxlIiwibWF4aW1pemFibGUiLCJtaW5pbWl6YWJsZSIsImFsd2F5c09uVG9wIiwiY2VudGVyIiwid2ViUHJlZmVyZW5jZXMiLCJub2RlSW50ZWdyYXRpb24iLCJiZFNlcnZlciIsIm9ubGluZSIsIm1lbWJlcnMiLCJpY29uVXJsIiwibmF0aXZlam9pbiIsInNlcnZlcjIiLCJndWlsZExpc3QiLCJnZXRGbGF0dGVuZWRHdWlsZElkcyIsImRlZmF1bHRMaXN0IiwiREVGQVVMVF9BVkFUQVJTIiwiU2VydmVyQ2FyZCIsImZhbGxiYWNrIiwiZmxvb3IiLCJjb25uZWN0RW5kUG9pbnQiLCJyZXNwb25zZSIsIm9uU2V0U2VjdGlvbiIsInNlYXJjaElucHV0IiwiZ2V0VGhpcyIsInNlcmNoaW5wdXQiLCJzZWFyY2hpbnB1dCIsIm1heExlbmd0aCIsIm5vdENvbm5lY3RlZCIsImNvbHVtbk1vZHVsZSIsIm1pbkhlaWdodCIsImxpbmVIZWlnaHQiLCJ1c2VFZmZlY3QiLCJUYWJCYXJTZXBhcmF0b3IiLCJWMkNfU2VydmVyQ2FyZCIsImltYWdlRXJyb3IiLCJjYXJkTW9kdWxlIiwiY2FyZCIsImNhcmRQcmltYXJ5IiwiX2hvcml6b250YWxSZXZlcnNlIiwid3JhcE1vZHVsZSIsIm5vV3JhcCIsInN0cmVhbWVyTW9kZUVuYWJsZWQiLCJvbkVycm9yIiwiaGFuZGxlRXJyb3IiLCJkcmFnZ2FibGUiLCJob3Jpem9udGFsIiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsInN3aXRjaEl0ZW0iLCJiZXRhQ2xhc3NOYW1lcyIsIlYyQ19TZXR0aW5nc0dyb3VwIiwicmVuZGVyT2xkU2V0dGluZ3MiLCJidXR0b25Db21wb25lbnQiLCJiZXRhIiwidXNlclNldHRpbmdzVm9pY2UiLCJERUZBVUxUIiwiVjJDX1NldHRpbmdzVGl0bGUiLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiU3dpdGNoSXRlbSIsIlYyQ19UYWJCYXJTZXBhcmF0b3IiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJjYW5TaG93QWJvdmUiLCJjYW5TaG93QmVsb3ciLCJjYW5TaG93TGVmdCIsImNhblNob3dSaWdodCIsIl9jbGFzc05hbWUiLCJzaG93QWJvdmUiLCJzaG93QmVsb3ciLCJzaG93TGVmdCIsInNob3dSaWdodCIsImNlbnRlckhvcml6b250YWxseSIsImNlbnRlclZlcnRpY2FsbHkiLCJub2RlY2VudGVyIiwiZmluZERPTU5vZGUiLCJWMkNfWFN2ZyJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFPLE1BQU1BLHFCQUFxQixHQUFHLFNBQTlCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUlDLE1BQU0sQ0FBQ0MsYUFBUCxJQUF3QkQsTUFBTSxDQUFDQyxhQUFQLENBQXFCQyxTQUE3QyxJQUEwREYsTUFBTSxDQUFDQyxhQUFQLENBQXFCQyxTQUFyQixDQUErQkMsVUFBekYsSUFBdUdILE1BQU0sQ0FBQ0MsYUFBUCxDQUFxQkMsU0FBckIsQ0FBK0JDLFVBQS9CLEVBQXhHLElBQXdKLFNBQXRMO0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsT0FBNUI7QUFDQSxNQUFNQyxVQUFVLEdBQUcsT0FBbkI7QUFDQSxNQUFNQyxZQUFZLEdBQUc7QUFDeEJDLGFBQVcsRUFBRSx3QkFEVztBQUV4QkMsU0FBTyxFQUFFLENBQ0w7QUFDSUMsU0FBSyxFQUFFLFdBRFg7QUFFSUMsUUFBSSxFQUFFLE9BRlY7QUFHSUMsU0FBSyxFQUFFLENBQ0gsc0RBREcsRUFFSCxzREFGRztBQUhYLEdBREs7QUFGZSxDQUFyQjtBQWNBLE1BQU1DLFFBQVEsR0FBRztBQUNwQiw0QkFBOEI7QUFBQ0MsTUFBRSxFQUFFLFdBQUw7QUFBa0JDLFFBQUksRUFBRSxFQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsSUFBekc7QUFBZ0hDLE9BQUcsRUFBRTtBQUFySCxHQURWO0FBRXBCLDRCQUE4QjtBQUFDSixNQUFFLEVBQUUsV0FBTDtBQUFrQkMsUUFBSSxFQUFFLEVBQXhCO0FBQTZFQyxlQUFXLEVBQUUsSUFBMUY7QUFBaUdDLFVBQU0sRUFBRSxJQUF6RztBQUFnSEMsT0FBRyxFQUFFO0FBQXJILEdBRlY7QUFHcEIsd0JBQThCO0FBQUNKLE1BQUUsRUFBRSxVQUFMO0FBQWtCQyxRQUFJLEVBQUUsbUNBQXhCO0FBQTZFQyxlQUFXLEVBQUUsS0FBMUY7QUFBa0dDLFVBQU0sRUFBRSxLQUExRztBQUFpSEMsT0FBRyxFQUFFO0FBQXRILEdBSFY7O0FBS3BCOztBQUNBO0FBQ0Esb0JBQThCO0FBQUNKLE1BQUUsRUFBRSxVQUFMO0FBQWtCQyxRQUFJLEVBQUUsK0JBQXhCO0FBQTZFQyxlQUFXLEVBQUUsSUFBMUY7QUFBaUdDLFVBQU0sRUFBRSxLQUF6RztBQUFnSEMsT0FBRyxFQUFFLE1BQXJIO0FBQTZIQyxZQUFRLEVBQUU7QUFBdkksR0FQVjtBQVFwQixrQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFVBQUw7QUFBa0JDLFFBQUksRUFBRSxnREFBeEI7QUFBNkVDLGVBQVcsRUFBRSxJQUExRjtBQUFpR0MsVUFBTSxFQUFFLEtBQXpHO0FBQWdIQyxPQUFHLEVBQUUsTUFBckg7QUFBNkhDLFlBQVEsRUFBRTtBQUF2SSxHQVJWO0FBU3BCLGdCQUE4QjtBQUFDTCxNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLHNCQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsS0FBekc7QUFBZ0hDLE9BQUcsRUFBRSxNQUFySDtBQUE2SEMsWUFBUSxFQUFFO0FBQXZJLEdBVFY7QUFVcEIsbUJBQThCO0FBQUNMLE1BQUUsRUFBRSxVQUFMO0FBQWtCQyxRQUFJLEVBQUUsK0JBQXhCO0FBQTZFQyxlQUFXLEVBQUUsSUFBMUY7QUFBaUdDLFVBQU0sRUFBRSxLQUF6RztBQUFnSEMsT0FBRyxFQUFFLE1BQXJIO0FBQTZIQyxZQUFRLEVBQUU7QUFBdkksR0FWVjtBQVdwQixlQUE4QjtBQUFDTCxNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLDRDQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsS0FBekc7QUFBZ0hDLE9BQUcsRUFBRSxNQUFySDtBQUE2SEMsWUFBUSxFQUFFO0FBQXZJLEdBWFY7QUFZcEIsc0JBQThCO0FBQUNMLE1BQUUsRUFBRSxVQUFMO0FBQWtCQyxRQUFJLEVBQUUsbURBQXhCO0FBQTZFQyxlQUFXLEVBQUUsSUFBMUY7QUFBaUdDLFVBQU0sRUFBRSxLQUF6RztBQUFnSEMsT0FBRyxFQUFFLE1BQXJIO0FBQTZIQyxZQUFRLEVBQUU7QUFBdkksR0FaVjtBQWFwQix3QkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFVBQUw7QUFBa0JDLFFBQUksRUFBRSwwQ0FBeEI7QUFBNkVDLGVBQVcsRUFBRSxJQUExRjtBQUFpR0MsVUFBTSxFQUFFLEtBQXpHO0FBQWdIQyxPQUFHLEVBQUUsTUFBckg7QUFBNkhDLFlBQVEsRUFBRTtBQUF2SSxHQWJWO0FBY3BCLGtCQUE4QjtBQUFDTCxNQUFFLEVBQUUsVUFBTDtBQUFrQkMsUUFBSSxFQUFFLHdDQUF4QjtBQUE2RUMsZUFBVyxFQUFFLElBQTFGO0FBQWlHQyxVQUFNLEVBQUUsS0FBekc7QUFBZ0hDLE9BQUcsRUFBRSxNQUFySDtBQUE2SEMsWUFBUSxFQUFFO0FBQXZJLEdBZFY7QUFlcEIsdUJBQThCO0FBQUNMLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsOEZBQXhCO0FBQXdIQyxlQUFXLEVBQUUsSUFBckk7QUFBNElDLFVBQU0sRUFBRSxLQUFwSjtBQUEySkMsT0FBRyxFQUFFLE1BQWhLO0FBQXdLQyxZQUFRLEVBQUU7QUFBbEwsR0FmVjs7QUFpQnBCO0FBQ0EseUJBQThCO0FBQUNMLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsd0NBQXhCO0FBQWtFQyxlQUFXLEVBQUUsSUFBL0U7QUFBcUZDLFVBQU0sRUFBRSxLQUE3RjtBQUFvR0MsT0FBRyxFQUFFLE1BQXpHO0FBQWlIQyxZQUFRLEVBQUU7QUFBM0gsR0FsQlY7QUFtQnBCLGtCQUE4QjtBQUFDTCxNQUFFLEVBQUUsV0FBTDtBQUFrQkMsUUFBSSxFQUFFLHdEQUF4QjtBQUFrRkMsZUFBVyxFQUFFLElBQS9GO0FBQXFHQyxVQUFNLEVBQUUsS0FBN0c7QUFBb0hDLE9BQUcsRUFBRSxNQUF6SDtBQUFpSUMsWUFBUSxFQUFFO0FBQTNJLEdBbkJWO0FBb0JwQixpQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFdBQUw7QUFBa0JDLFFBQUksRUFBRSxzREFBeEI7QUFBZ0ZDLGVBQVcsRUFBRSxJQUE3RjtBQUFtR0MsVUFBTSxFQUFFLEtBQTNHO0FBQWtIQyxPQUFHLEVBQUUsTUFBdkg7QUFBK0hDLFlBQVEsRUFBRTtBQUF6SSxHQXBCVjtBQXFCcEIsd0JBQThCO0FBQUNMLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsc0ZBQXhCO0FBQWdIQyxlQUFXLEVBQUUsSUFBN0g7QUFBbUlDLFVBQU0sRUFBRSxLQUEzSTtBQUFrSkMsT0FBRyxFQUFFLE1BQXZKO0FBQStKQyxZQUFRLEVBQUU7QUFBekssR0FyQlY7QUFzQnBCLHVCQUE4QjtBQUFDTCxNQUFFLEVBQUUsV0FBTDtBQUFrQkMsUUFBSSxFQUFFLDhEQUF4QjtBQUF3RkMsZUFBVyxFQUFFLElBQXJHO0FBQTJHQyxVQUFNLEVBQUUsS0FBbkg7QUFBMEhDLE9BQUcsRUFBRSxNQUEvSDtBQUF1SUMsWUFBUSxFQUFFO0FBQWpKLEdBdEJWO0FBdUJwQix3QkFBOEI7QUFBQ0wsTUFBRSxFQUFFLFdBQUw7QUFBa0JDLFFBQUksRUFBRSxzREFBeEI7QUFBZ0ZDLGVBQVcsRUFBRSxJQUE3RjtBQUFtR0MsVUFBTSxFQUFFLEtBQTNHO0FBQWtIQyxPQUFHLEVBQUUsTUFBdkg7QUFBK0hDLFlBQVEsRUFBRTtBQUF6SSxHQXZCVjtBQXdCcEIsNkJBQThCO0FBQUNMLE1BQUUsRUFBRSxhQUFMO0FBQW9CQyxRQUFJLEVBQUUsNEVBQTFCO0FBQXdHQyxlQUFXLEVBQUUsSUFBckg7QUFBMkhDLFVBQU0sRUFBRSxLQUFuSTtBQUEwSUMsT0FBRyxFQUFFLE1BQS9JO0FBQXVKQyxZQUFRLEVBQUUsaUJBQWpLO0FBQW9MQyxnQkFBWSxFQUFFO0FBQWxNLEdBeEJWOztBQTBCcEI7QUFDQSxvQkFBNkI7QUFBQ04sTUFBRSxFQUFFLFVBQUw7QUFBaUJDLFFBQUksRUFBRSx1QkFBdkI7QUFBZ0RDLGVBQVcsRUFBRSxJQUE3RDtBQUFtRUMsVUFBTSxFQUFFLEtBQTNFO0FBQWtGQyxPQUFHLEVBQUUsTUFBdkY7QUFBK0ZDLFlBQVEsRUFBRTtBQUF6RyxHQTNCVDtBQTRCcEIsbUJBQXFCO0FBQUNMLE1BQUUsRUFBRSxXQUFMO0FBQWtCQyxRQUFJLEVBQUUsZ0ZBQXhCO0FBQTBHQyxlQUFXLEVBQUUsSUFBdkg7QUFBNkhDLFVBQU0sRUFBRSxLQUFySTtBQUE0SUMsT0FBRyxFQUFFLE1BQWpKO0FBQXlKQyxZQUFRLEVBQUU7QUFBbkssR0E1QkQ7O0FBOEJwQjtBQUNBLDJCQUE4QjtBQUFDTCxNQUFFLEVBQUUsWUFBTDtBQUFvQkMsUUFBSSxFQUFFLGlFQUExQjtBQUE2RkMsZUFBVyxFQUFFLEtBQTFHO0FBQWlIQyxVQUFNLEVBQUUsS0FBekg7QUFBZ0lDLE9BQUcsRUFBRSxXQUFySTtBQUFrSkMsWUFBUSxFQUFFO0FBQTVKLEdBL0JWO0FBZ0NwQiwrQkFBOEI7QUFBQ0wsTUFBRSxFQUFFLGFBQUw7QUFBb0JDLFFBQUksRUFBRSxpRUFBMUI7QUFBNkZDLGVBQVcsRUFBRSxJQUExRztBQUFnSEMsVUFBTSxFQUFFLEtBQXhIO0FBQStIQyxPQUFHLEVBQUUsV0FBcEk7QUFBaUpDLFlBQVEsRUFBRTtBQUEzSixHQWhDVjtBQWlDcEIsdUJBQThCO0FBQUNMLE1BQUUsRUFBRSxhQUFMO0FBQW9CQyxRQUFJLEVBQUUsd0NBQTFCO0FBQW9FQyxlQUFXLEVBQUUsSUFBakY7QUFBdUZDLFVBQU0sRUFBRSxLQUEvRjtBQUFzR0MsT0FBRyxFQUFFLFdBQTNHO0FBQXdIQyxZQUFRLEVBQUU7QUFBbEksR0FqQ1Y7QUFrQ3BCLHVCQUE4QjtBQUFDTCxNQUFFLEVBQUUsYUFBTDtBQUFvQkMsUUFBSSxFQUFFLGlLQUExQjtBQUE2TEMsZUFBVyxFQUFFLElBQTFNO0FBQWdOQyxVQUFNLEVBQUUsS0FBeE47QUFBK05DLE9BQUcsRUFBRSxXQUFwTztBQUFpUEMsWUFBUSxFQUFFO0FBQTNQLEdBbENWO0FBbUNwQixjQUE4QjtBQUFDTCxNQUFFLEVBQUUsYUFBTDtBQUFvQkMsUUFBSSxFQUFFLG1FQUExQjtBQUErRkMsZUFBVyxFQUFFLElBQTVHO0FBQWtIQyxVQUFNLEVBQUUsS0FBMUg7QUFBaUlDLE9BQUcsRUFBRSxXQUF0STtBQUFtSkMsWUFBUSxFQUFFO0FBQTdKLEdBbkNWO0FBb0NwQiw4QkFBOEI7QUFBQ0wsTUFBRSxFQUFFLGFBQUw7QUFBb0JDLFFBQUksRUFBRSx3RUFBMUI7QUFBb0dDLGVBQVcsRUFBRSxJQUFqSDtBQUF1SEMsVUFBTSxFQUFFLEtBQS9IO0FBQXNJQyxPQUFHLEVBQUUsV0FBM0k7QUFBd0pDLFlBQVEsRUFBRTtBQUFsSyxHQXBDVjtBQXFDcEIsb0JBQThCO0FBQUNMLE1BQUUsRUFBRSxhQUFMO0FBQW9CQyxRQUFJLEVBQUUsb0NBQTFCO0FBQWdFQyxlQUFXLEVBQUUsSUFBN0U7QUFBbUZDLFVBQU0sRUFBRSxLQUEzRjtBQUFrR0MsT0FBRyxFQUFFLFdBQXZHO0FBQW9IQyxZQUFRLEVBQUU7QUFBOUgsR0FyQ1Y7QUFzQ3BCLG9CQUE4QjtBQUFDTCxNQUFFLEVBQUUsYUFBTDtBQUFvQkMsUUFBSSxFQUFFLDBFQUExQjtBQUFzR0MsZUFBVyxFQUFFLElBQW5IO0FBQXlIQyxVQUFNLEVBQUUsS0FBakk7QUFBd0lDLE9BQUcsRUFBRSxXQUE3STtBQUEwSkMsWUFBUSxFQUFFLFdBQXBLO0FBQWlMQyxnQkFBWSxFQUFFO0FBQS9MLEdBdENWO0FBdUNwQiwyQkFBOEI7QUFBQ04sTUFBRSxFQUFFLGNBQUw7QUFBcUJDLFFBQUksRUFBRSw4Q0FBM0I7QUFBMkVDLGVBQVcsRUFBRSxJQUF4RjtBQUE4RkMsVUFBTSxFQUFFSSxPQUFPLENBQUNDLFFBQVIsS0FBcUIsT0FBM0g7QUFBb0lKLE9BQUcsRUFBRSxXQUF6STtBQUFzSkMsWUFBUSxFQUFFLFdBQWhLO0FBQTZLQyxnQkFBWSxFQUFFO0FBQTNMLEdBdkNWOztBQXlDcEI7QUFDQSxtQkFBOEI7QUFBQ04sTUFBRSxFQUFFLGFBQUw7QUFBb0JDLFFBQUksRUFBRSw2RkFBMUI7QUFBeUhDLGVBQVcsRUFBRSxJQUF0STtBQUE0SUMsVUFBTSxFQUFFLEtBQXBKO0FBQTJKQyxPQUFHLEVBQUUsV0FBaEs7QUFBNktDLFlBQVEsRUFBRTtBQUF2TCxHQTFDVjtBQTJDcEIsc0JBQThCO0FBQUNMLE1BQUUsRUFBRSxpQkFBTDtBQUF3QkMsUUFBSSxFQUFFLG1FQUE5QjtBQUFtR0MsZUFBVyxFQUFFLElBQWhIO0FBQXNIQyxVQUFNLEVBQUVJLE9BQU8sQ0FBQ0MsUUFBUixLQUFxQixPQUFuSjtBQUE0SkosT0FBRyxFQUFFLFdBQWpLO0FBQThLQyxZQUFRLEVBQUU7QUFBeEwsR0EzQ1Y7QUE0Q3BCLHNCQUE4QjtBQUFDTCxNQUFFLEVBQUUsa0JBQUw7QUFBeUJDLFFBQUksRUFBRSxnRkFBL0I7QUFBaUhDLGVBQVcsRUFBRSxJQUE5SDtBQUFvSUMsVUFBTSxFQUFFLEtBQTVJO0FBQW1KQyxPQUFHLEVBQUUsV0FBeEo7QUFBcUtDLFlBQVEsRUFBRTtBQUEvSyxHQTVDVjs7QUE4Q3BCO0FBQ0EsWUFBOEI7QUFBQ0wsTUFBRSxFQUFFLHNCQUFMO0FBQTZCQyxRQUFJLEVBQUUsNEJBQW5DO0FBQWlFQyxlQUFXLEVBQUUsSUFBOUU7QUFBb0ZDLFVBQU0sRUFBRSxLQUE1RjtBQUFtR0MsT0FBRyxFQUFFO0FBQXhHO0FBL0NWLENBQWpCO0FBa0RBLE1BQU1LLGFBQWEsR0FBRztBQUN6QixjQUFZLElBRGE7QUFFekIsY0FBWSxLQUZhO0FBR3pCLGNBQVksS0FIYTtBQUl6QixjQUFZLEtBSmE7QUFLekIsY0FBWSxJQUxhO0FBTXpCLGNBQVksS0FOYTtBQU96QixjQUFZLEtBUGE7QUFRekIsY0FBWSxLQVJhO0FBU3pCLGNBQVksSUFUYTtBQVV6QixjQUFZLElBVmE7QUFXekIsY0FBWSxJQVhhO0FBWXpCLGNBQVksS0FaYTtBQWF6QixjQUFZLElBYmE7QUFjekIsY0FBWSxJQWRhO0FBZXpCLGNBQVksS0FmYTtBQWdCekIsY0FBWSxJQWhCYTtBQWlCekIsY0FBWSxLQWpCYTtBQWtCekIsZUFBYSxLQWxCWTtBQW1CekIsZUFBYSxLQW5CWTtBQW9CekIsY0FBWSxJQXBCYTtBQXFCekIsZUFBYSxLQXJCWTtBQXNCekIsZUFBYSxJQXRCWTtBQXVCekIsZUFBYSxJQXZCWTtBQXdCekIsZUFBYSxJQXhCWTtBQXlCekIsZUFBYSxJQXpCWTtBQTBCekIsZUFBYSxJQTFCWTtBQTJCekIsZUFBYSxJQTNCWTtBQTRCekIsZUFBYSxLQTVCWTtBQTZCekIsZUFBYSxLQTdCWTtBQThCekIsZUFBYSxJQTlCWTtBQStCekIsZUFBYSxLQS9CWTtBQWdDekIsZUFBYSxLQWhDWTtBQWlDekIsZUFBYSxJQWpDWTtBQWtDekIsaUJBQWUsS0FsQ1U7QUFtQ3pCLGlCQUFlLElBbkNVO0FBb0N6QiwwQkFBd0IsS0FwQ0M7QUFxQ3pCLGlCQUFlLEtBckNVO0FBc0N6QixpQkFBZSxLQXRDVTtBQXVDekIsaUJBQWUsSUF2Q1U7QUF3Q3pCLGlCQUFlLElBeENVO0FBeUN6QixpQkFBZSxLQXpDVTtBQTBDekIsaUJBQWUsS0ExQ1U7QUEyQ3pCLGlCQUFlLEtBM0NVO0FBNEN6QixrQkFBZ0IsS0E1Q1M7QUE2Q3pCLHFCQUFtQjtBQTdDTSxDQUF0QjtBQWlEQSxNQUFNQyxjQUFjLEdBQUcsRUFBdkI7QUFFQSxNQUFNQyxXQUFXLEdBQUcsRUFBcEI7QUFDQSxNQUFNQyxVQUFVLEdBQUc7QUFDdEIsVUFBUSxXQURjO0FBRXRCLG9CQUFrQixvQkFGSTtBQUd0QixXQUFTLGtCQUhhO0FBSXRCLGFBQVcsa0JBSlc7QUFLdEIsc0JBQW9CQyxJQUFJLENBQUNDLEdBQUwsRUFMRTtBQU10QixrQkFBZ0IsSUFOTTtBQU90QixrQkFBZ0I7QUFQTSxDQUFuQjtBQVVBLE1BQU1DLGlCQUFpQixHQUFHLEVBQTFCO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsRUFBakM7QUFFQSxNQUFNQyxjQUFjLEdBQUcsRUFBdkI7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEIsQyxDQUEwQjs7QUFFMUIsTUFBTUMsUUFBUSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0MsbUJBQWQsQ0FBakI7QUFFQSxNQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsRUFBbEI7QUFFQSxNQUFNQyxZQUFZLEdBQUcsRUFBckI7QUFDQSxNQUFNQyxXQUFXLEdBQUcsRUFBcEIsQzs7Ozs7Ozs7Ozs7O0FDOUlQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBQyxnRUFBZTtBQUNmQyw0REFBVzs7QUFFWCxNQUFNQyxlQUFlLEdBQUcsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQWdCO0FBQ3BDWCxRQUFNLENBQUNZLGNBQVAsQ0FBc0I3QyxNQUF0QixFQUE4QjJDLEdBQTlCLEVBQW1DO0FBQy9CRyxPQUFHLEdBQUc7QUFDRkMsNERBQUssQ0FBQ0MsSUFBTixDQUFXLG1CQUFYLEVBQWlDLElBQUdMLEdBQUksOERBQXhDO0FBQ0EsYUFBT0MsS0FBUDtBQUNIOztBQUo4QixHQUFuQztBQU1ILENBUEQ7O0FBVUE7QUFFQSxNQUFNSyxVQUFVLEdBQUdoQixNQUFNLENBQUNpQixJQUFQLENBQVlDLHNDQUFaLENBQW5COztBQUNBLEtBQUssTUFBTVIsR0FBWCxJQUFrQk0sVUFBbEIsRUFBOEJQLGVBQWUsQ0FBQ0MsR0FBRCxFQUFNUSxzQ0FBTyxDQUFDUixHQUFELENBQWIsQ0FBZjs7QUFHOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQUQsZUFBZSxDQUFDLE1BQUQsRUFBU1UsbURBQVQsQ0FBZjtBQUNBVixlQUFlLENBQUMsY0FBRCxFQUFpQlcsNkRBQWpCLENBQWY7QUFDQVgsZUFBZSxDQUFDLGFBQUQsRUFBZ0JZLDREQUFoQixDQUFmO0FBQ0FaLGVBQWUsQ0FBQyxPQUFELEVBQVVLLHNEQUFWLENBQWY7QUFDQUwsZUFBZSxDQUFDLFVBQUQsRUFBYWEseURBQWIsQ0FBZjtBQUNBYixlQUFlLENBQUMsZUFBRCxFQUFrQmMsOERBQWxCLENBQWY7QUFDQWQsZUFBZSxDQUFDLFdBQUQsRUFBY2UsMkRBQWQsQ0FBZjtBQUNBZixlQUFlLENBQUMsZ0JBQUQsRUFBbUJnQixnRUFBbkIsQ0FBZjtBQUNBaEIsZUFBZSxDQUFDLGlCQUFELEVBQW9CaUIsaUVBQXBCLENBQWY7QUFFQTNELE1BQU0sQ0FBQzRELEtBQVAsR0FBZUEsc0RBQWY7QUFFQTtBQUNBbEIsZUFBZSxDQUFDLFVBQUQsRUFBYW1CLHNEQUFiLENBQWYsQyxDQUVBOztBQUNlLE1BQU1DLFdBQU4sQ0FBa0I7QUFDN0JDLGFBQVcsQ0FBQy9CLFFBQUQsRUFBV2dDLE9BQVgsRUFBb0I7QUFDM0JILDBEQUFJLENBQUNJLFNBQUwsQ0FBZWpDLFFBQWY7QUFDQTZCLDBEQUFJLENBQUNLLFVBQUwsQ0FBZ0JGLE9BQWhCO0FBQ0g7O0FBRURHLE1BQUksR0FBRztBQUNIO0FBQ0FOLDBEQUFJLENBQUNNLElBQUw7QUFDSDs7QUFUNEIsQzs7Ozs7Ozs7Ozs7O0FDaERqQztBQUFlLHFFQUFNO0FBQ2pCLFFBQU1DLFFBQVEsR0FBR0MsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQWpCO0FBQ0FGLFVBQVEsQ0FBQ0csU0FBVCxHQUFxQixhQUFyQjtBQUNBSCxVQUFRLENBQUMzRCxLQUFULEdBQWlCLDBCQUFqQjtBQUNBNEQsVUFBUSxDQUFDRyxJQUFULENBQWNDLFdBQWQsQ0FBMEJMLFFBQTFCO0FBQ0gsQ0FMRCxFOzs7Ozs7Ozs7Ozs7QUNBQTtBQUFlLDJFQUFXO0FBQ3RCLFFBQU1NLG1CQUFtQixHQUFHekMsTUFBTSxDQUFDMEMsd0JBQVAsQ0FBZ0NDLGlCQUFpQixDQUFDQyxTQUFsRCxFQUE2RCxlQUE3RCxFQUE4RS9CLEdBQTFHO0FBQ0FiLFFBQU0sQ0FBQ1ksY0FBUCxDQUFzQitCLGlCQUFpQixDQUFDQyxTQUF4QyxFQUFtRCxlQUFuRCxFQUFvRTtBQUNoRS9CLE9BQUcsRUFBRSxZQUFZO0FBQ2IsWUFBTWdDLGFBQWEsR0FBR0MsT0FBTyxDQUFDQyxLQUFSLENBQWNOLG1CQUFkLEVBQW1DLElBQW5DLEVBQXlDTyxTQUF6QyxDQUF0QjtBQUNBLGFBQU8sSUFBSUMsS0FBSixDQUFVSixhQUFWLEVBQXlCO0FBQzVCSCxnQ0FBd0IsRUFBRSxVQUFTUSxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsY0FBSUEsSUFBSSxLQUFLLGNBQWIsRUFBNkIsT0FBT0MsU0FBUDtBQUM3QixpQkFBT3BELE1BQU0sQ0FBQzBDLHdCQUFQLENBQWdDUSxHQUFoQyxFQUFxQ0MsSUFBckMsQ0FBUDtBQUNILFNBSjJCO0FBSzVCdEMsV0FBRyxFQUFFLFVBQVNxQyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDckIsY0FBSUEsSUFBSSxLQUFLLGNBQWIsRUFBNkIsT0FBTyxJQUFQO0FBQzdCLGdCQUFNRSxHQUFHLEdBQUdILEdBQUcsQ0FBQ0MsSUFBRCxDQUFmO0FBQ0EsY0FBSSxPQUFPRSxHQUFQLEtBQWUsVUFBbkIsRUFBK0IsT0FBT0EsR0FBRyxDQUFDQyxJQUFKLENBQVNKLEdBQVQsQ0FBUDtBQUMvQixpQkFBT0csR0FBUDtBQUNIO0FBVjJCLE9BQXpCLENBQVA7QUFZSDtBQWYrRCxHQUFwRSxFQUZzQixDQW9CdEI7O0FBQ0FyRCxRQUFNLENBQUNZLGNBQVAsQ0FBc0JrQyxPQUF0QixFQUErQixPQUEvQixFQUF3QztBQUFDbkMsU0FBSyxFQUFFbUMsT0FBTyxDQUFDQyxLQUFoQjtBQUF1QlEsWUFBUSxFQUFFLEtBQWpDO0FBQXdDQyxnQkFBWSxFQUFFO0FBQXRELEdBQXhDO0FBQ0F4RCxRQUFNLENBQUNZLGNBQVAsQ0FBc0I2QyxRQUFRLENBQUNiLFNBQS9CLEVBQTBDLE1BQTFDLEVBQWtEO0FBQUNqQyxTQUFLLEVBQUU4QyxRQUFRLENBQUNiLFNBQVQsQ0FBbUJVLElBQTNCO0FBQWlDQyxZQUFRLEVBQUUsS0FBM0M7QUFBa0RDLGdCQUFZLEVBQUU7QUFBaEUsR0FBbEQ7QUFFQSxRQUFNRSxLQUFLLEdBQUdDLGNBQWMsQ0FBQ2YsU0FBZixDQUF5QmdCLElBQXZDOztBQUNBRCxnQkFBYyxDQUFDZixTQUFmLENBQXlCZ0IsSUFBekIsR0FBZ0MsWUFBVztBQUN2QyxVQUFNQyxHQUFHLEdBQUdiLFNBQVMsQ0FBQyxDQUFELENBQXJCO0FBQ0EsUUFBSWEsR0FBRyxDQUFDQyxXQUFKLEdBQWtCQyxRQUFsQixDQUEyQixjQUEzQixDQUFKLEVBQWdELE9BQU8sSUFBUDtBQUNoRCxXQUFPakIsT0FBTyxDQUFDQyxLQUFSLENBQWNXLEtBQWQsRUFBcUIsSUFBckIsRUFBMkJWLFNBQTNCLENBQVA7QUFDSCxHQUpEO0FBS0gsQzs7Ozs7Ozs7Ozs7O0FDOUJEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTWdCLE1BQU4sQ0FBYTtBQUM1QkMsY0FBWSxHQUFHO0FBQ1gsUUFBSSxLQUFLQyxZQUFULEVBQXVCO0FBRXZCLFVBQU1DLFVBQVUsR0FBRyxJQUFJQyxNQUFKLENBQVkscUNBQVosQ0FBbkI7O0FBQ0EsVUFBTUMsT0FBTyxHQUFJQyxJQUFELElBQVU7QUFDdEIsVUFBSSxDQUFDaEYsd0RBQWMsQ0FBQyxVQUFELENBQW5CLEVBQWlDO0FBQ2pDLFlBQU1pRixPQUFPLEdBQUdELElBQUksQ0FBQ0UsV0FBTCxDQUFpQkMsS0FBakIsQ0FBdUJOLFVBQXZCLENBQWhCO0FBQ0EsVUFBSSxDQUFDSSxPQUFELElBQVlBLE9BQU8sQ0FBQ0csTUFBUixLQUFtQixDQUFuQyxFQUFzQztBQUN0QyxVQUFJSCxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBbkIsRUFBeUIsT0FBT0QsSUFBSSxDQUFDRSxXQUFMLEdBQW1CRixJQUFJLENBQUNFLFdBQUwsQ0FBaUJHLE9BQWpCLENBQXlCSixPQUFPLENBQUMsQ0FBRCxDQUFoQyxFQUFzQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2QkEsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXSyxRQUFYLENBQW9CLENBQXBCLEVBQXVCLEdBQXZCLENBQTRCLElBQUdMLE9BQU8sQ0FBQyxDQUFELENBQUksRUFBL0csQ0FBMUI7QUFDekIsYUFBT0QsSUFBSSxDQUFDRSxXQUFMLEdBQW1CRixJQUFJLENBQUNFLFdBQUwsQ0FBaUJHLE9BQWpCLENBQXlCSixPQUFPLENBQUMsQ0FBRCxDQUFoQyxFQUFzQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2Qk0sUUFBUSxDQUFDTixPQUFPLENBQUMsQ0FBRCxDQUFSLENBQVIsR0FBdUIsRUFBRyxJQUFHQSxPQUFPLENBQUMsQ0FBRCxDQUFJLEVBQTdHLENBQTFCO0FBQ0gsS0FORDs7QUFRQSxVQUFNTyxVQUFVLEdBQUdoRSw4Q0FBSyxDQUFDaUUsV0FBTixDQUFrQjVELDJDQUFJLENBQUM2RCxhQUF2QixFQUFzQyxnQkFBdEMsRUFBd0Q7QUFBQ0MsV0FBSyxFQUFFWjtBQUFSLEtBQXhELENBQW5CLENBWlcsQ0FZbUY7O0FBQzlGLFVBQU1hLGFBQWEsR0FBR3BFLDhDQUFLLENBQUNpRSxXQUFOLENBQWtCNUQsMkNBQUksQ0FBQzZELGFBQXZCLEVBQXNDLFlBQXRDLEVBQW9EO0FBQUNDLFdBQUssRUFBRVo7QUFBUixLQUFwRCxDQUF0QixDQWJXLENBYWtGOztBQUM3RixTQUFLSCxZQUFMLEdBQW9CLE1BQU07QUFBQ1ksZ0JBQVU7QUFBSUksbUJBQWE7QUFBSSxLQUExRCxDQWRXLENBY2lEOztBQUMvRDs7QUFFREMsY0FBWSxHQUFHO0FBQ1gsUUFBSSxLQUFLakIsWUFBVCxFQUF1QixLQUFLQSxZQUFMO0FBQzFCOztBQXBCMkIsQ0FBakIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNKQTtBQUFBO0FBQUE7QUFFQSxNQUFNa0IsVUFBVSxHQUFHckgsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NGLFVBQW5EO0FBQ0EsTUFBTUcsYUFBYSxHQUFHQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVUMsVUFBdkIsSUFBcUNGLENBQUMsQ0FBQ0MsT0FBRixDQUFVRSxVQUFsRSxFQUE4RSxDQUE5RSxFQUFpRkYsT0FBdkc7QUFDQSxJQUFJRyxrQkFBa0IsR0FBR0wsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVJLGVBQTFDLEVBQTJELENBQTNELENBQXpCO0FBQ0EsSUFBSUMsUUFBUSxHQUFHUCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVU0sbUJBQTFDLEVBQStELENBQS9ELENBQWY7QUFFQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFFQSxJQUFJQyxVQUFVLEdBQUdWLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVUyxjQUExQyxFQUEwRCxDQUExRCxDQUFqQjs7QUFDQSxTQUFTQSxjQUFULEdBQXlCO0FBQ3JCLE1BQUdELFVBQUgsRUFBYyxPQUFPQSxVQUFVLENBQUNSLE9BQVgsQ0FBbUJTLGNBQW5CLEVBQVA7QUFDZCxTQUFPLElBQVA7QUFDSDs7QUFFYyxtRUFBSSxNQUFNQyxTQUFOLENBQWdCO0FBQy9CdEUsYUFBVyxHQUFFO0FBQ1QsU0FBS3VFLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVkvQyxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDQSxTQUFLZ0QsT0FBTCxHQUFlLEtBQWY7QUFDSDs7QUFFREMsUUFBTSxHQUFFO0FBQ0osUUFBRyxLQUFLRCxPQUFSLEVBQWdCO0FBQ2hCLFNBQUtBLE9BQUwsR0FBZSxJQUFmO0FBRUFsQixjQUFVLENBQUNvQixTQUFYLENBQXFCLGdCQUFyQixFQUF1QyxLQUFLSCxNQUE1QztBQUNIOztBQUVESSxTQUFPLEdBQUU7QUFDTCxRQUFHLENBQUMsS0FBS0gsT0FBVCxFQUFpQjtBQUNqQixTQUFLQSxPQUFMLEdBQWUsS0FBZjtBQUVBbEIsY0FBVSxDQUFDc0IsV0FBWCxDQUF1QixnQkFBdkIsRUFBeUMsS0FBS0wsTUFBOUM7QUFDSDs7QUFFREEsUUFBTSxDQUFDTSxFQUFELEVBQUk7QUFDTixRQUFHLENBQUNBLEVBQUUsQ0FBQ0MsT0FBSCxDQUFXQyxNQUFYLENBQWtCQyxHQUF0QixFQUEwQjtBQUMxQixRQUFHSCxFQUFFLENBQUNDLE9BQUgsQ0FBV0MsTUFBWCxDQUFrQmpJLEVBQWxCLEtBQXlCdUgsY0FBYyxHQUFHdkgsRUFBN0MsRUFDQSxJQUFHK0gsRUFBRSxDQUFDQyxPQUFILENBQVdHLFFBQWQsRUFBdUI7QUFFdkIsVUFBTUMsT0FBTyxHQUFHekIsYUFBYSxDQUFDSSxVQUFkLENBQXlCZ0IsRUFBRSxDQUFDQyxPQUFILENBQVdLLFVBQXBDLENBQWhCO0FBQ0EsUUFBRyxDQUFDRCxPQUFKLEVBQVksT0FOTixDQU1hOztBQUVuQixRQUFHQSxPQUFPLENBQUN2SSxJQUFSLEtBQWlCLENBQXBCLEVBQXNCO0FBRXRCLFFBQUd3SCxPQUFPLENBQUNVLEVBQUUsQ0FBQ0MsT0FBSCxDQUFXQyxNQUFYLENBQWtCakksRUFBbkIsQ0FBVixFQUFpQyxPQVYzQixDQVVrQzs7QUFFeEMsUUFBR3NJLFdBQVcsQ0FBQ1AsRUFBRSxDQUFDQyxPQUFKLENBQWQsRUFBMkI7QUFDdkJYLGFBQU8sQ0FBQ1UsRUFBRSxDQUFDQyxPQUFILENBQVdDLE1BQVgsQ0FBa0JqSSxFQUFuQixDQUFQLEdBQWdDLElBQWhDO0FBQ0FrQyxvREFBSyxDQUFDcUcsU0FBTixDQUFpQixzQkFBcUJSLEVBQUUsQ0FBQ0MsT0FBSCxDQUFXQyxNQUFYLENBQWtCTyxRQUFTLElBQUdULEVBQUUsQ0FBQ0MsT0FBSCxDQUFXQyxNQUFYLENBQWtCUSxhQUFjLEVBQXBHLEVBQXVHO0FBQ25HLGdCQUFRO0FBRDJGLE9BQXZHO0FBR0EsVUFBRyxDQUFDeEIsa0JBQUosRUFBdUJBLGtCQUFrQixHQUFHTCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVUksZUFBMUMsRUFBMkQsQ0FBM0QsQ0FBckI7QUFDdkJELHdCQUFrQixDQUFDSCxPQUFuQixDQUEyQkksZUFBM0IsQ0FBMkNhLEVBQUUsQ0FBQ0MsT0FBSCxDQUFXQyxNQUFYLENBQWtCakksRUFBN0QsRUFBaUU7QUFDN0QwSSxnQkFBUSxFQUFFO0FBRG1ELE9BQWpFLEVBRUcsQ0FGSDtBQUdBLFVBQUcsQ0FBQ3ZCLFFBQUosRUFBYUEsUUFBUSxHQUFHUCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVU0sbUJBQTFDLEVBQStELENBQS9ELENBQVg7QUFDYkQsY0FBUSxDQUFDTCxPQUFULENBQWlCTSxtQkFBakIsQ0FBcUNnQixPQUFPLENBQUNwSSxFQUE3QyxFQUFpRCxLQUFqRDtBQUNIO0FBQ0o7O0FBNUM4QixDQUFwQixFQUFmOztBQStDQSxTQUFTc0ksV0FBVCxDQUFxQk4sT0FBckIsRUFBNkI7QUFDekIsTUFBRyxrRUFBa0VXLElBQWxFLENBQXVFWCxPQUFPLENBQUNZLE9BQS9FLENBQUgsRUFBMkYsT0FBTyxJQUFQO0FBQzNGLE1BQUdDLGNBQWMsQ0FBQ2IsT0FBRCxFQUFVLGFBQVYsQ0FBZCxJQUEwQ2EsY0FBYyxDQUFDYixPQUFELEVBQVUscUJBQVYsQ0FBeEQsSUFBNEZhLGNBQWMsQ0FBQ2IsT0FBRCxFQUFVLHdCQUFWLENBQTdHLEVBQWlKLE9BQU8sSUFBUDtBQUVqSixTQUFPLEtBQVA7QUFDSDs7QUFDRCxTQUFTYSxjQUFULENBQXdCYixPQUF4QixFQUFpQ2MsTUFBakMsRUFBd0M7QUFDcEMsTUFBSUMsTUFBTSxHQUFHZixPQUFPLENBQUNlLE1BQVIsSUFBa0IsRUFBL0I7QUFDQSxNQUFHQSxNQUFNLENBQUNqRCxNQUFQLEtBQWtCLENBQXJCLEVBQXVCLE9BQU8sS0FBUDtBQUN2QixTQUFPaUQsTUFBTSxDQUFDQyxHQUFQLENBQVdDLEtBQUssSUFBSTtBQUN2QixRQUFHQSxLQUFLLENBQUNwSixJQUFOLEtBQWUsTUFBbEIsRUFBeUIsT0FBTyxLQUFQO0FBQ3pCLFFBQUcsQ0FBQ29KLEtBQUssQ0FBQ3JKLEtBQU4sSUFBZSxFQUFoQixFQUFvQnVGLFFBQXBCLENBQTZCMkQsTUFBN0IsQ0FBSCxFQUF3QyxPQUFPLElBQVA7QUFDeEMsUUFBRyxDQUFDRyxLQUFLLENBQUN2SixXQUFOLElBQXFCLEVBQXRCLEVBQTBCeUYsUUFBMUIsQ0FBbUMyRCxNQUFuQyxDQUFILEVBQThDLE9BQU8sSUFBUDtBQUM5QyxRQUFHLENBQUMsQ0FBQ0csS0FBSyxDQUFDQyxNQUFOLElBQWdCLEVBQWpCLEtBQXdCRCxLQUFLLENBQUNDLE1BQU4sQ0FBYUMsSUFBckMsSUFBNkMsRUFBOUMsRUFBa0RoRSxRQUFsRCxDQUEyRDJELE1BQTNELENBQUgsRUFBc0UsT0FBTyxJQUFQO0FBQ3RFLFFBQUcsQ0FBQ0csS0FBSyxDQUFDRyxNQUFOLElBQWdCLEVBQWpCLEVBQXFCSixHQUFyQixDQUF5Qm5DLENBQUMsSUFBSTtBQUM3QixhQUFPQSxDQUFDLENBQUM5RSxLQUFGLENBQVFvRCxRQUFSLENBQWlCMkQsTUFBakIsS0FBNEJqQyxDQUFDLENBQUN3QyxJQUFGLENBQU9sRSxRQUFQLENBQWdCMkQsTUFBaEIsQ0FBbkM7QUFDSCxLQUZFLEVBRUEzRCxRQUZBLENBRVMsSUFGVCxDQUFILEVBRWtCLE9BQU8sSUFBUDtBQUNsQixXQUFPLEtBQVA7QUFFSCxHQVZNLEVBVUpBLFFBVkksQ0FVSyxJQVZMLENBQVA7QUFXSCxDOzs7Ozs7Ozs7Ozs7QUNsRkQ7QUFBQTtBQUFBO0FBRUEsTUFBTXFCLFVBQVUsR0FBR0ksU0FBUyxDQUFDM0UsR0FBVixDQUFjcUgsQ0FBQyxJQUFFQSxDQUFDLENBQUNDLFVBQUYsSUFBY0QsQ0FBQyxDQUFDeEMsT0FBaEIsSUFBeUJ3QyxDQUFDLENBQUN4QyxPQUFGLENBQVUwQyxRQUFwRCxFQUE4RCxDQUE5RCxFQUFpRTFDLE9BQXBGO0FBQ0EsTUFBTTJDLFdBQVcsR0FBRzdDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBY3FILENBQUMsSUFBRUEsQ0FBQyxDQUFDRyxXQUFuQixFQUFnQyxDQUFoQyxFQUFtQ0EsV0FBdkQ7QUFFQSxNQUFNQyxRQUFRLEdBQUcsd0JBQWpCO0FBQ0EsTUFBTUMsR0FBRyxHQUFHcEosT0FBTyxDQUFDb0osR0FBcEI7QUFFZSxtRUFBSSxNQUFNQyxrQkFBTixDQUF5QjtBQUN4QzFHLGFBQVcsR0FBRTtBQUNULFNBQUt3RSxPQUFMLEdBQWUsS0FBZjtBQUVBLFNBQUttQyxJQUFMLEdBQVlsSixxREFBWjtBQUNIOztBQUVELE1BQUltSixZQUFKLEdBQWtCO0FBQ2QsUUFBRyxDQUFDLEtBQUtELElBQVQsRUFBYyxPQUFPLElBQVA7QUFDZCxRQUFHLEtBQUtuQyxPQUFMLEtBQWlCLEtBQXBCLEVBQTBCLE9BQU8sSUFBUDtBQUMxQixRQUFJbUMsSUFBSSxHQUFHO0FBQ1BSLFVBQUksRUFBRSxLQUFLUSxJQUFMLENBQVVSLElBQVYsSUFBa0J6SSxvREFBVSxDQUFDeUksSUFENUI7QUFFUFUsb0JBQWMsRUFBRSxLQUFLRixJQUFMLENBQVVFLGNBQVYsSUFBNEJuSixvREFBVSxDQUFDbUosY0FGaEQ7QUFHUEMsYUFBTyxFQUFFLEtBQUtILElBQUwsQ0FBVUcsT0FBVixJQUFxQnhGLFNBSHZCO0FBSVB5RixXQUFLLEVBQUUsS0FBS0osSUFBTCxDQUFVSSxLQUFWLElBQW1CekYsU0FKbkI7QUFLUDBGLGdCQUFVLEVBQUUsS0FBS0wsSUFBTCxDQUFVLGtCQUFWLElBQWdDO0FBQ3hDTSxhQUFLLEVBQUUsS0FBS04sSUFBTCxDQUFVLGtCQUFWO0FBRGlDLE9BQWhDLEdBRVJyRixTQVBHO0FBUVA0RixZQUFNLEVBQUUsS0FBS1AsSUFBTCxDQUFVLGNBQVYsSUFBNEI7QUFDaENRLG1CQUFXLEVBQUUsS0FBS1IsSUFBTCxDQUFVLGNBQVYsQ0FEbUI7QUFFaENTLG1CQUFXLEVBQUUsS0FBS1QsSUFBTCxDQUFVLGNBQVYsS0FBNkJyRjtBQUZWLE9BQTVCLEdBR0pBO0FBWEcsS0FBWDtBQWFBLFdBQU9xRixJQUFQO0FBQ0g7O0FBRURVLFVBQVEsR0FBRTtBQUNOL0QsY0FBVSxDQUFDZ0QsUUFBWCxDQUFvQjtBQUNoQjNKLFVBQUksRUFBRTRKLFdBQVcsQ0FBQ2UscUJBREY7QUFFaEJkLGNBRmdCO0FBR2hCQyxTQUhnQjtBQUloQmMsY0FBUSxFQUFFLEtBQUtYO0FBSkMsS0FBcEI7QUFNSDs7QUFFRG5DLFFBQU0sR0FBRztBQUNMLFFBQUcsS0FBS0QsT0FBUixFQUFnQjtBQUNoQixTQUFLQSxPQUFMLEdBQWUsSUFBZjtBQUNBZ0QsV0FBTyxDQUFDQyxHQUFSLENBQVksOEJBQVo7QUFFQSxTQUFLQyxHQUFMLENBQVNqSyxxREFBVyxJQUFJUyxNQUFNLENBQUNDLE1BQVAsQ0FBY1Qsb0RBQWQsQ0FBeEI7QUFFQSxTQUFLMkosUUFBTDtBQUNIOztBQUVEMUMsU0FBTyxHQUFHO0FBQ04sUUFBRyxDQUFDLEtBQUtILE9BQVQsRUFBaUI7QUFDakIsU0FBS0EsT0FBTCxHQUFlLEtBQWY7QUFDQWdELFdBQU8sQ0FBQ0MsR0FBUixDQUFZLCtCQUFaO0FBRUEsU0FBS0osUUFBTDtBQUNIOztBQUVELFFBQU1NLFdBQU4sQ0FBa0JDLGFBQWxCLEVBQWdDO0FBQzVCLFFBQUlWLE1BQU0sR0FBRyxNQUFNeEQsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNrRSxTQUFyQixFQUFnQyxDQUFoQyxFQUFtQ0EsU0FBbkMsQ0FBNkNELGFBQTdDLENBQW5COztBQUNBLFFBQUdWLE1BQU0sQ0FBQzVGLFNBQVAsSUFBb0IsT0FBTzRGLE1BQU0sQ0FBQzVGLFNBQWQsS0FBNEIsUUFBbkQsRUFBNEQ7QUFDeEQsWUFBTSxJQUFJd0csS0FBSixDQUFVLHFCQUFWLENBQU47QUFDSDs7QUFDRCxXQUFPWixNQUFQO0FBQ0g7O0FBRURRLEtBQUcsQ0FBQ0gsUUFBRCxFQUFVO0FBQ1QsU0FBS1osSUFBTCxHQUFZWSxRQUFaO0FBRUEsU0FBS0YsUUFBTDtBQUNIOztBQWpFdUMsQ0FBN0IsRUFBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1VLE1BQU4sQ0FBYTtBQUM1Qi9ILGFBQVcsR0FBRTtBQUNULFNBQUtnSSxNQUFMLEdBQWMsRUFBZDtBQUNBL0wsVUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBFLGFBQWpCLENBQStCRixNQUEvQixHQUF3QyxJQUF4QztBQUNIOztBQUVELE1BQUlHLFVBQUosR0FBZ0I7QUFDWixXQUFPLENBQUMsQ0FBQzVILFFBQVEsQ0FBQzZILGFBQVQsQ0FBdUIscUJBQXZCLENBQVQ7QUFDSDs7QUFFREMsUUFBTSxHQUFFO0FBQ0osUUFBRyxLQUFLRixVQUFSLEVBQW1CO0FBQ25CLFFBQUksQ0FDQUcsZUFEQSxJQUVBLENBQ0FySiw4Q0FBSyxDQUFDc0osUUFBTixDQUFlQywyQ0FBRSxDQUFDQyxjQUFILENBQWtCQyxJQUFsQixDQUF1QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcUUsTUFBRixJQUFZckUsQ0FBQyxDQUFDK0UsS0FBMUMsRUFBaURWLE1BQWhFLENBREEsQ0FGSjtBQUtBLFVBQU1BLE1BQU0sR0FBRzFILFFBQVEsQ0FBQzZILGFBQVQsQ0FBdUIsTUFBSUUsZUFBM0IsQ0FBZjtBQUNBLFFBQUksQ0FBQ0wsTUFBTCxFQUFhLE9BQU8sS0FBUDtBQUNiLFVBQU1XLGFBQWEsR0FBR3BGLFNBQVMsQ0FBQ3FGLEdBQVYsQ0FBYzVKLEtBQWQsQ0FBb0I2SixTQUFwQixDQUE4QmIsTUFBOUIsRUFBc0MsQ0FBdEMsQ0FBdEI7QUFDQSxRQUFHLENBQUNXLGFBQUosRUFBa0IsT0FBT1gsTUFBUDtBQUNsQixTQUFLVyxhQUFMLEdBQXFCQSxhQUFyQjtBQUNBLFFBQUlHLE1BQU0sR0FBR0gsYUFBYSxDQUFDRyxNQUEzQjs7QUFDQUgsaUJBQWEsQ0FBQ0csTUFBZCxHQUF1QixNQUFNO0FBQ3pCLFVBQUlwRyxXQUFXLEdBQUdvRyxNQUFNLENBQUNDLElBQVAsQ0FBWUosYUFBWixDQUFsQjtBQUNBLFVBQUlLLFNBQVMsR0FBR3RHLFdBQVcsQ0FBQ3VHLEtBQVosQ0FBa0JDLFFBQWxCLENBQTJCLENBQTNCLEVBQThCRCxLQUE5QixDQUFvQ3pJLFNBQXBDLENBQThDMkksS0FBOUMsQ0FBb0QsR0FBcEQsQ0FBaEI7QUFDQUgsZUFBUyxDQUFDSSxJQUFWLENBQWUsUUFBZjtBQUNBSixlQUFTLENBQUNJLElBQVYsQ0FBZSxVQUFmO0FBQ0ExRyxpQkFBVyxDQUFDdUcsS0FBWixDQUFrQkMsUUFBbEIsQ0FBMkIsQ0FBM0IsRUFBOEJELEtBQTlCLENBQW9DekksU0FBcEMsR0FBZ0R3SSxTQUFTLENBQUNLLElBQVYsQ0FBZSxHQUFmLENBQWhEO0FBRUEsV0FBS3JCLE1BQUwsQ0FBWXNCLE9BQVosQ0FBb0JaLEtBQUssSUFBSTtBQUN6QmhHLG1CQUFXLENBQUN1RyxLQUFaLENBQWtCQyxRQUFsQixDQUEyQixDQUEzQixFQUE4QkQsS0FBOUIsQ0FBb0NDLFFBQXBDLENBQTZDRSxJQUE3QyxDQUFrRFYsS0FBSyxDQUFDLENBQUQsQ0FBdkQ7QUFDSCxPQUZEO0FBSUEsYUFBT2hHLFdBQVA7QUFDSCxLQVpEOztBQWFBaUcsaUJBQWEsQ0FBQ1ksV0FBZDtBQUNIOztBQUVEQyxhQUFXLENBQUNOLFFBQUQsRUFBV0QsS0FBSyxHQUFHLEVBQW5CLEVBQXNCO0FBQzdCLFFBQUluTSxFQUFFLEdBQUcyTSx1REFBTSxFQUFmO0FBQ0EsUUFBSWYsS0FBSyxHQUFHLElBQVo7QUFDQSxTQUFLVixNQUFMLENBQVlvQixJQUFaLENBQWlCLENBQUN0TSxFQUFELGVBQUssb0JBQUMsS0FBRCxlQUFXbU0sS0FBWDtBQUFrQixjQUFRLEVBQUVTLEdBQUcsSUFBSTtBQUNyRGhCLGFBQUssR0FBR2dCLEdBQVI7QUFDSCxPQUZxQjtBQUVuQixTQUFHLEVBQUU1TSxFQUZjO0FBRVYsUUFBRSxFQUFFQSxFQUZNO0FBRUYsWUFBTSxFQUFFLE1BQU07QUFDOUIsWUFBSTZNLEtBQUssR0FBRyxLQUFLM0IsTUFBTCxDQUFZNEIsU0FBWixDQUFzQmpHLENBQUMsSUFBSUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxLQUFTN0csRUFBcEMsQ0FBWjtBQUNBLFlBQUc2TSxLQUFLLEtBQUssQ0FBQyxDQUFkLEVBQWdCO0FBQ2hCLGFBQUszQixNQUFMLENBQVk2QixNQUFaLENBQW1CRixLQUFuQixFQUEwQixDQUExQjtBQUNBakIsYUFBSyxHQUFHLElBQVI7QUFDQSxZQUFHLEtBQUtDLGFBQVIsRUFBc0IsS0FBS0EsYUFBTCxDQUFtQlksV0FBbkI7QUFDdEIsYUFBS25CLE1BQUw7QUFDSDtBQVRxQixRQVNsQmMsUUFUa0IsQ0FBTCxDQUFqQjtBQVVBLFFBQUcsS0FBS1AsYUFBUixFQUFzQixLQUFLQSxhQUFMLENBQW1CWSxXQUFuQjtBQUN0QixTQUFLbkIsTUFBTDtBQUNBLFdBQU87QUFDSDBCLFlBQU0sRUFBRSxNQUFNO0FBQ1YsWUFBRyxDQUFDcEIsS0FBSixFQUFVO0FBQ04sY0FBSWlCLEtBQUssR0FBRyxLQUFLM0IsTUFBTCxDQUFZNEIsU0FBWixDQUFzQmpHLENBQUMsSUFBSUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxLQUFTN0csRUFBcEMsQ0FBWjtBQUNBLGNBQUc2TSxLQUFLLEtBQUssQ0FBQyxDQUFkLEVBQWdCO0FBQ2hCLGVBQUszQixNQUFMLENBQVk2QixNQUFaLENBQW1CRixLQUFuQixFQUEwQixDQUExQjtBQUNBakIsZUFBSyxHQUFHLElBQVI7QUFDQSxjQUFHLEtBQUtDLGFBQVIsRUFBc0IsS0FBS0EsYUFBTCxDQUFtQlksV0FBbkI7QUFDdEIsZUFBS25CLE1BQUw7QUFDSCxTQVBELE1BT0s7QUFDRE0sZUFBSyxDQUFDb0IsTUFBTjtBQUNIO0FBQ0o7QUFaRSxLQUFQO0FBY0g7O0FBcEUyQixDQUFqQixFQUFmO0FBd0VBLElBQUlDLFlBQUo7QUFDTyxNQUFNQyxLQUFOLFNBQW9CQyxLQUFLLENBQUNDLFNBQTFCLENBQW9DO0FBQ3ZDbEssYUFBVyxHQUFFO0FBQ1QsVUFBTSxHQUFHa0IsU0FBVDtBQUNBLFNBQUs2RixLQUFMLEdBQWE7QUFDVG9ELGVBQVMsRUFBRSxJQUFJLEtBQUtDLE9BQUwsQ0FBYSxDQUFiLEVBQWdCeEcsT0FBaEIsQ0FBd0J5RyxLQUE1QixDQUFrQyxDQUFsQztBQURGLEtBQWI7QUFHQSxTQUFLcEIsS0FBTCxDQUFXcUIsUUFBWCxDQUFvQixJQUFwQjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWEvSSxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDSDs7QUFFRCtJLFNBQU8sQ0FBQzVHLENBQUQsRUFBRztBQUNOLFFBQUlBLENBQUMsQ0FBQzZHLEtBQUYsS0FBWSxFQUFoQixFQUFvQjtBQUNoQixXQUFLVixNQUFMO0FBQ0g7QUFDSjs7QUFFRCxNQUFJTSxPQUFKLEdBQWE7QUFDVCxXQUFPTCxZQUFZLEtBQUtBLFlBQVksR0FBRyxDQUNuQ3hCLDJDQUFFLENBQUNDLGNBQUgsQ0FBa0JDLElBQWxCLENBQXVCOUUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVV5RyxLQUF2QixJQUFnQzFHLENBQUMsQ0FBQ0MsT0FBRixDQUFVNkcsR0FBdEUsQ0FEbUMsQ0FBcEIsQ0FBbkI7QUFHSDs7QUFFREMsc0JBQW9CLEdBQUU7QUFDbEJ6TyxVQUFNLENBQUMwTyxtQkFBUCxDQUEyQixTQUEzQixFQUFzQyxLQUFLSixPQUEzQztBQUNIOztBQUVESyxtQkFBaUIsQ0FBQy9GLEVBQUQsRUFBSTtBQUNqQjVJLFVBQU0sQ0FBQzRPLGdCQUFQLENBQXdCLFNBQXhCLEVBQW1DLEtBQUtOLE9BQXhDO0FBQ0g7O0FBRURULFFBQU0sR0FBRTtBQUNKLFNBQUtiLEtBQUwsQ0FBV2EsTUFBWDtBQUNIOztBQUVEZ0Isb0JBQWtCLENBQUNqRyxFQUFELEVBQUk7QUFDbEIsU0FBS3VGLE9BQUwsQ0FBYSxDQUFiLEVBQWdCeEcsT0FBaEIsQ0FBd0JtSCxNQUF4QixDQUErQixLQUFLaEUsS0FBTCxDQUFXb0QsU0FBMUMsRUFBcUQ7QUFDakRhLGFBQU8sRUFBRSxDQUR3QztBQUVqREMsY0FBUSxFQUFFO0FBRnVDLEtBQXJELEVBR0doRSxLQUhILENBR1NwQyxFQUhUO0FBSUg7O0FBRURxRyxvQkFBa0IsQ0FBQ3JHLEVBQUQsRUFBSTtBQUNsQixTQUFLdUYsT0FBTCxDQUFhLENBQWIsRUFBZ0J4RyxPQUFoQixDQUF3Qm1ILE1BQXhCLENBQStCLEtBQUtoRSxLQUFMLENBQVdvRCxTQUExQyxFQUFxRDtBQUNqRGEsYUFBTyxFQUFFLENBRHdDO0FBRWpEQyxjQUFRLEVBQUU7QUFGdUMsS0FBckQsRUFHR2hFLEtBSEgsQ0FHU3BDLEVBSFQ7QUFJSDs7QUFFRGlFLFFBQU0sR0FBRTtBQUNKLFFBQUlxQyxhQUFhLEdBQUcsS0FBS3BFLEtBQUwsQ0FBV29ELFNBQVgsQ0FBcUJpQixXQUFyQixDQUFpQztBQUNqREMsZ0JBQVUsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRHFDO0FBRWpEQyxpQkFBVyxFQUFFLENBQUMsSUFBRCxFQUFPLENBQVA7QUFGb0MsS0FBakMsQ0FBcEI7QUFJQSxRQUFJQyxLQUFLLEdBQUc7QUFDUkMsYUFBTyxFQUFFLEtBQUt6RSxLQUFMLENBQVdvRCxTQURaO0FBRVJzQixlQUFTLEVBQUUsQ0FBQztBQUNSQyxhQUFLLEVBQUVQO0FBREMsT0FBRDtBQUZILEtBQVo7QUFNQSxRQUFJUSxHQUFHLEdBQUcsS0FBS3ZCLE9BQUwsQ0FBYSxDQUFiLEVBQWdCeEcsT0FBaEIsQ0FBd0I2RyxHQUFsQztBQUNBLHdCQUFPLG9CQUFDLEdBQUQ7QUFBSyxlQUFTLEVBQUUsQ0FBQ21CLGtCQUFrQixDQUFDQyxHQUFuQixDQUF1QjtBQUMzQ0MsdUJBQWUsRUFBQywyQkFEMkI7QUFFM0NDLGdCQUFRLEVBQUUsVUFGaUM7QUFHM0NDLFdBQUcsRUFBRSxDQUhzQztBQUkzQ0MsYUFBSyxFQUFFLENBSm9DO0FBSzNDQyxjQUFNLEVBQUUsQ0FMbUM7QUFNM0NDLFlBQUksRUFBRSxDQU5xQztBQU8zQ0MsZUFBTyxFQUFFLE1BUGtDO0FBUTNDQyxnQkFBUSxFQUFFLFFBUmlDO0FBUzNDQyx1QkFBZSxFQUFFLFVBVDBCO0FBVTNDQywwQkFBa0IsRUFBRSxRQVZ1QjtBQVczQ0MsdUJBQWUsRUFBRSxRQVgwQjtBQVkzQ0MscUJBQWEsRUFBRSxRQVo0QjtBQWEzQ0MsY0FBTSxFQUFFO0FBYm1DLE9BQXZCLENBQUQsRUFjcEJyUCxPQUFPLENBQUNDLFFBQVIsS0FBbUIsT0FBbkIsR0FBMkJzTyxrQkFBa0IsQ0FBQ0MsR0FBbkIsQ0FBdUI7QUFDakRHLFdBQUcsRUFBRSxPQUQ0QztBQUVqRFcsa0JBQVUsRUFBRTtBQUZxQyxPQUF2QixDQUEzQixHQUdBLElBakJvQixFQWlCZixJQUFJLEtBQUsxRCxLQUFMLENBQVd6SSxTQUFYLEdBQXFCLEtBQUt5SSxLQUFMLENBQVd6SSxTQUFYLENBQXFCMkksS0FBckIsQ0FBMkIsR0FBM0IsQ0FBckIsR0FBcUQsRUFBekQsQ0FqQmUsRUFpQitDeUQsTUFqQi9DLENBaUJzRGpKLENBQUMsSUFBRUEsQ0FqQnpELEVBaUI0RDBGLElBakI1RCxDQWlCaUUsR0FqQmpFLEtBaUJ5RSxJQWpCekY7QUFpQitGLFdBQUssRUFBRWtDO0FBakJ0RyxPQWtCRixLQUFLdEMsS0FBTCxDQUFXQyxRQUFYLENBQW9CLE1BQU07QUFDdkIsV0FBS1ksTUFBTDtBQUNILEtBRkEsQ0FsQkUsQ0FBUDtBQXNCSDs7QUFsRnNDO0FBb0YzQ0UsS0FBSyxDQUFDNkMsWUFBTixHQUFxQjtBQUNqQi9QLElBQUUsRUFBRSxJQURhO0FBRWpCb00sVUFBUSxFQUFFO0FBRk8sQ0FBckIsQzs7Ozs7Ozs7Ozs7O0FDbEtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTXJKLEtBQUssR0FBRztBQUNWLE1BQUlvSyxLQUFKLEdBQVk7QUFBRSxXQUFPNUssMkNBQUksQ0FBQzRLLEtBQVo7QUFBb0IsR0FEeEI7O0FBRVYsTUFBSTZDLFFBQUosR0FBZTtBQUFFLFdBQU96TiwyQ0FBSSxDQUFDME4sUUFBWjtBQUF1QixHQUY5Qjs7QUFHVixNQUFJQyxjQUFKLEdBQXFCO0FBQUMsV0FBTzNOLDJDQUFJLENBQUMyTixjQUFaO0FBQTRCLEdBSHhDOztBQUlWLE1BQUlDLGdCQUFKLEdBQXVCO0FBQUMsV0FBT2pPLDhDQUFLLENBQUNpTyxnQkFBYjtBQUErQixHQUo3Qzs7QUFLVixNQUFJcFEsUUFBSixHQUFlO0FBQUMsV0FBT0Esa0RBQVA7QUFBaUIsR0FMdkI7O0FBTVYsTUFBSXFRLE1BQUosR0FBYTtBQUFDLFdBQU8sSUFBUDtBQUFZLEdBTmhCOztBQU1rQjtBQUM1QixNQUFJQyxXQUFKLEdBQWtCO0FBQUUsV0FBT0MsSUFBSSxDQUFDQyxHQUFMLENBQVMvTSxRQUFRLENBQUNnTixlQUFULENBQXlCQyxXQUFsQyxFQUErQ3RSLE1BQU0sQ0FBQ3VSLFVBQVAsSUFBcUIsQ0FBcEUsQ0FBUDtBQUFnRixHQVAxRjs7QUFRVixNQUFJQyxZQUFKLEdBQW1CO0FBQUUsV0FBT0wsSUFBSSxDQUFDQyxHQUFMLENBQVMvTSxRQUFRLENBQUNnTixlQUFULENBQXlCSSxZQUFsQyxFQUFnRHpSLE1BQU0sQ0FBQzBSLFdBQVAsSUFBc0IsQ0FBdEUsQ0FBUDtBQUFrRjs7QUFSN0YsQ0FBZDs7QUFXQTlOLEtBQUssQ0FBQytOLHVCQUFOLEdBQWdDLFlBQVc7QUFDdkMsU0FBTzVPLDhDQUFLLENBQUM0Tyx1QkFBTixFQUFQO0FBQ0gsQ0FGRDs7QUFJQS9OLEtBQUssQ0FBQ2dPLG1CQUFOLEdBQTRCLFVBQVNqUCxHQUFULEVBQWM7QUFDdEMsU0FBT0ksOENBQUssQ0FBQzZPLG1CQUFOLENBQTBCalAsR0FBMUIsQ0FBUDtBQUNILENBRkQ7O0FBSUFpQixLQUFLLENBQUNpTyxtQkFBTixHQUE0QixVQUFTbFAsR0FBVCxFQUFjQyxLQUFkLEVBQXFCO0FBQzdDLFNBQU9HLDhDQUFLLENBQUM4TyxtQkFBTixDQUEwQmxQLEdBQTFCLEVBQStCQyxLQUEvQixDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTtBQUNBOzs7QUFDQWdCLEtBQUssQ0FBQ2tPLFNBQU4sR0FBa0IsVUFBVWpSLEVBQVYsRUFBYytPLEdBQWQsRUFBbUI7QUFDakNtQyxtREFBRyxDQUFDQyxRQUFKLENBQWFELGlEQUFHLENBQUNFLFFBQUosQ0FBYXBSLEVBQWIsQ0FBYixFQUErQitPLEdBQS9CO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTs7O0FBQ0FoTSxLQUFLLENBQUNzTyxRQUFOLEdBQWlCLFVBQVVyUixFQUFWLEVBQWM7QUFDM0JrUixtREFBRyxDQUFDSSxXQUFKLENBQWdCSixpREFBRyxDQUFDRSxRQUFKLENBQWFwUixFQUFiLENBQWhCO0FBQ0gsQ0FGRCxDLENBSUE7QUFDQTtBQUNBOzs7QUFDQStDLEtBQUssQ0FBQ3dPLE1BQU4sR0FBZSxVQUFVdlIsRUFBVixFQUFjaUYsR0FBZCxFQUFtQjtBQUM5QmlNLG1EQUFHLENBQUNNLFNBQUosQ0FBY04saURBQUcsQ0FBQ0UsUUFBSixDQUFhcFIsRUFBYixDQUFkLEVBQWdDaUYsR0FBaEM7QUFDSCxDQUZELEMsQ0FJQTtBQUNBOzs7QUFDQWxDLEtBQUssQ0FBQzBPLFFBQU4sR0FBaUIsVUFBVXpSLEVBQVYsRUFBYztBQUMzQmtSLG1EQUFHLENBQUNRLFlBQUosQ0FBaUJSLGlEQUFHLENBQUNFLFFBQUosQ0FBYXBSLEVBQWIsQ0FBakI7QUFDSCxDQUZELEMsQ0FJQTtBQUNBOzs7QUFDQStDLEtBQUssQ0FBQzRPLFNBQU4sR0FBa0IsVUFBVXRJLElBQVYsRUFBZ0I7QUFDOUIsTUFBSTdILG1EQUFTLENBQUNvUSxjQUFWLENBQXlCdkksSUFBekIsQ0FBSixFQUFvQztBQUNoQyxXQUFPN0gsbURBQVMsQ0FBQzZILElBQUQsQ0FBVCxDQUFnQndJLE1BQXZCO0FBQ0g7O0FBQ0QsU0FBTyxJQUFQO0FBQ0gsQ0FMRCxDLENBT0E7OztBQUNBOU8sS0FBSyxDQUFDK08sT0FBTixHQUFnQixZQUFZO0FBQ3hCNVAsZ0RBQUssQ0FBQ0MsSUFBTixDQUFXLG9CQUFYLEVBQWtDLHFEQUFsQztBQUNBLFNBQU80UCw2Q0FBUDtBQUNILENBSEQ7QUFLQTs7Ozs7OztBQUtBaFAsS0FBSyxDQUFDaVAsS0FBTixHQUFjLFVBQVVwUyxLQUFWLEVBQWlCZ0osT0FBakIsRUFBMEI7QUFDcEMsU0FBTzFHLDhDQUFLLENBQUMrUCxxQkFBTixDQUE0QnJTLEtBQTVCLEVBQW1DZ0osT0FBbkMsRUFBNEM7QUFBQ3NKLGNBQVUsRUFBRTtBQUFiLEdBQTVDLENBQVA7QUFDSCxDQUZEO0FBSUE7Ozs7Ozs7Ozs7Ozs7OztBQWFBblAsS0FBSyxDQUFDa1AscUJBQU4sR0FBOEIsVUFBVXJTLEtBQVYsRUFBaUJnSixPQUFqQixFQUEwQnVKLE9BQU8sR0FBRyxFQUFwQyxFQUF3QztBQUNsRSxTQUFPalEsOENBQUssQ0FBQytQLHFCQUFOLENBQTRCclMsS0FBNUIsRUFBbUNnSixPQUFuQyxFQUE0Q3VKLE9BQTVDLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FwUCxLQUFLLENBQUN3RixTQUFOLEdBQWtCLFVBQVNLLE9BQVQsRUFBa0J1SixPQUFPLEdBQUcsRUFBNUIsRUFBZ0M7QUFDOUNqUSxnREFBSyxDQUFDcUcsU0FBTixDQUFnQkssT0FBaEIsRUFBeUJ1SixPQUF6QjtBQUNILENBRkQsQyxDQUlBOzs7QUFDQXBQLEtBQUssQ0FBQ3FQLFVBQU4sR0FBbUIsVUFBU3RDLE1BQVQsRUFBaUI7QUFDaEMsU0FBT3ZOLDJDQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5Qm1FLE1BQXpCLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0EvTSxLQUFLLENBQUNzUCxjQUFOLEdBQXVCLFVBQVN2QyxNQUFULEVBQWlCO0FBQ3BDLFNBQU92TiwyQ0FBSSxDQUFDbUosY0FBTCxDQUFvQjRHLE9BQXBCLENBQTRCeEMsTUFBNUIsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQS9NLEtBQUssQ0FBQ3dQLGlCQUFOLEdBQTBCLFVBQVMsR0FBR3BHLEtBQVosRUFBbUI7QUFDekMsU0FBTzVKLDJDQUFJLENBQUNtSixjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDckcsS0FBM0MsQ0FBUDtBQUNILENBRkQ7O0FBSUFwSixLQUFLLENBQUMwUCxzQkFBTixHQUErQixVQUFTLEdBQUdDLE1BQVosRUFBb0I7QUFDL0MsU0FBT25RLDJDQUFJLENBQUNtSixjQUFMLENBQW9CaUgsZ0JBQXBCLENBQXFDRCxNQUFyQyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQTNQLEtBQUssQ0FBQzZQLHVCQUFOLEdBQWdDLFVBQVN2SixJQUFULEVBQWU7QUFDM0MsU0FBTzlHLDJDQUFJLENBQUNtSixjQUFMLENBQW9CbUgsaUJBQXBCLENBQXNDeEosSUFBdEMsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQXRHLEtBQUssQ0FBQytQLG1CQUFOLEdBQTRCLFVBQVNDLElBQVQsRUFBZTtBQUN2QyxNQUFJLEVBQUVBLElBQUksWUFBWTVULE1BQU0sQ0FBQzZULE1BQXpCLEtBQW9DLEVBQUVELElBQUksWUFBWUUsT0FBbEIsQ0FBeEMsRUFBb0UsT0FBT3pPLFNBQVA7QUFDcEUsTUFBSXVPLElBQUksWUFBWUMsTUFBcEIsRUFBNEJELElBQUksR0FBR0EsSUFBSSxDQUFDLENBQUQsQ0FBWDtBQUM1QixTQUFPeFEsMkNBQUksQ0FBQ3VRLG1CQUFMLENBQXlCQyxJQUF6QixDQUFQO0FBQ0gsQ0FKRCxDLENBTUE7OztBQUNBaFEsS0FBSyxDQUFDbVEsUUFBTixHQUFpQixVQUFTQyxVQUFULEVBQXFCclIsR0FBckIsRUFBMEI7QUFDdkMsU0FBT2Msa0RBQVMsQ0FBQ3dRLGFBQVYsQ0FBd0JELFVBQXhCLEVBQW9DclIsR0FBcEMsQ0FBUDtBQUNILENBRkQ7O0FBSUFpQixLQUFLLENBQUNzUSxPQUFOLEdBQWdCdFEsS0FBSyxDQUFDbVEsUUFBdEIsQyxDQUVBOztBQUNBblEsS0FBSyxDQUFDdVEsUUFBTixHQUFpQixVQUFTSCxVQUFULEVBQXFCclIsR0FBckIsRUFBMEI0RCxJQUExQixFQUFnQztBQUM3QyxTQUFPOUMsa0RBQVMsQ0FBQzJRLGFBQVYsQ0FBd0JKLFVBQXhCLEVBQW9DclIsR0FBcEMsRUFBeUM0RCxJQUF6QyxDQUFQO0FBQ0gsQ0FGRDs7QUFJQTNDLEtBQUssQ0FBQ3lRLE9BQU4sR0FBZ0J6USxLQUFLLENBQUN1USxRQUF0QixDLENBRUE7O0FBQ0F2USxLQUFLLENBQUMwUSxVQUFOLEdBQW1CLFVBQVNOLFVBQVQsRUFBcUJyUixHQUFyQixFQUEwQjtBQUN6QyxTQUFPYyxrREFBUyxDQUFDOFEsZ0JBQVYsQ0FBMkJQLFVBQTNCLEVBQXVDclIsR0FBdkMsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQWlCLEtBQUssQ0FBQ29ELFdBQU4sR0FBb0IsVUFBU3dOLElBQVQsRUFBZUMsVUFBZixFQUEyQnpCLE9BQTNCLEVBQW9DO0FBQ3BELFNBQU9qUSw4Q0FBSyxDQUFDaUUsV0FBTixDQUFrQndOLElBQWxCLEVBQXdCQyxVQUF4QixFQUFvQ3pCLE9BQXBDLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FwUCxLQUFLLENBQUM4USxTQUFOLEdBQWtCLFVBQVNkLElBQVQsRUFBZWUsUUFBZixFQUF5QjtBQUN2QyxTQUFPNVIsOENBQUssQ0FBQzJSLFNBQU4sQ0FBZ0JkLElBQWhCLEVBQXNCZSxRQUF0QixDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBL1EsS0FBSyxDQUFDZ1IsY0FBTixHQUF1QixVQUFTQyxNQUFULEVBQWlCaE0sT0FBakIsRUFBMEI7QUFDN0MsU0FBTzlGLDhDQUFLLENBQUM2UixjQUFOLENBQXFCQyxNQUFyQixFQUE2QmhNLE9BQTdCLENBQVA7QUFDSCxDQUZELEMsQ0FJQTs7O0FBQ0FqRixLQUFLLENBQUNrUixRQUFOLEdBQWlCLFVBQVN2TyxJQUFULEVBQWU7QUFDNUIsU0FBT3hELDhDQUFLLENBQUMrUixRQUFOLENBQWV2TyxJQUFmLENBQVA7QUFDSCxDQUZEOztBQUlBM0MsS0FBSyxDQUFDbVIsZUFBTixHQUF3QixVQUFTN0ssSUFBVCxFQUFlO0FBQ25DLFNBQU8sQ0FBQyxDQUFDNUgsc0RBQVksQ0FBQzRILElBQUQsQ0FBckI7QUFDSCxDQUZEOztBQUlBdEcsS0FBSyxDQUFDb1IsY0FBTixHQUF1QixVQUFTOUssSUFBVCxFQUFlO0FBQ2xDLFNBQU8sQ0FBQyxDQUFDM0gscURBQVcsQ0FBQzJILElBQUQsQ0FBcEI7QUFDSCxDQUZEOztBQUlBdEcsS0FBSyxDQUFDcVIsZ0JBQU4sR0FBeUIsVUFBU3BVLEVBQVQsRUFBYTtBQUNsQyxTQUFPLENBQUMsQ0FBQ1Usd0RBQWMsQ0FBQ1YsRUFBRCxDQUF2QjtBQUNILENBRkQ7O0FBSUErQyxLQUFLLENBQUNzUixhQUFOLEdBQXNCLFVBQVNyVSxFQUFULEVBQWE7QUFDL0IsU0FBTzJDLHNEQUFhLENBQUMyUixRQUFkLENBQXVCdFUsRUFBdkIsRUFBMkIsSUFBM0IsQ0FBUDtBQUNILENBRkQ7O0FBSUErQyxLQUFLLENBQUN3UixjQUFOLEdBQXVCLFVBQVN2VSxFQUFULEVBQWE7QUFDaEMsU0FBTzJDLHNEQUFhLENBQUMyUixRQUFkLENBQXVCdFUsRUFBdkIsRUFBMkIsS0FBM0IsQ0FBUDtBQUNILENBRkQ7O0FBSUErQyxLQUFLLENBQUN5UixhQUFOLEdBQXNCLFVBQVN4VSxFQUFULEVBQWE7QUFDL0IsU0FBTzJDLHNEQUFhLENBQUMyUixRQUFkLENBQXVCdFUsRUFBdkIsRUFBMkIsQ0FBQ1Usd0RBQWMsQ0FBQ1YsRUFBRCxDQUExQyxDQUFQO0FBQ0gsQ0FGRCxDLENBSUE7OztBQUNBK0MsS0FBSyxDQUFDMFIsU0FBTixHQUFrQixVQUFTM1MsR0FBVCxFQUFjO0FBQzVCLFNBQU9jLGtEQUFTLENBQUM2UixTQUFWLENBQW9CM1MsR0FBcEIsQ0FBUDtBQUNILENBRkQsQyxDQUlBOzs7QUFDQWlCLEtBQUssQ0FBQzJSLFNBQU4sR0FBa0IsVUFBUzVTLEdBQVQsRUFBYzRELElBQWQsRUFBb0I7QUFDbEMsU0FBTzlDLGtEQUFTLENBQUM4UixTQUFWLENBQW9CNVMsR0FBcEIsRUFBeUI0RCxJQUF6QixDQUFQO0FBQ0gsQ0FGRDs7QUFNQSxNQUFNaVAsWUFBWSxHQUFHLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxFQUFlQyxPQUFmLEtBQTJCLElBQUksTUFBTUMsUUFBTixDQUFlO0FBRS9ELE1BQUlDLE1BQUosR0FBYTtBQUFDLFdBQU9GLE9BQU8sQ0FBQ0UsTUFBZjtBQUF1Qjs7QUFFckNDLFdBQVMsQ0FBQzVMLElBQUQsRUFBTztBQUNaLFdBQU8sQ0FBQyxDQUFDdUwsTUFBTSxDQUFDdkwsSUFBRCxDQUFmO0FBQ0g7O0FBRUQxQixRQUFNLENBQUMwQixJQUFELEVBQU87QUFDVCxXQUFPeUwsT0FBTyxDQUFDbk4sTUFBUixDQUFlMEIsSUFBZixDQUFQO0FBQ0g7O0FBRUR4QixTQUFPLENBQUN3QixJQUFELEVBQU87QUFDVixXQUFPeUwsT0FBTyxDQUFDak4sT0FBUixDQUFnQndCLElBQWhCLENBQVA7QUFDSDs7QUFFRDZMLFFBQU0sQ0FBQzdMLElBQUQsRUFBTztBQUNULFFBQUl1TCxNQUFNLENBQUN2TCxJQUFELENBQVYsRUFBa0IsS0FBS3hCLE9BQUwsQ0FBYXdCLElBQWIsRUFBbEIsS0FDSyxLQUFLMUIsTUFBTCxDQUFZMEIsSUFBWjtBQUNSOztBQUVEOEwsUUFBTSxDQUFDOUwsSUFBRCxFQUFPO0FBQ1QsV0FBT3lMLE9BQU8sQ0FBQ0ssTUFBUixDQUFlOUwsSUFBZixDQUFQO0FBQ0g7O0FBRURwSCxLQUFHLENBQUNvSCxJQUFELEVBQU87QUFDTixRQUFJd0wsSUFBSSxDQUFDakQsY0FBTCxDQUFvQnZJLElBQXBCLENBQUosRUFBK0I7QUFDM0IsVUFBSXdMLElBQUksQ0FBQ3hMLElBQUQsQ0FBSixDQUFXd0ksTUFBZixFQUF1QixPQUFPZ0QsSUFBSSxDQUFDeEwsSUFBRCxDQUFKLENBQVd3SSxNQUFsQjtBQUN2QixhQUFPZ0QsSUFBSSxDQUFDeEwsSUFBRCxDQUFYO0FBQ0g7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBRUQrTCxRQUFNLEdBQUc7QUFDTCxXQUFPaFUsTUFBTSxDQUFDaUIsSUFBUCxDQUFZd1MsSUFBWixFQUFrQjdMLEdBQWxCLENBQXNCcU0sQ0FBQyxJQUFJLEtBQUtwVCxHQUFMLENBQVNvVCxDQUFULENBQTNCLEVBQXdDdkYsTUFBeEMsQ0FBK0N3RixDQUFDLElBQUlBLENBQXBELENBQVA7QUFDSDs7QUFuQzhELENBQW5CLEVBQWhEOztBQXNDQXZTLEtBQUssQ0FBQ3dTLE9BQU4sR0FBZ0JaLFlBQVksQ0FBQ2xULHNEQUFELEVBQWVELG1EQUFmLEVBQTBCZ0IscURBQTFCLENBQTVCO0FBQ0FPLEtBQUssQ0FBQ3lTLE1BQU4sR0FBZWIsWUFBWSxDQUFDalQscURBQUQsRUFBY0gsa0RBQWQsRUFBd0JrQixvREFBeEIsQ0FBM0I7QUFFZU0sb0VBQWY7QUFFQTVELE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQnBJLEtBQS9CLEdBQXVDQSxLQUF2QyxDOzs7Ozs7Ozs7Ozs7QUM3UEE7QUFBQTtBQUNBLE1BQU0wUyxZQUFZLEdBQUdDLG1CQUFPLENBQUMsc0JBQUQsQ0FBNUI7O0FBQ2UsbUVBQUksTUFBTWhULFFBQU4sU0FBdUIrUyxZQUF2QixDQUFvQztBQUNuRHZTLGFBQVcsR0FBRTtBQUNUO0FBQ0EvRCxVQUFNLENBQUNzSCxTQUFQLENBQWlCMEUsYUFBakIsQ0FBK0J6SSxRQUEvQixHQUEwQyxJQUExQztBQUNIOztBQUNEOEcsVUFBUSxDQUFDbU0sU0FBRCxFQUFZLEdBQUdDLElBQWYsRUFBcUI7QUFBQyxTQUFLQyxJQUFMLENBQVVGLFNBQVYsRUFBcUIsR0FBR0MsSUFBeEI7QUFBK0I7O0FBQzdERSxLQUFHLENBQUNILFNBQUQsRUFBWUksV0FBWixFQUF5QjtBQUFDLFNBQUtDLGNBQUwsQ0FBb0JMLFNBQXBCLEVBQStCSSxXQUEvQjtBQUE2Qzs7QUFOdkIsQ0FBeEMsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNGQTtBQUFBO0FBQUE7QUFBQTs7O0FBSUE7QUFDQTtBQUVBLElBQUlFLFNBQUo7QUFDQSxNQUFNekssUUFBUSxHQUFHdEosOENBQUssQ0FBQ3NKLFFBQXZCOztBQUNBLFNBQVMwSyxZQUFULEdBQXVCO0FBQ25CLE1BQUlDLG1CQUFtQixHQUFHdlAsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNzUCxtQkFBckIsRUFBMEMsQ0FBMUMsQ0FBMUI7QUFDQSxNQUFHLENBQUNBLG1CQUFKLEVBQXdCLE9BQU8sSUFBUDtBQUN4QixNQUFJQyxnQkFBZ0IsR0FBRzVLLFFBQVEsQ0FBQzJLLG1CQUFtQixDQUFDQSxtQkFBckIsQ0FBL0I7QUFDQSxNQUFJRSxPQUFPLEdBQUcsRUFBZDtBQUNBLE1BQUlDLG1CQUFtQixHQUFHMVAsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUN5UCxtQkFBckIsRUFBMEMsQ0FBMUMsQ0FBMUI7QUFDQSxRQUFNbEssUUFBUSxHQUFHeEYsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJLE9BQU9BLENBQUMsQ0FBQ3VGLFFBQVQsS0FBc0IsUUFBekMsRUFBbUQsQ0FBbkQsQ0FBakI7QUFDQWlLLFNBQU8sQ0FBQy9KLElBQVIsQ0FBYyxlQUFjOEosZ0JBQWlCLG1CQUFrQjVLLFFBQVEsQ0FBQzVFLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbkgsV0FBRixJQUFpQixPQUFPbUgsQ0FBQyxDQUFDbkgsV0FBVCxLQUF5QixRQUExQyxJQUFzRG1ILENBQUMsQ0FBQ25ILFdBQUYsQ0FBY3lGLFFBQWQsQ0FBdUIsVUFBdkIsQ0FBekUsRUFBNkcsQ0FBN0csRUFBZ0h6RixXQUFqSCxDQUE4SCxFQUFyTTtBQUNBMlcsU0FBTyxDQUFDL0osSUFBUixDQUFjLGVBQWM4SixnQkFBaUIsS0FBSTVLLFFBQVEsQ0FBQzVFLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMFAsZ0JBQXJCLEVBQXVDLENBQXZDLEVBQTBDQSxnQkFBM0MsQ0FBNkQsS0FBSS9LLFFBQVEsQ0FBQzVFLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMlAsT0FBRixJQUFhM1AsQ0FBQyxDQUFDNFAsa0JBQWxDLEVBQXNELENBQXRELEVBQXlERCxPQUExRCxDQUFtRSxFQUFyTTs7QUFDQSxNQUFHRixtQkFBSCxFQUF1QjtBQUNuQkQsV0FBTyxDQUFDL0osSUFBUixDQUFjLGVBQWM4SixnQkFBaUIsS0FBSTVLLFFBQVEsQ0FBQzhLLG1CQUFtQixDQUFDQSxtQkFBckIsQ0FBMEMsdUNBQXNDOUssUUFBUSxDQUFDNUUsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM2UCxRQUFyQixFQUErQixDQUEvQixFQUFrQ0EsUUFBbkMsQ0FBNkMsRUFBOUw7QUFDQUwsV0FBTyxDQUFDL0osSUFBUixDQUFjLElBQUdkLFFBQVEsQ0FBQzhLLG1CQUFtQixDQUFDSyxvQkFBckIsQ0FBMkMsS0FBSW5MLFFBQVEsQ0FBQ1ksUUFBUSxDQUFDQSxRQUFWLENBQW9CLHFCQUFwRztBQUNIOztBQUNEMUIsU0FBTyxDQUFDQyxHQUFSLENBQVkwTCxPQUFaO0FBQ0EsU0FBT0EsT0FBUDtBQUNIOztBQUVjLG1FQUFJLE1BQU1PLFdBQU4sQ0FBa0I7QUFDakMxVCxhQUFXLEdBQUU7QUFDVCxTQUFLd0UsT0FBTCxHQUFlLEtBQWY7QUFDSDs7QUFFREMsUUFBTSxHQUFFO0FBQ0osUUFBRyxLQUFLRCxPQUFSLEVBQWdCO0FBQ2hCLFNBQUtBLE9BQUwsR0FBZSxJQUFmO0FBQ0F1TyxhQUFTLEdBQUdBLFNBQVMsSUFBSUMsWUFBWSxFQUFyQztBQUVBLFFBQUcsQ0FBQ0QsU0FBSixFQUFjdkwsT0FBTyxDQUFDbU0sS0FBUixDQUFjLElBQUk3TCxLQUFKLENBQVUseURBQVYsQ0FBZDtBQUNkOEwscURBQVEsQ0FBQzNGLFFBQVQsQ0FBa0IsYUFBbEIsRUFBa0M7RUFDeEM4RSxTQUFTLENBQUMxSixJQUFWLENBQWUsSUFBZixDQUFxQjs7Ozs7O0VBTXJCMEosU0FBUyxDQUFDak4sR0FBVixDQUFjbkMsQ0FBQyxJQUFJQSxDQUFDLEdBQUMsUUFBckIsRUFBK0IwRixJQUEvQixDQUFvQyxJQUFwQyxDQUEwQzs7OztFQVBwQztBQVlIOztBQUVEMUUsU0FBTyxHQUFFO0FBQ0wsUUFBRyxDQUFDLEtBQUtILE9BQVQsRUFBaUI7QUFDakIsU0FBS0EsT0FBTCxHQUFlLEtBQWY7QUFDQW9QLHFEQUFRLENBQUN4RixXQUFULENBQXFCLGFBQXJCO0FBQ0g7O0FBN0JnQyxDQUF0QixFQUFmLEU7Ozs7Ozs7Ozs7OztBQzFCQTtBQUFBO0FBQUE7QUFFQSxNQUFNeUYsZ0JBQWdCLEdBQUcsSUFBekI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsSUFBSXhSLE1BQUosQ0FBWSxPQUFNdVIsZ0JBQWlCLHNEQUFuQyxDQUFsQjtBQUVlLG1FQUFJLE1BQU1qVSxlQUFOLENBQXNCO0FBQ3JDSSxhQUFXLEdBQUU7QUFDVC9ELFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQnJJLGVBQS9CLEdBQWlELElBQWpEO0FBQ0g7O0FBQ0RtVSxNQUFJLEdBQUc7QUFDSCxRQUFJLENBQUMsS0FBS0MsVUFBVixFQUFzQjtBQUN0QixTQUFLQyxtQkFBTCxDQUF5QnpMLHVEQUFjLENBQUM0RyxPQUFmLENBQXVCLEtBQUs4RSxZQUFMLENBQWtCMVMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBdkIsQ0FBekI7QUFDQSxTQUFLMlMsYUFBTCxDQUFtQjdULFFBQVEsQ0FBQzZILGFBQVQsQ0FBdUIsWUFBdkIsQ0FBbkI7QUFDQSxTQUFLNkwsVUFBTCxHQUFrQixLQUFsQjtBQUNIOztBQUVEL00sT0FBSyxHQUFHO0FBQ0osUUFBSSxLQUFLK00sVUFBVCxFQUFxQjtBQUNyQixTQUFLSSxpQkFBTCxDQUF1QjVMLHVEQUFjLENBQUM0RyxPQUFmLENBQXVCLEtBQUs4RSxZQUFMLENBQWtCMVMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBdkIsQ0FBdkI7QUFDQSxTQUFLNlMsZ0JBQUwsQ0FBc0IvVCxRQUFRLENBQUM2SCxhQUFULENBQXVCLFlBQXZCLENBQXRCO0FBQ0EsU0FBSzZMLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxTQUFLTSxlQUFMO0FBQ0g7O0FBRURGLG1CQUFpQixDQUFDaEssT0FBRCxFQUFVO0FBQ3ZCLFNBQUssTUFBTW1LLE1BQVgsSUFBcUJuSyxPQUFyQixFQUE4QjtBQUMxQixXQUFLb0ssZ0JBQUwsQ0FBc0JYLGdCQUF0QixFQUF3Q1UsTUFBeEM7QUFDSDtBQUNKOztBQUVETixxQkFBbUIsQ0FBQzdKLE9BQUQsRUFBVTtBQUN6QixTQUFLLE1BQU1tSyxNQUFYLElBQXFCbkssT0FBckIsRUFBOEI7QUFDMUIsV0FBS3FLLGtCQUFMLENBQXdCWixnQkFBeEIsRUFBMENVLE1BQTFDO0FBQ0g7QUFDSjs7QUFFREcsY0FBWSxDQUFDN1YsS0FBRCxFQUFRO0FBQ2hCLFFBQUksQ0FBQzhWLEtBQUssQ0FBQzlWLEtBQUQsQ0FBVixFQUFtQixPQUFPLElBQVA7QUFDbkIsUUFBSUEsS0FBSyxDQUFDK1YsUUFBTixDQUFlLElBQWYsS0FBd0IvVixLQUFLLENBQUMrVixRQUFOLENBQWUsSUFBZixDQUF4QixJQUFnRC9WLEtBQUssQ0FBQytWLFFBQU4sQ0FBZSxJQUFmLENBQWhELElBQXdFL1YsS0FBSyxDQUFDK1YsUUFBTixDQUFlLElBQWYsQ0FBNUUsRUFBa0csT0FBTyxJQUFQO0FBQ2xHLFFBQUkvVixLQUFLLENBQUNnVyxVQUFOLENBQWlCLGlCQUFqQixDQUFKLEVBQXlDLE9BQU8sSUFBUDtBQUN6QyxRQUFJaFcsS0FBSyxDQUFDZ1csVUFBTixDQUFpQixHQUFqQixNQUEwQmhXLEtBQUssQ0FBQytELE1BQU4sSUFBZ0IsQ0FBaEIsSUFBcUIvRCxLQUFLLENBQUMrRCxNQUFOLElBQWdCLENBQS9ELENBQUosRUFBdUUsT0FBTyxJQUFQO0FBQ3ZFLFFBQUkvRCxLQUFLLENBQUNvRCxRQUFOLENBQWUsT0FBZixLQUEyQnBELEtBQUssQ0FBQ29ELFFBQU4sQ0FBZSxNQUFmLENBQS9CLEVBQXVELE9BQU8sSUFBUDtBQUN2RCxXQUFPLEtBQVA7QUFDSDs7QUFFRGlTLGNBQVksQ0FBQ0ssTUFBRCxFQUFTO0FBQ2pCLFFBQUksT0FBT0EsTUFBUCxLQUFrQixRQUFsQixJQUE4Qk8sS0FBSyxDQUFDQyxPQUFOLENBQWNSLE1BQWQsQ0FBbEMsRUFBeUQsT0FBTyxLQUFQO0FBQ3pELFFBQUlBLE1BQU0sQ0FBQ1MsVUFBWCxFQUF1QixPQUFPLEtBQVA7QUFDdkIsUUFBSSxDQUFDOVcsTUFBTSxDQUFDaUIsSUFBUCxDQUFZb1YsTUFBWixFQUFvQjNSLE1BQXpCLEVBQWlDLE9BQU8sS0FBUDs7QUFDakMsU0FBSyxNQUFNcVMsYUFBWCxJQUE0QlYsTUFBNUIsRUFBb0M7QUFDaEMsWUFBTTFWLEtBQUssR0FBRzBWLE1BQU0sQ0FBQ1UsYUFBRCxDQUFwQjtBQUNBLFVBQUksT0FBT3BXLEtBQVAsS0FBaUIsUUFBckIsRUFBK0IsT0FBTyxLQUFQO0FBQy9CLFVBQUksS0FBSzZWLFlBQUwsQ0FBa0I3VixLQUFsQixDQUFKLEVBQThCO0FBQzlCLFVBQUlBLEtBQUssQ0FBQ3NLLEtBQU4sQ0FBWSxHQUFaLEVBQWlCdkcsTUFBakIsS0FBNEIsQ0FBaEMsRUFBbUMsT0FBTyxLQUFQO0FBQ25DLFVBQUksQ0FBQ2tSLFNBQVMsQ0FBQ3JPLElBQVYsQ0FBZTVHLEtBQUssQ0FBQ3NLLEtBQU4sQ0FBWSxHQUFaLEVBQWlCLENBQWpCLENBQWYsQ0FBTCxFQUEwQyxPQUFPLEtBQVA7QUFDN0M7O0FBRUQsV0FBTyxJQUFQO0FBQ0g7O0FBRURxTCxrQkFBZ0IsQ0FBQ1UsYUFBRCxFQUFnQkMsVUFBaEIsRUFBNEI7QUFDeEMsU0FBSyxNQUFNRixhQUFYLElBQTRCRSxVQUE1QixFQUF3QztBQUNwQyxZQUFNdFcsS0FBSyxHQUFHc1csVUFBVSxDQUFDRixhQUFELENBQXhCO0FBQ0EsVUFBSSxLQUFLUCxZQUFMLENBQWtCN1YsS0FBbEIsQ0FBSixFQUE4QjtBQUM5QixZQUFNbUssU0FBUyxHQUFHbkssS0FBSyxDQUFDc0ssS0FBTixDQUFZLEdBQVosQ0FBbEI7O0FBQ0EsV0FBSyxNQUFNaU0sV0FBWCxJQUEwQnBNLFNBQTFCLEVBQXFDO0FBQ2pDLGNBQU1yRyxLQUFLLEdBQUd5UyxXQUFXLENBQUN6UyxLQUFaLENBQWtCbVIsU0FBbEIsQ0FBZDtBQUNBLFlBQUksQ0FBQ25SLEtBQUQsSUFBVSxDQUFDQSxLQUFLLENBQUNDLE1BQWpCLElBQTJCRCxLQUFLLENBQUNDLE1BQU4sR0FBZSxDQUE5QyxFQUFpRCxTQUZoQixDQUUwQjs7QUFDM0QsY0FBTXlTLFNBQVMsR0FBRzFTLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU3dHLEtBQVQsQ0FBZSxHQUFmLEVBQW9CckQsR0FBcEIsQ0FBd0IsQ0FBQ3dQLENBQUQsRUFBSUMsQ0FBSixLQUFVQSxDQUFDLEdBQUdELENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBS0UsV0FBTCxLQUFxQkYsQ0FBQyxDQUFDRyxLQUFGLENBQVEsQ0FBUixDQUF4QixHQUFxQ0gsQ0FBeEUsRUFBMkVqTSxJQUEzRSxDQUFnRixFQUFoRixDQUFsQjtBQUNBOEwsa0JBQVUsQ0FBQ0YsYUFBRCxDQUFWLElBQThCLElBQUdDLGFBQWMsSUFBR0csU0FBVSxFQUE1RDtBQUNIO0FBQ0o7QUFDSjs7QUFFRFosb0JBQWtCLENBQUNTLGFBQUQsRUFBZ0JDLFVBQWhCLEVBQTRCO0FBQzFDLFNBQUssTUFBTUYsYUFBWCxJQUE0QkUsVUFBNUIsRUFBd0M7QUFDcEMsWUFBTXRXLEtBQUssR0FBR3NXLFVBQVUsQ0FBQ0YsYUFBRCxDQUF4QjtBQUNBLFVBQUksS0FBS1AsWUFBTCxDQUFrQjdWLEtBQWxCLENBQUosRUFBOEI7QUFDOUIsVUFBSTZXLFNBQVMsR0FBRyxFQUFoQjtBQUNBLFlBQU0xTSxTQUFTLEdBQUduSyxLQUFLLENBQUNzSyxLQUFOLENBQVksR0FBWixDQUFsQjs7QUFDQSxXQUFLLE1BQU1pTSxXQUFYLElBQTBCcE0sU0FBMUIsRUFBcUM7QUFDakMsWUFBSW9NLFdBQVcsQ0FBQ1AsVUFBWixDQUF3QixHQUFFSyxhQUFjLEdBQXhDLENBQUosRUFBaUQ7QUFDakRRLGlCQUFTLElBQUssSUFBR04sV0FBWSxFQUE3QjtBQUNIOztBQUNERCxnQkFBVSxDQUFDRixhQUFELENBQVYsR0FBNEJTLFNBQVMsQ0FBQ0MsSUFBVixFQUE1QjtBQUNIO0FBQ0o7O0FBRUR0QixrQkFBZ0IsQ0FBQ3VCLE9BQUQsRUFBVTtBQUN0QixRQUFJLEVBQUVBLE9BQU8sWUFBWTdGLE9BQXJCLENBQUosRUFBbUM7QUFDbkMsVUFBTThGLE9BQU8sR0FBR0QsT0FBTyxDQUFDNU0sU0FBeEI7O0FBQ0EsU0FBSyxJQUFJOE0sQ0FBQyxHQUFHLENBQVIsRUFBV0MsSUFBSSxHQUFHRixPQUFPLENBQUNqVCxNQUEvQixFQUF1Q2tULENBQUMsR0FBR0MsSUFBM0MsRUFBaURELENBQUMsRUFBbEQsRUFBc0Q7QUFDbEQsVUFBSSxDQUFDaEMsU0FBUyxDQUFDck8sSUFBVixDQUFlb1EsT0FBTyxDQUFDQyxDQUFELENBQXRCLENBQUwsRUFBaUM7QUFDakMsWUFBTW5ULEtBQUssR0FBR2tULE9BQU8sQ0FBQ0MsQ0FBRCxDQUFQLENBQVduVCxLQUFYLENBQWlCbVIsU0FBakIsRUFBNEIsQ0FBNUIsQ0FBZDtBQUNBLFlBQU1rQyxRQUFRLEdBQUdyVCxLQUFLLENBQUN3RyxLQUFOLENBQVksR0FBWixFQUFpQnJELEdBQWpCLENBQXFCLENBQUN3UCxDQUFELEVBQUlDLENBQUosS0FBVUEsQ0FBQyxHQUFHRCxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUtFLFdBQUwsS0FBcUJGLENBQUMsQ0FBQ0csS0FBRixDQUFRLENBQVIsQ0FBeEIsR0FBcUNILENBQXJFLEVBQXdFak0sSUFBeEUsQ0FBNkUsRUFBN0UsQ0FBakI7QUFDQXVNLGFBQU8sQ0FBQzVNLFNBQVIsQ0FBa0JpTixHQUFsQixDQUF1QixHQUFFcEMsZ0JBQWlCLElBQUdtQyxRQUFTLEVBQXREO0FBQ0g7O0FBQ0QsU0FBSyxNQUFNRSxLQUFYLElBQW9CTixPQUFPLENBQUMxTSxRQUE1QixFQUFzQyxLQUFLbUwsZ0JBQUwsQ0FBc0I2QixLQUF0QjtBQUN6Qzs7QUFFRC9CLGVBQWEsQ0FBQ3lCLE9BQUQsRUFBVTtBQUNuQixRQUFJLEVBQUVBLE9BQU8sWUFBWTdGLE9BQXJCLENBQUosRUFBbUM7QUFDbkMsUUFBSTZGLE9BQU8sQ0FBQzFNLFFBQVIsSUFBb0IwTSxPQUFPLENBQUMxTSxRQUFSLENBQWlCdEcsTUFBekMsRUFBaUQsS0FBS3VSLGFBQUwsQ0FBbUJ5QixPQUFPLENBQUMxTSxRQUFSLENBQWlCLENBQWpCLENBQW5CO0FBQ2pELFFBQUkwTSxPQUFPLENBQUNPLGtCQUFaLEVBQWdDLEtBQUtoQyxhQUFMLENBQW1CeUIsT0FBTyxDQUFDTyxrQkFBM0I7QUFDaEMsVUFBTU4sT0FBTyxHQUFHRCxPQUFPLENBQUM1TSxTQUF4QjtBQUNBLFVBQU1vTixRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJTixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxPQUFPLENBQUNqVCxNQUE1QixFQUFvQ2tULENBQUMsRUFBckMsRUFBeUM7QUFDckMsVUFBSUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBV2pCLFVBQVgsQ0FBdUIsR0FBRWhCLGdCQUFpQixHQUExQyxDQUFKLEVBQW1EdUMsUUFBUSxDQUFDaE4sSUFBVCxDQUFjeU0sT0FBTyxDQUFDQyxDQUFELENBQXJCO0FBQ3REOztBQUNERixXQUFPLENBQUM1TSxTQUFSLENBQWtCYyxNQUFsQixDQUF5QixHQUFHc00sUUFBNUI7QUFDSDs7QUFFRDlCLGlCQUFlLEdBQUc7QUFDZCxVQUFNK0IsUUFBUSxHQUFHQyxZQUFZLENBQUN4VixTQUFiLENBQXVCdVYsUUFBeEM7O0FBQ0FDLGdCQUFZLENBQUN4VixTQUFiLENBQXVCdVYsUUFBdkIsR0FBa0MsVUFBU0UsS0FBVCxFQUFnQjtBQUM5QztBQUNBLGFBQU92VixPQUFPLENBQUNDLEtBQVIsQ0FBY29WLFFBQWQsRUFBd0IsSUFBeEIsRUFBOEIsQ0FBQ0UsS0FBSyxDQUFDcE4sS0FBTixDQUFZLEdBQVosRUFBaUIsQ0FBakIsQ0FBRCxDQUE5QixDQUFQLENBRjhDLENBRzlDO0FBQ0gsS0FKRDs7QUFNQSxVQUFNOE0sR0FBRyxHQUFHSyxZQUFZLENBQUN4VixTQUFiLENBQXVCbVYsR0FBbkM7O0FBQ0FLLGdCQUFZLENBQUN4VixTQUFiLENBQXVCbVYsR0FBdkIsR0FBNkIsVUFBUyxHQUFHTyxNQUFaLEVBQW9CO0FBQzdDLFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsTUFBTSxDQUFDNVQsTUFBM0IsRUFBbUM2VCxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDRCxjQUFNLENBQUNDLENBQUQsQ0FBTixHQUFZRCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVdE4sS0FBVixDQUFnQixHQUFoQixFQUFxQixDQUFyQixDQUFaO0FBQ0g7O0FBQ0QsYUFBT25JLE9BQU8sQ0FBQ0MsS0FBUixDQUFjZ1YsR0FBZCxFQUFtQixJQUFuQixFQUF5Qk8sTUFBekIsQ0FBUDtBQUNILEtBTEQ7O0FBT0EsVUFBTTFNLE1BQU0sR0FBR3dNLFlBQVksQ0FBQ3hWLFNBQWIsQ0FBdUJnSixNQUF0Qzs7QUFDQXdNLGdCQUFZLENBQUN4VixTQUFiLENBQXVCZ0osTUFBdkIsR0FBZ0MsVUFBUyxHQUFHME0sTUFBWixFQUFvQjtBQUNoRCxXQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELE1BQU0sQ0FBQzVULE1BQTNCLEVBQW1DNlQsQ0FBQyxFQUFwQyxFQUF3QztBQUNwQ0QsY0FBTSxDQUFDQyxDQUFELENBQU4sR0FBWUQsTUFBTSxDQUFDQyxDQUFELENBQU4sQ0FBVXROLEtBQVYsQ0FBZ0IsR0FBaEIsRUFBcUIsQ0FBckIsQ0FBWjtBQUNIOztBQUNELGFBQU9uSSxPQUFPLENBQUNDLEtBQVIsQ0FBYzZJLE1BQWQsRUFBc0IsSUFBdEIsRUFBNEIwTSxNQUE1QixDQUFQO0FBQ0gsS0FMRDtBQU1IOztBQWxJb0MsQ0FBMUIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNMQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1FLFdBQU4sQ0FBa0I7QUFDakNDLG1CQUFpQixHQUFHO0FBQ2hCLFFBQUksS0FBS0MsaUJBQVQsRUFBNEI7QUFDNUIsUUFBSSxDQUFDdlgsMkNBQUksQ0FBQ3dYLGdCQUFWLEVBQTRCO0FBRTVCLFNBQUtELGlCQUFMLEdBQXlCNVgsOENBQUssQ0FBQ2lFLFdBQU4sQ0FBa0I1RCwyQ0FBSSxDQUFDd1gsZ0JBQXZCLEVBQXlDLFNBQXpDLEVBQW9EO0FBQUNDLFlBQU0sRUFBR3RVLElBQUQsSUFBVTtBQUM1RixjQUFNeUcsS0FBSyxHQUFHekcsSUFBSSxDQUFDdVUsZUFBTCxDQUFxQixDQUFyQixDQUFkO0FBQ0EsWUFBSSxDQUFDOU4sS0FBRCxJQUFVLENBQUNBLEtBQUssQ0FBQytOLHNCQUFyQixFQUE2QztBQUM3QyxjQUFNQyxjQUFjLEdBQUdoTyxLQUFLLENBQUMrTixzQkFBN0I7QUFFQSxZQUFJLENBQUNDLGNBQWMsQ0FBQ3RhLElBQWhCLElBQXdCLENBQUNzYSxjQUFjLENBQUN0YSxJQUFmLENBQW9CQSxJQUE3QyxJQUFxRHNhLGNBQWMsQ0FBQ3RhLElBQWYsQ0FBb0JBLElBQXBCLENBQXlCdWEsV0FBekIsSUFBd0MsZ0JBQWpHLEVBQW1IO0FBQ25ILGNBQU1DLFlBQVksR0FBR0YsY0FBYyxDQUFDdGEsSUFBZixDQUFvQkEsSUFBekM7QUFDQSxZQUFJd2EsWUFBWSxDQUFDQyxnQkFBakIsRUFBbUMsT0FQeUQsQ0FPakQ7O0FBQzNDSCxzQkFBYyxDQUFDdGEsSUFBZixDQUFvQkEsSUFBcEIsR0FBMkIsVUFBU3NNLEtBQVQsRUFBZ0I7QUFDdkMsZ0JBQU12RyxXQUFXLEdBQUd5VSxZQUFZLENBQUNsTyxLQUFELENBQWhDO0FBQ0EsZ0JBQU1vTyxTQUFTLEdBQUc3Wix3REFBYyxDQUFDLFVBQUQsQ0FBZCxHQUE2QnlMLEtBQUssQ0FBQ25FLE9BQU4sQ0FBY3dTLFdBQWQsSUFBNkIsRUFBMUQsR0FBK0QsRUFBakY7QUFDQTVVLHFCQUFXLENBQUN1RyxLQUFaLENBQWtCc0MsS0FBbEIsR0FBMEI7QUFBQ2dNLGlCQUFLLEVBQUVGO0FBQVIsV0FBMUI7QUFDQSxpQkFBTzNVLFdBQVA7QUFDSCxTQUxEOztBQU9BdVUsc0JBQWMsQ0FBQ3RhLElBQWYsQ0FBb0JBLElBQXBCLENBQXlCeWEsZ0JBQXpCLEdBQTRDRCxZQUE1QztBQUNBalosY0FBTSxDQUFDc1osTUFBUCxDQUFjUCxjQUFjLENBQUN0YSxJQUFmLENBQW9CQSxJQUFsQyxFQUF3Q3dhLFlBQXhDO0FBQ0g7QUFqQjRFLEtBQXBELENBQXpCO0FBa0JIOztBQUVETSxtQkFBaUIsR0FBRztBQUNoQixRQUFJQyxlQUFlLEdBQUdoVSxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dVLE1BQXJCLEVBQTZCLENBQTdCLEVBQWdDQSxNQUF0RDtBQUNBclgsWUFBUSxDQUFDc1gsZ0JBQVQsQ0FBMEIsTUFBSUYsZUFBZSxDQUFDdk8sS0FBaEIsQ0FBc0IsR0FBdEIsRUFBMkIsQ0FBM0IsQ0FBOUIsRUFBNkRHLE9BQTdELENBQXFFdU8sSUFBSSxJQUFJO0FBQ3pFQSxVQUFJLENBQUN0TSxLQUFMLENBQVd1TSxXQUFYLENBQXVCLE9BQXZCLEVBQWdDLEVBQWhDO0FBQ0gsS0FGRDtBQUdIOztBQTlCZ0MsQ0FBdEIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNKQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1DLElBQUksR0FBR3ZGLG1CQUFPLENBQUMsa0JBQUQsQ0FBcEI7O0FBQ0EsTUFBTXdGLEVBQUUsR0FBR3hGLG1CQUFPLENBQUMsY0FBRCxDQUFsQjs7QUFDQSxNQUFNeUYsTUFBTSxHQUFHekYsbUJBQU8sQ0FBQyxzQkFBRCxDQUFQLENBQWtCeUYsTUFBakM7O0FBQ0FBLE1BQU0sQ0FBQ0MsV0FBUCxDQUFtQjlPLElBQW5CLENBQXdCMk8sSUFBSSxDQUFDSSxPQUFMLENBQWFDLG9EQUFBLENBQXFCQyxRQUFyQixDQUE4Qix3QkFBOUIsQ0FBYixFQUFzRSxjQUF0RSxDQUF4Qjs7QUFDQSxNQUFNQyxTQUFOLFNBQXdCeFEsS0FBeEIsQ0FBOEI7QUFDMUI5SCxhQUFXLENBQUM4RSxPQUFELEVBQVU7QUFDakIsVUFBTUEsT0FBTjtBQUNBLFNBQUtxQixJQUFMLEdBQVksV0FBWjtBQUNIOztBQUp5Qjs7QUFNOUIsTUFBTW9TLGlCQUFpQixHQUFHTixNQUFNLENBQUNPLFdBQVAsQ0FBbUIsS0FBbkIsQ0FBMUI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBR1IsTUFBTSxDQUFDTyxXQUFQLENBQW1CLE1BQW5CLElBQTZCUCxNQUFNLENBQUNPLFdBQVAsQ0FBbUIsTUFBbkIsQ0FBN0IsR0FBMEQsTUFBTTtBQUFDLFNBQU8sSUFBUDtBQUFhLENBQXpHO0FBQ0EsTUFBTUUsVUFBVSxHQUFHLCtDQUFuQjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxNQUF2QjtBQUVPLElBQUlDLFVBQVUsR0FBRyxFQUFqQjtBQUVQLElBQUk1RSxVQUFVLEdBQUcsS0FBakI7QUFDZSxtRUFBSSxNQUFNclUsY0FBTixDQUFxQjtBQUVwQ0ssYUFBVyxHQUFHO0FBQ1YsU0FBSzZZLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0g7O0FBRURDLGlCQUFlLEdBQUU7QUFDYixRQUFHL0UsVUFBSCxFQUFjO0FBQ2RBLGNBQVUsR0FBRyxJQUFiO0FBQ0FpRSxVQUFNLENBQUNPLFdBQVAsQ0FBbUIsS0FBbkIsSUFBNEIsS0FBS1EsaUJBQUwsQ0FBdUIsUUFBdkIsQ0FBNUI7QUFDQWYsVUFBTSxDQUFDTyxXQUFQLENBQW1CLE1BQW5CLElBQTZCLEtBQUtRLGlCQUFMLENBQXVCLE9BQXZCLENBQTdCO0FBQ0g7O0FBRUQsTUFBSUMsYUFBSixHQUFvQjtBQUFDLFdBQU8sS0FBS0MsY0FBTCxLQUF3QixLQUFLQSxjQUFMLEdBQXNCbEIsRUFBRSxDQUFDbUIsWUFBSCxDQUFnQnBCLElBQUksQ0FBQ0ksT0FBTCxDQUFhbGEsa0RBQVEsQ0FBQ21iLFFBQVQsR0FBb0IsVUFBakMsQ0FBaEIsQ0FBOUMsQ0FBUDtBQUFxSDs7QUFDMUksTUFBSUMsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBS0MsYUFBTCxLQUF1QixLQUFLQSxhQUFMLEdBQXFCdEIsRUFBRSxDQUFDbUIsWUFBSCxDQUFnQnBCLElBQUksQ0FBQ0ksT0FBTCxDQUFhbGEsa0RBQVEsQ0FBQ21iLFFBQVQsR0FBb0IsU0FBakMsQ0FBaEIsQ0FBNUMsQ0FBUDtBQUFrSDs7QUFFdElHLHlCQUF1QixHQUFFO0FBQ3JCLFFBQUcsT0FBT0Msa0RBQVMsQ0FBQ0MsZUFBVixDQUEwQix1QkFBMUIsQ0FBUCxLQUE4RCxRQUFqRSxFQUEwRTtBQUN0RUQsd0RBQVMsQ0FBQ0UsZUFBVixDQUEwQix1QkFBMUIsRUFBbURDLDZFQUFvQixDQUFDLElBQUQsQ0FBdkU7QUFDSCxLQUZELE1BRUs7QUFDRCxVQUFHO0FBQ0NmLGtCQUFVLEdBQUdnQixJQUFJLENBQUNDLEtBQUwsQ0FBV0MsNkVBQW9CLENBQUNOLGtEQUFTLENBQUNDLGVBQVYsQ0FBMEIsdUJBQTFCLENBQUQsQ0FBL0IsQ0FBYjtBQUNILE9BRkQsQ0FFQyxPQUFNOVYsQ0FBTixFQUFRO0FBQ0w2ViwwREFBUyxDQUFDRSxlQUFWLENBQTBCLHVCQUExQixFQUFtREMsNkVBQW9CLENBQUMsSUFBRCxDQUF2RTtBQUNBZixrQkFBVSxHQUFHLEVBQWI7QUFDSDtBQUNKOztBQUNEMWEsVUFBTSxDQUFDaUIsSUFBUCxDQUFZeVosVUFBWixFQUNDdFAsT0FERCxDQUNTMUssR0FBRyxJQUFJO0FBQ1osVUFBSUMsS0FBSyxHQUFHK1osVUFBVSxDQUFDaGEsR0FBRCxDQUF0QjtBQUNBLFVBQUcsQ0FBQ0MsS0FBRCxJQUFVLE9BQU9BLEtBQVAsS0FBaUIsUUFBM0IsSUFBdUNpVyxLQUFLLENBQUNDLE9BQU4sQ0FBY2xXLEtBQWQsQ0FBMUMsRUFBK0QsT0FBTyxPQUFPK1osVUFBVSxDQUFDaGEsR0FBRCxDQUF4QjtBQUUvRCxVQUFJcUssS0FBSyxHQUFHLENBQUM7QUFDVHJLLFdBQUcsRUFBRSxXQURJO0FBRVRqQyxZQUFJLEVBQUU7QUFGRyxPQUFELEVBR1Q7QUFDQ2lDLFdBQUcsRUFBRSxRQUROO0FBRUNqQyxZQUFJLEVBQUU7QUFGUCxPQUhTLEVBTVQ7QUFDQ2lDLFdBQUcsRUFBRSxNQUROO0FBRUNqQyxZQUFJLEVBQUU7QUFGUCxPQU5TLENBQVo7O0FBVUEsV0FBSSxJQUFJMEUsSUFBUixJQUFnQjRILEtBQWhCLEVBQXNCO0FBQ2xCLFlBQUcsRUFBRTVILElBQUksQ0FBQ3pDLEdBQUwsSUFBWUMsS0FBZCxLQUF3QixPQUFPQSxLQUFLLENBQUN3QyxJQUFJLENBQUN6QyxHQUFOLENBQVosS0FBMkJ5QyxJQUFJLENBQUMxRSxJQUEzRCxFQUFnRTtBQUM1RCxpQkFBT2ljLFVBQVUsQ0FBQ2hhLEdBQUQsQ0FBakI7QUFDQTtBQUNIO0FBQ0o7O0FBQ0QsVUFBR0MsS0FBSyxDQUFDa2IsSUFBTixLQUFlbmIsR0FBbEIsRUFBc0I7QUFDbEIsZUFBT2dhLFVBQVUsQ0FBQ2hhLEdBQUQsQ0FBakI7QUFDQTtBQUNIOztBQUNELFVBQUdDLEtBQUssQ0FBQ21iLE1BQU4sQ0FBYUMsT0FBaEIsRUFBd0I7QUFBRTtBQUN0QixlQUFPckIsVUFBVSxDQUFDaGEsR0FBRCxDQUFqQjtBQUNBO0FBQ0g7QUFDSixLQTdCRDtBQThCQSxTQUFLc2IsY0FBTDtBQUNIOztBQUVEQSxnQkFBYyxHQUFFO0FBQ1pWLHNEQUFTLENBQUNFLGVBQVYsQ0FBMEIsdUJBQTFCLEVBQW1EQyw2RUFBb0IsQ0FBQ0MsSUFBSSxDQUFDTyxTQUFMLENBQWV2QixVQUFmLENBQUQsQ0FBdkU7QUFDSDs7QUFFRHdCLGNBQVksQ0FBQ0MsV0FBRCxFQUFjO0FBQ3RCLFFBQUksS0FBS3ZCLFFBQUwsQ0FBY3VCLFdBQWQsQ0FBSixFQUFnQztBQUNoQyxVQUFNQyxRQUFRLEdBQUdELFdBQVcsS0FBSyxRQUFqQztBQUNBLFVBQU1FLFVBQVUsR0FBR0QsUUFBUSxHQUFHLEtBQUtyQixhQUFSLEdBQXdCLEtBQUtJLFlBQXhEO0FBQ0EsVUFBTW1CLFVBQVUsR0FBR0YsUUFBUSxHQUFHLFlBQUgsR0FBa0IsWUFBN0M7QUFDQSxTQUFLeEIsUUFBTCxDQUFjdUIsV0FBZCxJQUE2QnJDLEVBQUUsQ0FBQ3lDLEtBQUgsQ0FBU0YsVUFBVCxFQUFxQjtBQUFDRyxnQkFBVSxFQUFFO0FBQWIsS0FBckIsRUFBMEMsT0FBT0MsU0FBUCxFQUFrQkMsUUFBbEIsS0FBK0I7QUFDbEcsVUFBSSxDQUFDRCxTQUFELElBQWMsQ0FBQ0MsUUFBZixJQUEyQixDQUFDQSxRQUFRLENBQUNoRyxRQUFULENBQWtCNEYsVUFBbEIsQ0FBaEMsRUFBK0Q7QUFDL0QsWUFBTSxJQUFJSyxPQUFKLENBQVlDLENBQUMsSUFBSUMsVUFBVSxDQUFDRCxDQUFELEVBQUksRUFBSixDQUEzQixDQUFOOztBQUNBLFVBQUk7QUFBQzlDLFVBQUUsQ0FBQ2dELFFBQUgsQ0FBWWpELElBQUksQ0FBQ0ksT0FBTCxDQUFhb0MsVUFBYixFQUF5QkssUUFBekIsQ0FBWjtBQUFpRCxPQUF0RCxDQUNBLE9BQU9LLEdBQVAsRUFBWTtBQUNSLFlBQUlBLEdBQUcsQ0FBQ0MsSUFBSixLQUFhLFFBQWpCLEVBQTJCO0FBQzNCLGVBQU8sS0FBS3JDLFNBQUwsQ0FBZStCLFFBQWYsQ0FBUDtBQUNBLFlBQUlOLFFBQUosRUFBYyxPQUFPaGIscURBQVksQ0FBQzZiLFlBQWIsQ0FBMEJQLFFBQTFCLENBQVA7QUFDZCxlQUFPcmIsb0RBQVcsQ0FBQzZiLFdBQVosQ0FBd0JSLFFBQXhCLENBQVA7QUFDSDs7QUFDRCxVQUFJLENBQUM1QyxFQUFFLENBQUNnRCxRQUFILENBQVlqRCxJQUFJLENBQUNJLE9BQUwsQ0FBYW9DLFVBQWIsRUFBeUJLLFFBQXpCLENBQVosRUFBZ0RTLE1BQWhELEVBQUwsRUFBK0Q7QUFDL0QsWUFBTUMsS0FBSyxHQUFHdEQsRUFBRSxDQUFDZ0QsUUFBSCxDQUFZakQsSUFBSSxDQUFDSSxPQUFMLENBQWFvQyxVQUFiLEVBQXlCSyxRQUF6QixDQUFaLENBQWQ7QUFDQSxVQUFJLENBQUNVLEtBQUQsSUFBVSxDQUFDQSxLQUFLLENBQUNDLEtBQWpCLElBQTBCLENBQUNELEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxPQUFaLEVBQS9CLEVBQXNEO0FBQ3RELFVBQUksT0FBT0YsS0FBSyxDQUFDQyxLQUFOLENBQVlDLE9BQVosRUFBUCxLQUFrQyxRQUF0QyxFQUFnRDtBQUNoRCxVQUFJLEtBQUszQyxTQUFMLENBQWUrQixRQUFmLEtBQTRCVSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsT0FBWixFQUFoQyxFQUF1RDtBQUN2RCxXQUFLM0MsU0FBTCxDQUFlK0IsUUFBZixJQUEyQlUsS0FBSyxDQUFDQyxLQUFOLENBQVlDLE9BQVosRUFBM0I7O0FBQ0EsVUFBSWIsU0FBUyxJQUFJLFFBQWpCLEVBQTJCO0FBQ3ZCLFlBQUlMLFFBQUosRUFBYyxNQUFNaGIscURBQVksQ0FBQ21jLFVBQWIsQ0FBd0JiLFFBQXhCLENBQU4sQ0FBZCxLQUNLLE1BQU1yYixvREFBVyxDQUFDbWMsU0FBWixDQUFzQmQsUUFBdEIsQ0FBTjtBQUNSOztBQUNELFVBQUlELFNBQVMsSUFBSSxRQUFqQixFQUEyQjtBQUN2QixZQUFJTCxRQUFKLEVBQWMsTUFBTWhiLHFEQUFZLENBQUNxYyxZQUFiLENBQTBCZixRQUExQixDQUFOLENBQWQsS0FDSyxNQUFNcmIsb0RBQVcsQ0FBQ3FjLFdBQVosQ0FBd0JoQixRQUF4QixDQUFOO0FBQ1I7QUFDSixLQXhCNEIsQ0FBN0I7QUF5Qkg7O0FBRURpQixnQkFBYyxDQUFDeEIsV0FBRCxFQUFjO0FBQ3hCLFFBQUksQ0FBQyxLQUFLdkIsUUFBTCxDQUFjdUIsV0FBZCxDQUFMLEVBQWlDO0FBQ2pDLFNBQUt2QixRQUFMLENBQWN1QixXQUFkLEVBQTJCeUIsS0FBM0I7QUFDQSxXQUFPLEtBQUtoRCxRQUFMLENBQWN1QixXQUFkLENBQVA7QUFDSDs7QUFFRDBCLGFBQVcsQ0FBQ3JXLE9BQUQsRUFBVTtBQUNqQixVQUFNc1csU0FBUyxHQUFHdFcsT0FBTyxDQUFDeUQsS0FBUixDQUFjLElBQWQsRUFBb0IsQ0FBcEIsQ0FBbEI7QUFDQSxVQUFNOFMsVUFBVSxHQUFHRCxTQUFTLENBQUMvWixRQUFWLENBQW1CLFFBQW5CLENBQW5CO0FBQ0EsUUFBSWdhLFVBQUosRUFBZ0IsT0FBTyxLQUFLQyxZQUFMLENBQWtCeFcsT0FBbEIsQ0FBUDtBQUNoQixVQUFNeVcsVUFBVSxHQUFHSCxTQUFTLENBQUMvWixRQUFWLENBQW1CLEtBQW5CLENBQW5CO0FBQ0EsUUFBSWthLFVBQUosRUFBZ0IsT0FBTyxLQUFLQyxZQUFMLENBQWtCMVcsT0FBbEIsQ0FBUDtBQUNoQixVQUFNLElBQUk0UyxTQUFKLENBQWMscUJBQWQsQ0FBTjtBQUNIOztBQUVENEQsY0FBWSxDQUFDeFcsT0FBRCxFQUFVO0FBQ2xCLFVBQU0yVyxJQUFJLEdBQUczVyxPQUFPLENBQUN5RCxLQUFSLENBQWMsSUFBZCxFQUFvQixDQUFwQixDQUFiO0FBQ0EsVUFBTW1ULE9BQU8sR0FBR0QsSUFBSSxDQUFDRSxTQUFMLENBQWVGLElBQUksQ0FBQ0csV0FBTCxDQUFpQixRQUFqQixJQUE2QixDQUE1QyxFQUErQ0gsSUFBSSxDQUFDRyxXQUFMLENBQWlCLEtBQWpCLENBQS9DLENBQWhCO0FBQ0EsUUFBSUgsSUFBSSxDQUFDSSxPQUFMLENBQWEsTUFBYixJQUF1QixDQUEzQixFQUE4QixNQUFNLElBQUluRSxTQUFKLENBQWMscUJBQWQsQ0FBTjtBQUM5QixVQUFNb0UsTUFBTSxHQUFHMWQsOENBQUssQ0FBQytSLFFBQU4sQ0FBZXVMLE9BQWYsQ0FBZjtBQUNBLFFBQUksQ0FBQ0ksTUFBTCxFQUFhLE1BQU0sSUFBSXBFLFNBQUosQ0FBYywyQkFBZCxDQUFOO0FBQ2IsUUFBSSxDQUFDb0UsTUFBTSxDQUFDdlcsSUFBWixFQUFrQixNQUFNLElBQUltUyxTQUFKLENBQWMseUJBQWQsQ0FBTjtBQUNsQm9FLFVBQU0sQ0FBQ0MsTUFBUCxHQUFnQixNQUFoQjtBQUNBLFdBQU9ELE1BQVA7QUFDSDs7QUFFRE4sY0FBWSxDQUFDMVcsT0FBRCxFQUFVO0FBQ2xCLFVBQU1rWCxLQUFLLEdBQUdsWCxPQUFPLENBQUN5RCxLQUFSLENBQWMsS0FBZCxFQUFxQixDQUFyQixFQUF3QixDQUF4QixFQUEyQkEsS0FBM0IsQ0FBaUMsSUFBakMsRUFBdUMsQ0FBdkMsRUFBMEMsQ0FBMUMsQ0FBZDtBQUNBLFVBQU0wVCxHQUFHLEdBQUcsRUFBWjtBQUNBLFFBQUlDLEtBQUssR0FBRyxFQUFaO0FBQ0EsUUFBSUMsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsU0FBSyxNQUFNQyxJQUFYLElBQW1CSixLQUFLLENBQUN6VCxLQUFOLENBQVl1UCxVQUFaLENBQW5CLEVBQTRDO0FBQ3hDLFVBQUlzRSxJQUFJLENBQUNwYSxNQUFMLEtBQWdCLENBQXBCLEVBQXVCOztBQUN2QixVQUFJb2EsSUFBSSxDQUFDQyxNQUFMLENBQVksQ0FBWixNQUFtQixHQUFuQixJQUEwQkQsSUFBSSxDQUFDQyxNQUFMLENBQVksQ0FBWixNQUFtQixHQUFqRCxFQUFzRDtBQUNsREosV0FBRyxDQUFDQyxLQUFELENBQUgsR0FBYUMsS0FBYjtBQUNBLGNBQU1HLENBQUMsR0FBR0YsSUFBSSxDQUFDUCxPQUFMLENBQWEsR0FBYixDQUFWO0FBQ0FLLGFBQUssR0FBR0UsSUFBSSxDQUFDRyxNQUFMLENBQVksQ0FBWixFQUFlRCxDQUFDLEdBQUcsQ0FBbkIsQ0FBUjtBQUNBSCxhQUFLLEdBQUdDLElBQUksQ0FBQ0csTUFBTCxDQUFZRCxDQUFDLEdBQUcsQ0FBaEIsQ0FBUjtBQUNILE9BTEQsTUFNSztBQUNESCxhQUFLLElBQUksTUFBTUMsSUFBSSxDQUFDbmEsT0FBTCxDQUFhLEtBQWIsRUFBb0IsSUFBcEIsRUFBMEJBLE9BQTFCLENBQWtDOFYsY0FBbEMsRUFBa0QsR0FBbEQsQ0FBZjtBQUNIO0FBQ0o7O0FBQ0RrRSxPQUFHLENBQUNDLEtBQUQsQ0FBSCxHQUFhQyxLQUFLLENBQUNwSCxJQUFOLEVBQWI7QUFDQSxXQUFPa0gsR0FBRyxDQUFDLEVBQUQsQ0FBVjtBQUNBQSxPQUFHLENBQUNGLE1BQUosR0FBYSxPQUFiO0FBQ0EsV0FBT0UsR0FBUDtBQUNIOztBQUVEN0QsbUJBQWlCLENBQUNyYyxJQUFELEVBQU87QUFDcEIsVUFBTTJkLFFBQVEsR0FBRzNkLElBQUksS0FBSyxRQUExQjtBQUNBLFVBQU15Z0IsSUFBSSxHQUFHLElBQWI7QUFDQSxVQUFNQyxlQUFlLEdBQUcvQyxRQUFRLEdBQUcvQixpQkFBSCxHQUF1QkUsa0JBQXZEO0FBQ0EsV0FBTyxVQUFTbEUsTUFBVCxFQUFpQnFHLFFBQWpCLEVBQTJCO0FBQzlCLFlBQU1MLFVBQVUsR0FBR0QsUUFBUSxHQUFHOEMsSUFBSSxDQUFDbkUsYUFBUixHQUF3Qm1FLElBQUksQ0FBQy9ELFlBQXhEO0FBQ0EsWUFBTWlFLFlBQVksR0FBR3ZGLElBQUksQ0FBQ0ksT0FBTCxDQUFhb0MsVUFBYixFQUF5QnhDLElBQUksQ0FBQ3dGLFFBQUwsQ0FBYzNDLFFBQWQsQ0FBekIsQ0FBckI7QUFDQSxVQUFJLENBQUM1QyxFQUFFLENBQUN3RixVQUFILENBQWNGLFlBQWQsQ0FBRCxJQUFnQzFDLFFBQVEsS0FBSzVDLEVBQUUsQ0FBQ21CLFlBQUgsQ0FBZ0JtRSxZQUFoQixDQUFqRCxFQUFnRixPQUFPdGMsT0FBTyxDQUFDQyxLQUFSLENBQWNvYyxlQUFkLEVBQStCLElBQS9CLEVBQXFDbmMsU0FBckMsQ0FBUDtBQUNoRixVQUFJd0UsT0FBTyxHQUFHc1MsRUFBRSxDQUFDeUYsWUFBSCxDQUFnQjdDLFFBQWhCLEVBQTBCLE1BQTFCLENBQWQ7QUFDQWxWLGFBQU8sR0FBRzFHLDhDQUFLLENBQUMwZSxRQUFOLENBQWVoWSxPQUFmLENBQVY7QUFFQSxZQUFNNFYsS0FBSyxHQUFHdEQsRUFBRSxDQUFDZ0QsUUFBSCxDQUFZSixRQUFaLENBQWQ7QUFDQSxZQUFNeUIsSUFBSSxHQUFHZSxJQUFJLENBQUNyQixXQUFMLENBQWlCclcsT0FBakIsQ0FBYjtBQUNBMlcsVUFBSSxDQUFDekIsUUFBTCxHQUFnQjdDLElBQUksQ0FBQ3dGLFFBQUwsQ0FBYzNDLFFBQWQsQ0FBaEI7QUFDQXlCLFVBQUksQ0FBQ3NCLEtBQUwsR0FBYXJDLEtBQUssQ0FBQ3NDLE9BQW5CO0FBQ0F2QixVQUFJLENBQUN3QixRQUFMLEdBQWdCdkMsS0FBSyxDQUFDd0MsT0FBdEI7QUFDQXpCLFVBQUksQ0FBQzBCLElBQUwsR0FBWXpDLEtBQUssQ0FBQ3lDLElBQWxCOztBQUNBLFVBQUksQ0FBQ3pELFFBQUwsRUFBZTtBQUNYK0IsWUFBSSxDQUFDeFEsR0FBTCxHQUFXbkcsT0FBWDtBQUNBLFlBQUkyVyxJQUFJLENBQUNNLE1BQUwsSUFBZSxNQUFuQixFQUEyQk4sSUFBSSxDQUFDeFEsR0FBTCxHQUFXd1EsSUFBSSxDQUFDeFEsR0FBTCxDQUFTMUMsS0FBVCxDQUFlLElBQWYsRUFBcUJzTSxLQUFyQixDQUEyQixDQUEzQixFQUE4QnBNLElBQTlCLENBQW1DLElBQW5DLENBQVg7QUFDM0IzRCxlQUFPLEdBQUksb0JBQW1Ca1UsSUFBSSxDQUFDTyxTQUFMLENBQWVrQyxJQUFmLENBQXFCLEdBQW5EO0FBQ0g7O0FBQ0QsVUFBSS9CLFFBQUosRUFBYztBQUNWL0YsY0FBTSxDQUFDeUosUUFBUCxDQUFnQnRZLE9BQWhCLEVBQXlCNk8sTUFBTSxDQUFDcUcsUUFBaEM7O0FBQ0EsY0FBTXFELFNBQVMsR0FBRyxDQUFDamYsOENBQUssQ0FBQ2tmLE9BQU4sQ0FBYzNKLE1BQU0sQ0FBQzRKLE9BQXJCLENBQW5COztBQUNBLFlBQUlGLFNBQUosRUFBZTtBQUNYNUIsY0FBSSxDQUFDMWYsSUFBTCxHQUFZNFgsTUFBTSxDQUFDNEosT0FBbkI7QUFDQTVKLGdCQUFNLENBQUM0SixPQUFQLEdBQWlCOUIsSUFBakI7QUFDQTNXLGlCQUFPLEdBQUcsRUFBVjtBQUNILFNBSkQsTUFLSztBQUNEMUcsd0RBQUssQ0FBQ0MsSUFBTixDQUFXLHFCQUFYLEVBQW1DLEdBQUVvZCxJQUFJLENBQUNsVyxJQUFLLHVDQUEvQztBQUNBVCxpQkFBTyxJQUFLLHNCQUFxQmtVLElBQUksQ0FBQ08sU0FBTCxDQUFla0MsSUFBZixDQUFxQiw0QkFBMkJBLElBQUksQ0FBQzhCLE9BQUwsSUFBZ0I5QixJQUFJLENBQUNsVyxJQUFLLEdBQTNHO0FBQ0g7QUFDSjs7QUFDRG9PLFlBQU0sQ0FBQ3lKLFFBQVAsQ0FBZ0J0WSxPQUFoQixFQUF5QmtWLFFBQXpCO0FBQ0gsS0FoQ0Q7QUFpQ0g7O0FBRUR3RCx1QkFBcUIsQ0FBQzViLElBQUQsRUFBTztBQUN4QixXQUFPO0FBQUNtTSxZQUFNLEVBQUU7QUFDUjFILGFBQUssRUFBRSxNQUFNLENBQUUsQ0FEUDtBQUVSb1gsZUFBTyxFQUFFLE1BQU07QUFBQyxpQkFBTzdiLElBQUksQ0FBQzJELElBQUwsSUFBYTNELElBQUksQ0FBQ29ZLFFBQXpCO0FBQW1DLFNBRjNDO0FBR1IwRCxpQkFBUyxFQUFFLE1BQU07QUFBQyxpQkFBTyxLQUFQO0FBQWMsU0FIeEI7QUFJUkMsc0JBQWMsRUFBRSxNQUFNO0FBQUMsaUJBQU8vYixJQUFJLENBQUNzQyxPQUFMLEdBQWV0QyxJQUFJLENBQUNzQyxPQUFwQixHQUE4QiwyRUFBckM7QUFBa0gsU0FKakk7QUFLUjFJLGtCQUFVLEVBQUUsTUFBTTtBQUFDLGlCQUFPLEtBQVA7QUFBYztBQUx6QixPQUFUO0FBT0grSixVQUFJLEVBQUUzRCxJQUFJLENBQUMyRCxJQUFMLElBQWEzRCxJQUFJLENBQUNvWSxRQVByQjtBQVFIQSxjQUFRLEVBQUVwWSxJQUFJLENBQUNvWSxRQVJaO0FBU0g0RCxZQUFNLEVBQUVoYyxJQUFJLENBQUNnYyxNQUFMLEdBQWNoYyxJQUFJLENBQUNnYyxNQUFuQixHQUE0QixFQVRqQztBQVVIQyxhQUFPLEVBQUVqYyxJQUFJLENBQUNpYyxPQUFMLEdBQWVqYyxJQUFJLENBQUNpYyxPQUFwQixHQUE4QjtBQVZwQyxLQUFQO0FBWUg7O0FBRUQsUUFBTUMsV0FBTixDQUFrQjlELFFBQWxCLEVBQTRCamUsSUFBNUIsRUFBa0M7QUFDOUIsUUFBSSxPQUFPaWUsUUFBUCxLQUFxQixXQUFyQixJQUFvQyxPQUFPamUsSUFBUCxLQUFpQixXQUF6RCxFQUFzRTtBQUN0RSxVQUFNMmQsUUFBUSxHQUFHM2QsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTRkLFVBQVUsR0FBR0QsUUFBUSxHQUFHLEtBQUtyQixhQUFSLEdBQXdCLEtBQUtJLFlBQXhEOztBQUVBLFFBQUc3Yix3REFBYyxDQUFDLFdBQUQsQ0FBakIsRUFBK0I7QUFDM0IsVUFBSXdjLE1BQU0sR0FBRyxNQUFNLElBQUlhLE9BQUosQ0FBWTFDLE9BQU8sSUFBSTtBQUN0Q3dHLDRFQUFXLENBQUM1RyxJQUFJLENBQUNJLE9BQUwsQ0FBYW9DLFVBQWIsRUFBeUJLLFFBQXpCLENBQUQsRUFBc0NaLE1BQUQsSUFBWTtBQUN4RHhTLGlCQUFPLENBQUNDLEdBQVIsQ0FBWXVTLE1BQVo7QUFDQTdCLGlCQUFPLENBQUM2QixNQUFELENBQVA7QUFDSCxTQUhVLEVBR1BELElBQUQsSUFBVTtBQUNUNUIsaUJBQU8sQ0FBQztBQUNKOEIsbUJBQU8sRUFBRSxLQURMO0FBRUpGLGdCQUFJLEVBQUVBLElBRkY7QUFHSmEsb0JBQVEsRUFBRUEsUUFITjtBQUlKelUsZ0JBQUksRUFBRXlVO0FBSkYsV0FBRCxDQUFQO0FBTUgsU0FWVSxFQVVSLElBVlEsQ0FBWDtBQVdILE9BWmtCLENBQW5COztBQWFBLFVBQUdaLE1BQUgsRUFBVTtBQUNOcEIsa0JBQVUsQ0FBQ29CLE1BQU0sQ0FBQ0QsSUFBUixDQUFWLEdBQTBCO0FBQ3RCNkUsbUJBQVMsRUFBRWpoQixJQUFJLENBQUNDLEdBQUwsRUFEVztBQUV0Qm1jLGNBQUksRUFBRUMsTUFBTSxDQUFDRCxJQUZTO0FBR3RCQyxnQkFBTSxFQUFFQTtBQUhjLFNBQTFCO0FBS0EsYUFBS0UsY0FBTDs7QUFDQSxZQUFHRixNQUFNLENBQUNDLE9BQVYsRUFBa0I7QUFDZCxpQkFBTztBQUNIOVQsZ0JBQUksRUFBRXlVLFFBREg7QUFFSGlFLGdCQUFJLEVBQUVqRSxRQUZIO0FBR0g5VixtQkFBTyxFQUFFLHFDQUFtQ2tWLE1BQU0sQ0FBQzhFLElBQTFDLEdBQStDLElBSHJEO0FBSUhuTCxpQkFBSyxFQUFFLElBQUk3TCxLQUFKLENBQVUscUNBQW1Da1MsTUFBTSxDQUFDOEUsSUFBMUMsR0FBK0MsSUFBekQ7QUFKSixXQUFQO0FBTUg7QUFDSjtBQUNKOztBQUVELFFBQUk7QUFBQ0MsYUFBdUIsQ0FBQ2hILElBQUksQ0FBQ0ksT0FBTCxDQUFhb0MsVUFBYixFQUF5QkssUUFBekIsQ0FBRCxDQUF2QjtBQUE2RCxLQUFsRSxDQUNBLE9BQU9qSCxLQUFQLEVBQWM7QUFBQyxhQUFPO0FBQUN4TixZQUFJLEVBQUV5VSxRQUFQO0FBQWlCaUUsWUFBSSxFQUFFakUsUUFBdkI7QUFBaUM5VixlQUFPLEVBQUUsd0JBQTFDO0FBQW9FNk8sYUFBSyxFQUFFO0FBQUM3TyxpQkFBTyxFQUFFNk8sS0FBSyxDQUFDN08sT0FBaEI7QUFBeUJrYSxlQUFLLEVBQUVyTCxLQUFLLENBQUNxTDtBQUF0QztBQUEzRSxPQUFQO0FBQWlJOztBQUNoSixVQUFNdFosT0FBTyxHQUFHcVosT0FBdUIsQ0FBQ2hILElBQUksQ0FBQ0ksT0FBTCxDQUFhb0MsVUFBYixFQUF5QkssUUFBekIsQ0FBRCxDQUF2Qzs7QUFDQSxRQUFHLENBQUNsVixPQUFPLENBQUNTLElBQVosRUFBaUIsT0FBTztBQUFDQSxVQUFJLEVBQUV5VSxRQUFQO0FBQWlCaUUsVUFBSSxFQUFFakUsUUFBdkI7QUFBaUM5VixhQUFPLEVBQUUsdUJBQTFDO0FBQW1FNk8sV0FBSyxFQUFFLElBQUk3TCxLQUFKLENBQVUsNkNBQVY7QUFBMUUsS0FBUDtBQUNqQnBDLFdBQU8sQ0FBQzVJLEVBQVIsR0FBYWtDLDhDQUFLLENBQUNrUCxRQUFOLENBQWV4SSxPQUFPLENBQUNTLElBQXZCLENBQWIsQ0F6QzhCLENBMEM5Qjs7QUFDQSxRQUFJbVUsUUFBSixFQUFjO0FBQ1YsVUFBSSxDQUFDNVUsT0FBTyxDQUFDL0ksSUFBYixFQUFtQjs7QUFDbkIsVUFBSTtBQUNBK0ksZUFBTyxDQUFDaUosTUFBUixHQUFpQixJQUFJakosT0FBTyxDQUFDL0ksSUFBWixFQUFqQjtBQUNBLGVBQU8yQixtREFBUyxDQUFDb0gsT0FBTyxDQUFDaUosTUFBUixDQUFlMFAsT0FBZixFQUFELENBQWhCO0FBQ0EvZiwyREFBUyxDQUFDb0gsT0FBTyxDQUFDaUosTUFBUixDQUFlMFAsT0FBZixFQUFELENBQVQsR0FBc0MzWSxPQUF0QztBQUNILE9BSkQsQ0FLQSxPQUFPaU8sS0FBUCxFQUFjO0FBQUMsZUFBTztBQUFDeE4sY0FBSSxFQUFFeVUsUUFBUDtBQUFpQmlFLGNBQUksRUFBRWpFLFFBQXZCO0FBQWlDOVYsaUJBQU8sRUFBRSwyQkFBMUM7QUFBdUU2TyxlQUFLLEVBQUU7QUFBQzdPLG1CQUFPLEVBQUU2TyxLQUFLLENBQUM3TyxPQUFoQjtBQUF5QmthLGlCQUFLLEVBQUVyTCxLQUFLLENBQUNxTDtBQUF0QztBQUE5RSxTQUFQO0FBQW9JO0FBQ3RKLEtBUkQsTUFTSztBQUNELGFBQU8zZ0Isa0RBQVEsQ0FBQ3FILE9BQU8sQ0FBQ1MsSUFBVCxDQUFmO0FBQ0E5SCx3REFBUSxDQUFDcUgsT0FBTyxDQUFDUyxJQUFULENBQVIsR0FBeUJULE9BQXpCO0FBQ0g7QUFDSjs7QUFFRHVaLGVBQWEsQ0FBQ3JFLFFBQUQsRUFBV2plLElBQVgsRUFBaUI7QUFDMUIsUUFBSSxPQUFPaWUsUUFBUCxLQUFxQixXQUFyQixJQUFvQyxPQUFPamUsSUFBUCxLQUFpQixXQUF6RCxFQUFzRTtBQUN0RSxVQUFNMmQsUUFBUSxHQUFHM2QsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTRkLFVBQVUsR0FBR0QsUUFBUSxHQUFHLEtBQUtyQixhQUFSLEdBQXdCLEtBQUtJLFlBQXhEOztBQUNBLFFBQUk7QUFDQSxhQUFPMEYsT0FBdUIsQ0FBQ0csS0FBeEIsQ0FBOEJILE9BQXVCLENBQUM1RyxPQUF4QixDQUFnQ0osSUFBSSxDQUFDSSxPQUFMLENBQWFvQyxVQUFiLEVBQXlCSyxRQUF6QixDQUFoQyxDQUE5QixDQUFQO0FBQ0gsS0FGRCxDQUdBLE9BQU9LLEdBQVAsRUFBWTtBQUFDLGFBQU87QUFBQzlVLFlBQUksRUFBRXlVLFFBQVA7QUFBaUJpRSxZQUFJLEVBQUVqRSxRQUF2QjtBQUFpQzlWLGVBQU8sRUFBRSx3QkFBMUM7QUFBb0U2TyxhQUFLLEVBQUU7QUFBQzdPLGlCQUFPLEVBQUVtVyxHQUFHLENBQUNuVyxPQUFkO0FBQXVCa2EsZUFBSyxFQUFFL0QsR0FBRyxDQUFDK0Q7QUFBbEM7QUFBM0UsT0FBUDtBQUE2SDtBQUM3STs7QUFFREcsVUFBUSxDQUFDdkUsUUFBRCxFQUFXamUsSUFBWCxFQUFpQjtBQUNyQixVQUFNMmQsUUFBUSxHQUFHM2QsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTRkLFVBQVUsR0FBR0QsUUFBUSxHQUFHLEtBQUtyQixhQUFSLEdBQXdCLEtBQUtJLFlBQXhEOztBQUNBLFFBQUk7QUFBQzBGLGFBQXVCLENBQUNHLEtBQXhCLENBQThCSCxPQUF1QixDQUFDNUcsT0FBeEIsQ0FBZ0NKLElBQUksQ0FBQ0ksT0FBTCxDQUFhb0MsVUFBYixFQUF5QkssUUFBekIsQ0FBaEMsQ0FBOUI7QUFBb0csS0FBekcsQ0FDQSxPQUFPSyxHQUFQLEVBQVk7QUFBQyxhQUFPLEtBQVA7QUFBYzs7QUFDM0IsV0FBTyxJQUFQO0FBQ0g7O0FBRUQsUUFBTW1FLGFBQU4sQ0FBb0J4RSxRQUFwQixFQUE4QmplLElBQTlCLEVBQW9DO0FBQ2hDLFVBQU0waUIsVUFBVSxHQUFHLEtBQUtKLGFBQUwsQ0FBbUJyRSxRQUFuQixFQUE2QmplLElBQTdCLENBQW5CO0FBQ0EsUUFBSTBpQixVQUFKLEVBQWdCLE9BQU9BLFVBQVA7QUFDaEIsV0FBTyxNQUFNLEtBQUtYLFdBQUwsQ0FBaUI5RCxRQUFqQixFQUEyQmplLElBQTNCLENBQWI7QUFDSDs7QUFFRDJpQixnQkFBYyxDQUFDM2lCLElBQUQsRUFBTztBQUNqQixVQUFNMmQsUUFBUSxHQUFHM2QsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTZkLFVBQVUsR0FBR0YsUUFBUSxHQUFHLFlBQUgsR0FBa0IsWUFBN0M7QUFDQSxVQUFNaUYsT0FBTyxHQUFHakYsUUFBUSxHQUFHLEtBQUtyQixhQUFSLEdBQXdCLEtBQUtJLFlBQXJEO0FBQ0EsVUFBTW1HLEtBQUssR0FBR3hILEVBQUUsQ0FBQ3lILFdBQUgsQ0FBZUYsT0FBZixDQUFkO0FBQ0EsVUFBTUcsV0FBVyxHQUFHeGhCLE1BQU0sQ0FBQ3loQixNQUFQLENBQWNyRixRQUFRLEdBQUdoYyxtREFBSCxHQUFlRCxrREFBckMsQ0FBcEI7QUFDQSxVQUFNdWhCLE9BQU8sR0FBR0YsV0FBVyxDQUFDOVMsTUFBWixDQUFtQjZKLENBQUMsSUFBSSxDQUFDK0ksS0FBSyxDQUFDdmQsUUFBTixDQUFld1UsQ0FBQyxDQUFDbUUsUUFBakIsQ0FBekIsRUFBcUQ5VSxHQUFyRCxDQUF5RGdRLENBQUMsSUFBSXdFLFFBQVEsR0FBR3hFLENBQUMsQ0FBQ25ILE1BQUYsQ0FBUzBQLE9BQVQsRUFBSCxHQUF3QnZJLENBQUMsQ0FBQzNQLElBQWhHLENBQWhCO0FBQ0EsVUFBTXdYLEtBQUssR0FBRzZCLEtBQUssQ0FBQzVTLE1BQU4sQ0FBYWlULENBQUMsSUFBSSxDQUFDSCxXQUFXLENBQUNqWCxJQUFaLENBQWlCZ08sQ0FBQyxJQUFJQSxDQUFDLENBQUNtRSxRQUFGLElBQWNpRixDQUFwQyxDQUFELElBQTJDQSxDQUFDLENBQUNqTCxRQUFGLENBQVc0RixVQUFYLENBQTNDLElBQXFFeEMsRUFBRSxDQUFDZ0QsUUFBSCxDQUFZakQsSUFBSSxDQUFDSSxPQUFMLENBQWFvSCxPQUFiLEVBQXNCTSxDQUF0QixDQUFaLEVBQXNDeEUsTUFBdEMsRUFBdkYsQ0FBZDtBQUNBLFdBQU87QUFBQ3NDLFdBQUQ7QUFBUWlDO0FBQVIsS0FBUDtBQUNIOztBQUVELFFBQU1FLGNBQU4sQ0FBcUJuakIsSUFBckIsRUFBMkI7QUFDdkIsU0FBS29jLGVBQUw7QUFDQSxVQUFNdUIsUUFBUSxHQUFHM2QsSUFBSSxLQUFLLFFBQTFCO0FBQ0EsVUFBTTZkLFVBQVUsR0FBR0YsUUFBUSxHQUFHLFlBQUgsR0FBa0IsWUFBN0M7QUFDQSxVQUFNaUYsT0FBTyxHQUFHakYsUUFBUSxHQUFHLEtBQUtyQixhQUFSLEdBQXdCLEtBQUtJLFlBQXJEO0FBQ0EsVUFBTTBHLE1BQU0sR0FBRyxFQUFmO0FBQ0EsVUFBTVAsS0FBSyxHQUFHeEgsRUFBRSxDQUFDeUgsV0FBSCxDQUFlRixPQUFmLENBQWQ7O0FBRUEsU0FBSyxNQUFNM0UsUUFBWCxJQUF1QjRFLEtBQXZCLEVBQThCO0FBQzFCLFVBQUksQ0FBQ3hILEVBQUUsQ0FBQ2dELFFBQUgsQ0FBWWpELElBQUksQ0FBQ0ksT0FBTCxDQUFhb0gsT0FBYixFQUFzQjNFLFFBQXRCLENBQVosRUFBNkNTLE1BQTdDLEVBQUQsSUFBMEQsQ0FBQ1QsUUFBUSxDQUFDaEcsUUFBVCxDQUFrQjRGLFVBQWxCLENBQS9ELEVBQThGO0FBQzlGLFlBQU03RyxLQUFLLEdBQUcsTUFBTSxLQUFLK0ssV0FBTCxDQUFpQjlELFFBQWpCLEVBQTJCamUsSUFBM0IsQ0FBcEI7QUFDQSxVQUFJZ1gsS0FBSixFQUFXb00sTUFBTSxDQUFDM1csSUFBUCxDQUFZdUssS0FBWjtBQUNkOztBQUVELFdBQU9vTSxNQUFQO0FBQ0g7O0FBRURDLGFBQVcsR0FBRztBQUFDLFdBQU8sS0FBS0YsY0FBTCxDQUFvQixRQUFwQixDQUFQO0FBQXNDOztBQUNyREcsWUFBVSxHQUFHO0FBQUMsV0FBTyxLQUFLSCxjQUFMLENBQW9CLE9BQXBCLENBQVA7QUFBcUM7O0FBdlRmLENBQXpCLEVBQWY7QUEwVEE7Ozs7Ozs7Ozs7Ozs7O0FDcFZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSTdmLE9BQUo7O0FBQ0EsU0FBU0gsSUFBVCxHQUFnQixDQUFFOztBQUdsQkEsSUFBSSxDQUFDZ0IsU0FBTCxDQUFlWixTQUFmLEdBQTJCLFVBQVNnZ0IsTUFBVCxFQUFpQjtBQUN4QyxNQUFJLEtBQUtDLFVBQVQsRUFBcUI7QUFDckJqaUIsUUFBTSxDQUFDc1osTUFBUCxDQUFjdlosa0RBQWQsRUFBd0JpaUIsTUFBeEI7QUFDSCxDQUhEOztBQUtBaGlCLE1BQU0sQ0FBQ1ksY0FBUCxDQUFzQmdCLElBQUksQ0FBQ2dCLFNBQTNCLEVBQXNDLFNBQXRDLEVBQWlEO0FBQzdDL0IsS0FBRyxHQUFFO0FBQ0QsV0FBT2tCLE9BQVA7QUFDSDs7QUFINEMsQ0FBakQ7O0FBTUFILElBQUksQ0FBQ2dCLFNBQUwsQ0FBZVgsVUFBZixHQUE0QixVQUFTaUcsQ0FBVCxFQUFZO0FBQ3BDLE1BQUksS0FBSytaLFVBQVQsRUFBcUI7QUFDckJsZ0IsU0FBTyxHQUFHbUcsQ0FBVjtBQUNILENBSEQ7O0FBS0F0RyxJQUFJLENBQUNnQixTQUFMLENBQWVWLElBQWYsR0FBc0Isa0JBQWlCO0FBQ25DLE1BQUksS0FBSytmLFVBQVQsRUFBcUI7QUFDckIsT0FBS0EsVUFBTCxHQUFrQixJQUFsQjs7QUFFQSxNQUFJLENBQUNyTCxLQUFLLENBQUNoVSxTQUFOLENBQWdCc2YsSUFBckIsRUFBMkI7QUFDdkJwaEIsa0RBQUssQ0FBQzhQLEtBQU4sQ0FBWSxlQUFaLEVBQTZCLG9CQUFvQnhTLG9EQUFwQixHQUFpQyxzQ0FBakMsR0FBMEVOLCtEQUExRSxHQUFrRywwRUFBL0g7QUFDQTtBQUNIOztBQUVELE1BQUlpQyxrREFBUSxDQUFDb2lCLE9BQVQsR0FBbUJoa0IsNkRBQXZCLEVBQTRDO0FBQ3hDMkMsa0RBQUssQ0FBQzhQLEtBQU4sQ0FBWSxlQUFaLEVBQTZCLG9CQUFvQjdRLGtEQUFRLENBQUNvaUIsT0FBN0IsR0FBdUMsaUJBQXZDLEdBQTJELHNDQUEzRCxHQUFvRy9qQixvREFBcEcsR0FBaUgscUpBQTlJO0FBQ0E7QUFDSDs7QUFFRCxNQUFJTCxNQUFNLENBQUNxa0IsRUFBWCxFQUFlO0FBQ1h0aEIsa0RBQUssQ0FBQzhQLEtBQU4sQ0FBWSxlQUFaLEVBQTZCLDhFQUE3QjtBQUNBO0FBQ0g7O0FBRUQsTUFBSTdTLE1BQU0sQ0FBQ3NrQixTQUFQLElBQW9CdGtCLE1BQU0sQ0FBQ3NrQixTQUFQLENBQWlCcGEsSUFBckMsSUFBNkNsSyxNQUFNLENBQUNza0IsU0FBUCxDQUFpQnBhLElBQWpCLENBQXNCbEUsUUFBdEIsQ0FBK0IsU0FBL0IsQ0FBakQsRUFBNEY7QUFDeEZqRCxrREFBSyxDQUFDOFAsS0FBTixDQUFZLGVBQVosRUFBNkIsd0VBQTdCO0FBQ0E7QUFDSDs7QUFFRDlQLGdEQUFLLENBQUM2UixjQUFOLENBQXFCLEtBQUsyUCxlQUFMLENBQXFCaGYsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBckIsRUFBc0QsMkJBQXREO0FBRUF4QyxnREFBSyxDQUFDeUksR0FBTixDQUFVLFNBQVYsRUFBcUIsdUJBQXJCO0FBQ0EsT0FBS2daLFlBQUw7QUFFQSxRQUFNLEtBQUtDLGNBQUwsRUFBTjtBQUNBcmhCLDZDQUFJLENBQUNzaEIsVUFBTDtBQUNBM2hCLGdEQUFLLENBQUN5SSxHQUFOLENBQVUsU0FBVixFQUFxQixtQkFBckI7QUFDQWhJLHdEQUFhLENBQUNtaEIsa0JBQWQ7QUFFQTVoQixnREFBSyxDQUFDeUksR0FBTixDQUFVLFNBQVYsRUFBcUIsc0JBQXJCO0FBQ0EsUUFBTW9aLHdEQUFjLENBQUN0SCx1QkFBZixFQUFOO0FBRUF2YSxnREFBSyxDQUFDeUksR0FBTixDQUFVLFNBQVYsRUFBcUIsaUJBQXJCO0FBQ0EsUUFBTW5JLHFEQUFZLENBQUMwZ0IsV0FBYixFQUFOO0FBRUFoaEIsZ0RBQUssQ0FBQ3lJLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLGdCQUFyQjtBQUNBLFFBQU1sSSxvREFBVyxDQUFDMGdCLFVBQVosRUFBTjtBQUVBalMsbURBQUcsQ0FBQ0MsUUFBSixDQUFhLFdBQWIsRUFBMEI2UyxNQUFNLENBQUNDLElBQVAsQ0FBWXJoQixrREFBUyxDQUFDNlIsU0FBVixDQUFvQixhQUFwQixDQUFaLEVBQWdELFFBQWhELEVBQTBEeVAsUUFBMUQsQ0FBbUUsTUFBbkUsQ0FBMUI7QUFFQS9rQixRQUFNLENBQUM0TyxnQkFBUCxDQUF3QixjQUF4QixFQUF3QyxZQUFXO0FBQy9DLFFBQUlyTix3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0M4QyxRQUFRLENBQUM2SCxhQUFULENBQXVCLHFCQUF2QixFQUE4QzhZLEtBQTlDO0FBQ25DLEdBRkQ7QUFJQUMsMkRBQWUsQ0FBQ2phLEtBQWhCO0FBRUFqSSxnREFBSyxDQUFDeUksR0FBTixDQUFVLFNBQVYsRUFBcUIsdUJBQXJCO0FBQ0EsTUFBSW5ILFFBQVEsQ0FBQzZnQixzQkFBVCxDQUFnQyxhQUFoQyxFQUErQ3ZlLE1BQW5ELEVBQTJEdEMsUUFBUSxDQUFDNmdCLHNCQUFULENBQWdDLGFBQWhDLEVBQStDLENBQS9DLEVBQWtEclgsTUFBbEQ7QUFDM0Q5SyxnREFBSyxDQUFDeUksR0FBTixDQUFVLFNBQVYsRUFBcUIsNEJBQXJCO0FBQ0EsT0FBSzJaLFlBQUwsR0F0RG1DLENBd0RuQzs7QUFDQSxNQUFJNWpCLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQztBQUM3QndCLGtEQUFLLENBQUN5SSxHQUFOLENBQVUsU0FBVixFQUFxQiwyQkFBckI7QUFDQXpJLGtEQUFLLENBQUNxaUIsaUJBQU4sQ0FBd0I7QUFBQ0MsYUFBTyxFQUFFdmpCLHdEQUFWO0FBQTBCd2pCLFlBQU0sRUFBRXZqQix1REFBYUE7QUFBL0MsS0FBeEI7QUFDSDs7QUFFRCxRQUFNd2pCLGVBQWUsR0FBRzloQixrREFBUyxDQUFDNlIsU0FBVixDQUFvQixTQUFwQixDQUF4Qjs7QUFDQSxNQUFJalYsb0RBQVUsR0FBR2tsQixlQUFqQixFQUFrQztBQUM5QixRQUFJamxCLHNEQUFKLEVBQWtCLEtBQUtrbEIsa0JBQUwsQ0FBd0JsbEIsc0RBQXhCO0FBQ2xCbUQsc0RBQVMsQ0FBQzhSLFNBQVYsQ0FBb0IsU0FBcEIsRUFBK0JsVixvREFBL0I7QUFDSDs7QUFFRG9sQix1REFBVyxDQUFDemEsS0FBWjtBQUVBakksZ0RBQUssQ0FBQzZSLGNBQU4sQ0FBcUIsS0FBSzhRLFdBQUwsQ0FBaUJuZ0IsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBckIsRUFBa0QsaUJBQWxEO0FBQ0F4QyxnREFBSyxDQUFDNlIsY0FBTixDQUFxQixLQUFLK1EsZUFBTCxDQUFxQnBnQixJQUFyQixDQUEwQixJQUExQixDQUFyQixFQUFzRCxzQkFBdEQ7QUFDQXhDLGdEQUFLLENBQUM2UixjQUFOLENBQXFCLEtBQUtnUixtQkFBTCxDQUF5QnJnQixJQUF6QixDQUE4QixJQUE5QixDQUFyQixFQUEwRCwyQkFBMUQ7QUFDQXhDLGdEQUFLLENBQUM2UixjQUFOLENBQXFCLEtBQUtpUixtQkFBTCxDQUF5QnRnQixJQUF6QixDQUE4QixJQUE5QixDQUFyQixFQUEwRCwwQkFBMUQ7QUFDQXhDLGdEQUFLLENBQUM2UixjQUFOLENBQXFCLEtBQUtrUixrQkFBTCxDQUF3QnZnQixJQUF4QixDQUE2QixJQUE3QixDQUFyQixFQUF5RCxxQkFBekQ7QUFDQXhDLGdEQUFLLENBQUM2UixjQUFOLENBQXFCLEtBQUttUixlQUFMLENBQXFCeGdCLElBQXJCLENBQTBCLElBQTFCLENBQXJCLEVBQXNELDRCQUF0RDtBQUNBeEMsZ0RBQUssQ0FBQzZSLGNBQU4sQ0FBcUIsS0FBS29SLGVBQUwsQ0FBcUJ6Z0IsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBckIsRUFBc0QsMkJBQXREOztBQUVBLE1BQUd2RCxrREFBUSxDQUFDaWtCLG9CQUFaLEVBQWlDO0FBQzdCLFFBQUlwVCxLQUFLLEdBQUc5UCw4Q0FBSyxDQUFDOFAsS0FBTixDQUFZLG9CQUFaLEVBQWtDLHVLQUFsQyxDQUFaO0FBQ0EsVUFBTSxJQUFJK0wsT0FBSixDQUFhMUMsT0FBRCxJQUFhO0FBQzNCckosV0FBSyxDQUFDcVQsT0FBTixDQUFjaEssT0FBZDtBQUNILEtBRkssQ0FBTjtBQUdIOztBQUNELFFBQU1pSyxJQUFJLEdBQUc5aEIsUUFBUSxDQUFDNkgsYUFBVCxDQUF1QixzWEFBdkIsQ0FBYjs7QUFDQSxNQUFHaWEsSUFBSCxFQUFRO0FBQ0pBLFFBQUksQ0FBQzdXLEtBQUwsQ0FBV1MsR0FBWCxHQUFpQixLQUFqQjtBQUNBb1csUUFBSSxDQUFDQyxTQUFMLEdBQWtCOzs7O09BQWxCO0FBS0g7QUFDSixDQTdGRDs7QUErRkF2aUIsSUFBSSxDQUFDZ0IsU0FBTCxDQUFlMGYsZUFBZixHQUFpQyxrQkFBaUI7QUFDOUMsTUFBSThCLGFBQWEsR0FBRyxFQUFwQjs7QUFDQSxPQUFLQyxxQkFBTCxHQUE2QixZQUFXO0FBQ3BDRCxpQkFBYSxDQUFDaFosT0FBZCxDQUFzQjNGLENBQUMsSUFBSUEsQ0FBQyxFQUE1QjtBQUNILEdBRkQ7O0FBSUEsU0FBTSxDQUFDNEUsMkNBQUUsQ0FBQ3NPLGdCQUFWLEVBQTJCLE1BQU0sSUFBSWdFLE9BQUosQ0FBWTFDLE9BQU8sSUFBSTRDLFVBQVUsQ0FBQzVDLE9BQUQsRUFBVSxHQUFWLENBQWpDLENBQU4sQ0FObUIsQ0FROUM7OztBQUNBLFFBQU1xSyxNQUFNLEdBQUdoYSx1REFBYyxDQUFDQyxJQUFmLENBQW9CckMsQ0FBQyxJQUFJQSxDQUFDLENBQUM4USxXQUFGLElBQWlCLFFBQTFDLENBQWY7QUFDQWpiLFFBQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQjZaLGNBQXJCLENBQW9DOWUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzVCxXQUFWLEtBQTBCLFlBQWhGLEVBQ0N3TCxJQURELENBQ01DLFVBQVUsSUFBSTtBQUNoQixRQUFJQyxjQUFjLEdBQUdELFVBQVUsQ0FBQy9lLE9BQWhDOztBQUNBK2UsY0FBVSxDQUFDL2UsT0FBWCxHQUFxQixVQUFTcUYsS0FBVCxFQUFlO0FBQ2hDLFVBQUl2RyxXQUFXLEdBQUdrZ0IsY0FBYyxDQUFDM1osS0FBRCxDQUFoQztBQUVBLFVBQUluTSxFQUFFLEdBQUcyTSx3REFBTSxFQUFmO0FBRUEsVUFBSW9aLFFBQVEsR0FBR3hqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUMzQ2dMLGFBQUssRUFBRTtBQUNIYSxpQkFBTyxFQUFFLFFBRE47QUFFSDBXLG1CQUFTLEVBQUU7QUFGUjtBQURvQyxPQUFoQyxFQUtaempCLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQ2hDekQsVUFBRSxFQUFFLFlBQVVBLEVBRGtCO0FBRWhDOEIsV0FBRyxFQUFFLFlBQVU5QixFQUZpQjtBQUdoQ3lPLGFBQUssRUFBRTtBQUNIYSxpQkFBTyxFQUFFO0FBRE47QUFIeUIsT0FBakMsQ0FMWSxDQUFmO0FBYUEsVUFBSWxELFFBQVEsR0FBRyxDQUFDeEcsV0FBRCxDQUFmOztBQUVBLFVBQUl1RyxLQUFLLENBQUM4WixJQUFOLENBQVdqbUIsRUFBWCxLQUFrQixvQkFBdEIsRUFBNEM7QUFBRTtBQUMxQ29NLGdCQUFRLENBQUNFLElBQVQsQ0FDSS9KLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCeWlCLHdEQUF6QixFQUFzQztBQUFDekwsZUFBSyxFQUFFLE9BQVI7QUFBaUIwTCxjQUFJLEVBQUUsS0FBdkI7QUFBOEJoZCxjQUFJLEVBQUU7QUFBcEMsU0FBdEMsRUFDSTVHLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCaWlCLE1BQXpCLEVBQWlDO0FBQUNoaUIsbUJBQVMsRUFBRSxlQUFaO0FBQTZCMGlCLGNBQUksRUFBRSw2Q0FBbkM7QUFBa0Z4bUIsZUFBSyxFQUFFLFlBQXpGO0FBQXVHeW1CLGdCQUFNLEVBQUU7QUFBL0csU0FBakMsRUFDSTlqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjZpQixrREFBekIsRUFBaUM7QUFBQ3JGLGNBQUksRUFBRSxNQUFQO0FBQWV2ZCxtQkFBUyxFQUFFO0FBQTFCLFNBQWpDLENBREosQ0FESixDQURKO0FBT0gsT0FSRCxNQVFPLElBQUl5SSxLQUFLLENBQUM4WixJQUFOLENBQVdqbUIsRUFBWCxLQUFrQixvQkFBbEIsSUFBMENtTSxLQUFLLENBQUM4WixJQUFOLENBQVdqbUIsRUFBWCxLQUFrQixvQkFBaEUsRUFBcUY7QUFBRTtBQUMxRm9NLGdCQUFRLENBQUNFLElBQVQsQ0FDSS9KLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCeWlCLHdEQUF6QixFQUFzQztBQUFDekwsZUFBSyxFQUFFLE9BQVI7QUFBaUIwTCxjQUFJLEVBQUUsS0FBdkI7QUFBOEJoZCxjQUFJLEVBQUU7QUFBcEMsU0FBdEMsRUFDSTVHLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCaWlCLE1BQXpCLEVBQWlDO0FBQUNoaUIsbUJBQVMsRUFBRSxlQUFaO0FBQTZCMGlCLGNBQUksRUFBRSx3Q0FBbkM7QUFBNkV4bUIsZUFBSyxFQUFFLFdBQXBGO0FBQWlHeW1CLGdCQUFNLEVBQUU7QUFBekcsU0FBakMsRUFDSTlqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjhpQix1REFBekIsRUFBd0M7QUFBQ3RGLGNBQUksRUFBRSxNQUFQO0FBQWV2ZCxtQkFBUyxFQUFFO0FBQTFCLFNBQXhDLENBREosQ0FESixDQURKO0FBT0g7O0FBRUQwSSxjQUFRLENBQUNFLElBQVQsQ0FBY3laLFFBQWQ7QUFDQSxVQUFJcFksR0FBRyxHQUFHcEwsMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFDdENnTCxhQUFLLEVBQUU7QUFDSGEsaUJBQU8sRUFBRTtBQUROO0FBRCtCLE9BQWhDLEVBSVBsRCxRQUpPLENBQVY7QUFLQW9hLGlCQUFXLENBQUN4bUIsRUFBRCxFQUFLbU0sS0FBSyxDQUFDOFosSUFBWCxFQUFpQixLQUFqQixDQUFYO0FBRUEsYUFBT3RZLEdBQVA7QUFDSCxLQS9DRDs7QUFnREFrWSxjQUFVLENBQUMvZSxPQUFYLENBQW1Cc1QsV0FBbkIsR0FBaUMwTCxjQUFjLENBQUMxTCxXQUFoRDtBQUNILEdBcEREO0FBc0RBb0wsZUFBYSxDQUFDbFosSUFBZCxDQUFtQnBLLDhDQUFLLENBQUNpRSxXQUFOLENBQWtCc0YsMkNBQUUsQ0FBQ3NPLGdCQUFyQixFQUF1QyxTQUF2QyxFQUFrRDtBQUFDMVQsU0FBSyxFQUFHWCxJQUFELElBQVU7QUFDbkYsVUFBR0EsSUFBSSxDQUFDdVUsZUFBTCxDQUFxQixDQUFyQixFQUF3QkMsc0JBQXhCLENBQStDL04sS0FBL0MsQ0FBcURuRSxPQUF4RCxFQUFnRTtBQUFFO0FBQzlEdEMsWUFBSSxDQUFDRSxXQUFMLENBQWlCdUcsS0FBakIsQ0FBdUIsaUJBQXZCLElBQTRDekcsSUFBSSxDQUFDdVUsZUFBTCxDQUFxQixDQUFyQixFQUF3QkMsc0JBQXhCLENBQStDL04sS0FBL0MsQ0FBcURuRSxPQUFyRCxDQUE2RGhJLEVBQXpHO0FBQ0g7QUFDSjtBQUpvRSxHQUFsRCxDQUFuQjtBQUtJOzs7O0FBSVAsQ0F6RUQ7O0FBMkVBZ0QsSUFBSSxDQUFDZ0IsU0FBTCxDQUFlNGYsY0FBZixHQUFnQyxZQUFXO0FBQ3ZDLE1BQUk2QyxZQUFZLEdBQUcsQ0FBbkI7QUFDQSxTQUFPLElBQUkxSSxPQUFKLENBQVkxQyxPQUFPLElBQUk7QUFDMUIsVUFBTXVJLGNBQWMsR0FBRyxZQUFXO0FBQzlCLFlBQU04QyxPQUFPLEdBQUdua0IsMkNBQUksQ0FBQ29rQixZQUFMLENBQWtCRCxPQUFsQixDQUEwQnJhLEtBQTFCLENBQWdDLEdBQWhDLEVBQXFDLENBQXJDLENBQWhCO0FBQ0EsVUFBSTdJLFFBQVEsQ0FBQ3NYLGdCQUFULENBQTJCLElBQUc0TCxPQUFRLEVBQXRDLEVBQXlDNWdCLE1BQXpDLEdBQWtELENBQXRELEVBQXlEMmdCLFlBQVk7QUFDckUsWUFBTUcsS0FBSyxHQUFHcmtCLDJDQUFJLENBQUNva0IsWUFBTCxDQUFrQkUsUUFBbEIsQ0FBMkJ4YSxLQUEzQixDQUFpQyxHQUFqQyxFQUFzQyxDQUF0QyxDQUFkO0FBQ0EsWUFBTXlhLElBQUksR0FBR3ZrQiwyQ0FBSSxDQUFDb2tCLFlBQUwsQ0FBa0JJLGFBQWxCLENBQWdDMWEsS0FBaEMsQ0FBc0MsR0FBdEMsRUFBMkMsQ0FBM0MsQ0FBYjtBQUNBLFVBQUk3SSxRQUFRLENBQUNzWCxnQkFBVCxDQUEyQixJQUFHNEwsT0FBUSxLQUFJRSxLQUFNLEtBQUlFLElBQUssRUFBekQsRUFBNERoaEIsTUFBNUQsR0FBcUUsQ0FBekUsRUFBNEUsT0FBT3VWLE9BQU8sQ0FBQ2xhLGtEQUFRLENBQUM2bEIsV0FBVCxHQUF1QixJQUF4QixDQUFkLENBQTVFLEtBQ0ssSUFBSVAsWUFBWSxJQUFJLEVBQXBCLEVBQXdCLE9BQU9wTCxPQUFPLENBQUNsYSxrREFBUSxDQUFDNmxCLFdBQVQsR0FBdUIsSUFBeEIsQ0FBZDtBQUM3Qi9JLGdCQUFVLENBQUMyRixjQUFELEVBQWlCLEdBQWpCLENBQVY7QUFDSCxLQVJEOztBQVNBLFFBQUlwZ0IsUUFBUSxDQUFDeWpCLFVBQVQsSUFBdUIsU0FBM0IsRUFBc0NoSixVQUFVLENBQUMyRixjQUFELEVBQWlCLEdBQWpCLENBQVY7QUFDdENwZ0IsWUFBUSxDQUFDdUssZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLE1BQU07QUFBQ2tRLGdCQUFVLENBQUMyRixjQUFELEVBQWlCLEdBQWpCLENBQVY7QUFBaUMsS0FBdEY7QUFDSCxHQVpNLENBQVA7QUFhSCxDQWZEOztBQWlCQTVnQixJQUFJLENBQUNnQixTQUFMLENBQWVrakIsZUFBZixHQUFpQyxrQkFBaUIsQ0FDOUM7QUFDSCxDQUZEOztBQUlBbGtCLElBQUksQ0FBQ2dCLFNBQUwsQ0FBZTJmLFlBQWYsR0FBOEIsWUFBWTtBQUN0Qy9nQixvREFBUyxDQUFDaWhCLFVBQVY7O0FBQ0EsTUFBRyxDQUFDamhCLGtEQUFTLENBQUMrWixlQUFWLENBQTBCLEtBQTFCLENBQUosRUFBcUM7QUFDakN2YixVQUFNLENBQUNzWixNQUFQLENBQWMvWixxREFBZCxFQUEyQkMsb0RBQTNCO0FBQ0g7O0FBQ0QsTUFBRyxDQUFDZ0Msa0RBQVMsQ0FBQytaLGVBQVYsQ0FBMEIsVUFBMUIsQ0FBSixFQUEwQztBQUNsQ3ZiLFVBQU0sQ0FBQ3NaLE1BQVAsQ0FBY2hhLHdEQUFkLEVBQThCRCx1REFBOUI7QUFDSmtDLDBEQUFhLENBQUN3a0IsWUFBZDtBQUNILEdBSEQsTUFHTztBQUNIeGtCLDBEQUFhLENBQUN5a0IsWUFBZDs7QUFDQSxTQUFLLE1BQU1DLE9BQVgsSUFBc0I1bUIsdURBQXRCLEVBQXFDO0FBQ2pDLFVBQUlDLHdEQUFjLENBQUMybUIsT0FBRCxDQUFkLElBQTJCN2lCLFNBQS9CLEVBQTBDO0FBQ3RDOUQsZ0VBQWMsQ0FBQzJtQixPQUFELENBQWQsR0FBMEI1bUIsdURBQWEsQ0FBQzRtQixPQUFELENBQXZDO0FBQ0Exa0IsOERBQWEsQ0FBQ3drQixZQUFkO0FBQ0g7QUFDSjtBQUNKOztBQUNEaG9CLFFBQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQjZaLGNBQXJCLENBQW9DOWUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVU5QyxTQUF2QixJQUFvQzZDLENBQUMsQ0FBQ0MsT0FBRixDQUFVOUMsU0FBVixDQUFvQnNqQixvQkFBakcsRUFDQzFCLElBREQsQ0FDTTJCLGFBQWEsSUFBSTtBQUVuQixRQUFJRCxvQkFBb0IsR0FBR0MsYUFBYSxDQUFDemdCLE9BQWQsQ0FBc0I5QyxTQUF0QixDQUFnQ3NqQixvQkFBM0Q7O0FBQ0FDLGlCQUFhLENBQUN6Z0IsT0FBZCxDQUFzQjlDLFNBQXRCLENBQWdDc2pCLG9CQUFoQyxHQUF1RCxZQUFVO0FBQzdELFVBQUlwSyxNQUFNLEdBQUdvSyxvQkFBb0IsQ0FBQ3JiLElBQXJCLENBQTBCLElBQTFCLEVBQWdDLEdBQUc3SCxTQUFuQyxDQUFiO0FBRUEsVUFBRyxDQUFDOFksTUFBTSxDQUFDLENBQUQsQ0FBVixFQUFjLE9BQU9BLE1BQVA7O0FBQ2QsVUFBR0EsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVc0ssT0FBVixLQUFzQixZQUF6QixFQUFzQztBQUFFO0FBQ3BDLFlBQUlDLEtBQUssR0FBRyxFQUFaO0FBRUFBLGFBQUssQ0FBQ25iLElBQU4sQ0FBVzRRLE1BQU0sQ0FBQ3dLLEdBQVAsRUFBWDtBQUNBRCxhQUFLLENBQUNuYixJQUFOLENBQVc0USxNQUFNLENBQUN3SyxHQUFQLEVBQVg7QUFDQUQsYUFBSyxDQUFDbmIsSUFBTixDQUFXNFEsTUFBTSxDQUFDd0ssR0FBUCxFQUFYO0FBQ0FELGFBQUssQ0FBQ25iLElBQU4sQ0FBVzRRLE1BQU0sQ0FBQ3dLLEdBQVAsRUFBWDtBQUVBeEssY0FBTSxDQUFDNVEsSUFBUCxDQUFZLEdBQUczSixzREFBYSxDQUFDZ2xCLGFBQWQsQ0FBNEIsSUFBNUIsQ0FBZjs7QUFFQSxlQUFNRixLQUFLLENBQUMsQ0FBRCxDQUFYLEVBQWU7QUFDWHZLLGdCQUFNLENBQUM1USxJQUFQLENBQVltYixLQUFLLENBQUNDLEdBQU4sRUFBWjtBQUNIO0FBQ0o7O0FBQ0RoZCxhQUFPLENBQUNDLEdBQVIsQ0FBWXVTLE1BQVo7QUFDQSxhQUFPQSxNQUFQO0FBQ0gsS0FwQkQ7QUFxQkgsR0F6QkQ7QUEwQkgsQ0EzQ0Q7O0FBOENBLElBQUkwSyxjQUFKO0FBQ0EsSUFBSUMsb0JBQUo7QUFDQSxJQUFJQyxjQUFKOztBQUVBOWtCLElBQUksQ0FBQ2dCLFNBQUwsQ0FBZXNnQixZQUFmLEdBQThCLFlBQVk7QUFDdEMsUUFBTXlELFlBQVksR0FBRyxJQUFJQyxnQkFBSixDQUFzQkMsU0FBRCxJQUFlO0FBQ3JELFNBQUssSUFBSXhQLENBQUMsR0FBRyxDQUFSLEVBQVd5UCxJQUFJLEdBQUdELFNBQVMsQ0FBQ25pQixNQUFqQyxFQUF5QzJTLENBQUMsR0FBR3lQLElBQTdDLEVBQW1EelAsQ0FBQyxFQUFwRCxFQUF3RDtBQUNwRCxZQUFNMFAsUUFBUSxHQUFHRixTQUFTLENBQUN4UCxDQUFELENBQTFCO0FBQ0EsVUFBSSxPQUFPalcscURBQVAsS0FBd0IsV0FBNUIsRUFBeUNBLHFEQUFZLENBQUM0bEIsV0FBYixDQUF5QkQsUUFBekIsRUFGVyxDQUlwRDs7QUFDQSxVQUFJLENBQUNBLFFBQVEsQ0FBQ0UsVUFBVCxDQUFvQnZpQixNQUFyQixJQUErQixFQUFFcWlCLFFBQVEsQ0FBQ0UsVUFBVCxDQUFvQixDQUFwQixhQUFrQ3BWLE9BQXBDLENBQW5DLEVBQWlGO0FBRWpGLFlBQU1GLElBQUksR0FBR29WLFFBQVEsQ0FBQ0UsVUFBVCxDQUFvQixDQUFwQixDQUFiO0FBRUEsVUFBRyxDQUFDVCxjQUFKLEVBQW1CQSxjQUFjLEdBQUdoaEIsU0FBUyxDQUFDM0UsR0FBVixDQUFlNEUsQ0FBRCxJQUFPQSxDQUFDLENBQUMrRSxLQUFGLElBQVcsT0FBTy9FLENBQUMsQ0FBQytFLEtBQVQsS0FBbUIsUUFBOUIsSUFBMEMvRSxDQUFDLENBQUN5aEIsU0FBakUsRUFBNEUsQ0FBNUUsRUFBK0UxYyxLQUFoRztBQUNuQixVQUFHLENBQUNpYyxvQkFBSixFQUF5QkEsb0JBQW9CLEdBQUdqaEIsU0FBUyxDQUFDM0UsR0FBVixDQUFlNEUsQ0FBRCxJQUFPQSxDQUFDLENBQUMwaEIsV0FBRixJQUFpQixPQUFPMWhCLENBQUMsQ0FBQzBoQixXQUFULEtBQXlCLFFBQS9ELEVBQXlFLENBQXpFLEVBQTRFQSxXQUFuRztBQUN6QixVQUFHLENBQUNULGNBQUosRUFBbUJBLGNBQWMsR0FBR2xoQixTQUFTLENBQUMzRSxHQUFWLENBQWU0RSxDQUFELElBQU9BLENBQUMsQ0FBQzJoQixLQUFGLElBQVcsT0FBTzNoQixDQUFDLENBQUMyaEIsS0FBVCxLQUFtQixRQUE5QixJQUEwQzNoQixDQUFDLENBQUM0aEIsS0FBNUMsSUFBcUQsT0FBTzVoQixDQUFDLENBQUM0aEIsS0FBVCxLQUFtQixRQUF4RSxJQUFvRixDQUFDNWhCLENBQUMsQ0FBQzZoQixxQkFBNUcsRUFBbUksQ0FBbkksRUFBc0lGLEtBQXZKOztBQUVuQixVQUFJelYsSUFBSSxDQUFDN0csU0FBTCxDQUFlcU4sUUFBZixDQUF3QnFPLGNBQXhCLENBQUosRUFBNkM7QUFDekMsWUFBSTdVLElBQUksQ0FBQzRWLFlBQUwsQ0FBa0IsWUFBbEIsTUFBb0MsZ0JBQXhDLEVBQXlEO0FBQ3JENVYsY0FBSSxDQUFDNlYsWUFBTCxDQUFrQixVQUFsQixFQUE4QixpQkFBOUI7QUFDQTdWLGNBQUksQ0FBQzZWLFlBQUwsQ0FBa0IsSUFBbEIsRUFBd0IsaUJBQXhCO0FBQ0g7O0FBRUQsWUFBSTdWLElBQUksQ0FBQ3NSLHNCQUFMLENBQTRCd0Qsb0JBQTVCLEVBQWtEL2hCLE1BQXRELEVBQThEO0FBQzFEaU4sY0FBSSxDQUFDNlYsWUFBTCxDQUFrQixVQUFsQixFQUE4QixlQUE5QjtBQUNBN1YsY0FBSSxDQUFDNlYsWUFBTCxDQUFrQixJQUFsQixFQUF3QixlQUF4QjtBQUNIO0FBQ0o7O0FBRUQsVUFBSTdWLElBQUksQ0FBQzhWLGFBQUwsSUFBc0JybEIsUUFBUSxDQUFDRyxJQUEvQixJQUF1Q29QLElBQUksQ0FBQzFILGFBQUwsQ0FBbUIsbUJBQW5CLENBQTNDLEVBQW9GMEgsSUFBSSxDQUFDL1MsRUFBTCxHQUFVLDRCQUFWLENBekJoQyxDQTJCcEQ7QUFDQTtBQUNBO0FBRUg7QUFDSixHQWpDb0IsQ0FBckI7QUFtQ0ErbkIsY0FBWSxDQUFDZSxPQUFiLENBQXFCdGxCLFFBQXJCLEVBQStCO0FBQzNCdWxCLGFBQVMsRUFBRSxJQURnQjtBQUUzQkMsV0FBTyxFQUFFO0FBRmtCLEdBQS9CO0FBSUgsQ0F4Q0Q7O0FBMENBaG1CLElBQUksQ0FBQ2dCLFNBQUwsQ0FBZTJnQixrQkFBZixHQUFvQyxVQUFTeFMsT0FBTyxHQUFHLEVBQW5CLEVBQXVCO0FBQ3ZELFNBQU9qUSw4Q0FBSyxDQUFDeWlCLGtCQUFOLENBQXlCeFMsT0FBekIsQ0FBUDtBQUNILENBRkQ7O0FBSUFuUCxJQUFJLENBQUNnQixTQUFMLENBQWVnTyxLQUFmLEdBQXVCLFVBQVNwUyxLQUFULEVBQWdCZ0osT0FBaEIsRUFBeUI7QUFDNUMsU0FBTzFHLDhDQUFLLENBQUM4UCxLQUFOLENBQVlwUyxLQUFaLEVBQW1CZ0osT0FBbkIsQ0FBUDtBQUNILENBRkQ7O0FBSUE1RixJQUFJLENBQUNnQixTQUFMLENBQWU2Z0IsV0FBZixHQUE2QixZQUFXO0FBQ3BDLE1BQUksS0FBS29FLFdBQVQsRUFBc0I7QUFDdEIsUUFBTUMsTUFBTSxHQUFHeGQsdURBQWMsQ0FBQ0MsSUFBZixDQUFvQnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDOFEsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBQ0EsUUFBTXNMLE1BQU0sR0FBR2hhLHVEQUFjLENBQUNDLElBQWYsQ0FBb0JyQyxDQUFDLElBQUlBLENBQUMsQ0FBQzhRLFdBQUYsSUFBaUIsUUFBMUMsQ0FBZjtBQUNBLE1BQUksQ0FBQzhPLE1BQUwsRUFBYTtBQUNiLE9BQUtELFdBQUwsR0FBbUIvbUIsOENBQUssQ0FBQ2lFLFdBQU4sQ0FBa0IraUIsTUFBTSxDQUFDbGxCLFNBQXpCLEVBQW9DLFFBQXBDLEVBQThDO0FBQUNxQyxTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUMvRSxZQUFNMEcsUUFBUSxHQUFHMUcsSUFBSSxDQUFDRSxXQUFMLENBQWlCdUcsS0FBakIsQ0FBdUJDLFFBQXhDO0FBQ0EsVUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsUUFBUSxDQUFDdEcsTUFBdkIsSUFBaUNzRyxRQUFRLENBQUN0RyxNQUFULEdBQWtCLENBQXZELEVBQTBEO0FBQzFELFVBQUlzRyxRQUFRLENBQUNBLFFBQVEsQ0FBQ3RHLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixDQUE4QmpHLElBQTlCLENBQW1DdWEsV0FBbkMsS0FBbUQsV0FBdkQsRUFBb0U7QUFDcEUsVUFBSSxDQUFDaE8sUUFBUSxDQUFDQSxRQUFRLENBQUN0RyxNQUFULEdBQWtCLENBQW5CLENBQVIsQ0FBOEJqRyxJQUE5QixDQUFtQ3FrQixRQUFuQyxHQUE4Qy9lLFFBQTlDLENBQXVELGFBQXZELENBQUwsRUFBNEU7O0FBQzVFLFVBQUl1Z0IsTUFBSixFQUFZO0FBQ1IsWUFBSXlELGFBQWEsR0FBR3ZpQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzBoQixXQUFyQixFQUFrQyxDQUFsQyxDQUFwQjtBQUNBLGNBQU1hLFFBQVEsR0FBR2hkLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdEcsTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCakcsSUFBL0M7O0FBQ0EsY0FBTXdwQixNQUFNLEdBQUcsWUFBVztBQUN0QixnQkFBTUMsU0FBUyxHQUFHRixRQUFRLENBQUMsR0FBR2hsQixTQUFKLENBQTFCO0FBQ0FrbEIsbUJBQVMsQ0FBQ25kLEtBQVYsQ0FBZ0JDLFFBQWhCLENBQXlCRSxJQUF6QixDQUNJL0osMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUJ5aUIsd0RBQXpCLEVBQXNDO0FBQUN6TCxpQkFBSyxFQUFFLE9BQVI7QUFBaUIwTCxnQkFBSSxFQUFFLEtBQXZCO0FBQThCaGQsZ0JBQUksRUFBRTtBQUFwQyxXQUF0QyxFQUNJNUcsMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUJpaUIsTUFBekIsRUFBaUM7QUFBQ2hpQixxQkFBUyxFQUFFLG9CQUFrQnlsQixhQUFhLENBQUNJLElBQTVDO0FBQWtEbkQsZ0JBQUksRUFBRSx3Q0FBeEQ7QUFBa0d4bUIsaUJBQUssRUFBRSxXQUF6RztBQUFzSHltQixrQkFBTSxFQUFFO0FBQTlILFdBQWpDLEVBQ0k5akIsMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUI4aUIsdURBQXpCLEVBQXdDO0FBQUN0RixnQkFBSSxFQUFFLE1BQVA7QUFBZXZkLHFCQUFTLEVBQUU7QUFBMUIsV0FBeEMsQ0FESixDQURKLENBREo7QUFPQTRsQixtQkFBUyxDQUFDbmQsS0FBVixDQUFnQkMsUUFBaEIsQ0FBeUJFLElBQXpCLENBQ0kvSiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QnlpQix3REFBekIsRUFBc0M7QUFBQ3pMLGlCQUFLLEVBQUUsT0FBUjtBQUFpQjBMLGdCQUFJLEVBQUUsS0FBdkI7QUFBOEJoZCxnQkFBSSxFQUFFO0FBQXBDLFdBQXRDLEVBQ0k1RywyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QmlpQixNQUF6QixFQUFpQztBQUFDaGlCLHFCQUFTLEVBQUUsb0JBQWtCeWxCLGFBQWEsQ0FBQ0ksSUFBNUM7QUFBa0RuRCxnQkFBSSxFQUFFLDZDQUF4RDtBQUF1R3htQixpQkFBSyxFQUFFLFlBQTlHO0FBQTRIeW1CLGtCQUFNLEVBQUU7QUFBcEksV0FBakMsRUFDSTlqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjZpQixrREFBekIsRUFBaUM7QUFBQ3JGLGdCQUFJLEVBQUUsTUFBUDtBQUFldmQscUJBQVMsRUFBRTtBQUExQixXQUFqQyxDQURKLENBREosQ0FESjtBQU9BLGlCQUFPNGxCLFNBQVA7QUFDSCxTQWpCRDs7QUFrQkFsZCxnQkFBUSxDQUFDQSxRQUFRLENBQUN0RyxNQUFULEdBQWtCLENBQW5CLENBQVIsQ0FBOEJqRyxJQUE5QixHQUFxQ3dwQixNQUFyQztBQUNIOztBQUVELFVBQUksQ0FDQUcsbUJBREEsRUFFQUMsS0FGQSxFQUdBQyxvQkFIQSxJQUlBLENBQ0E5aUIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM4aUIsVUFBckIsRUFBaUMsQ0FBakMsRUFBb0NBLFVBRHBDLEVBRUEvaUIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUMraUIsTUFBckIsRUFBNkIsQ0FBN0IsQ0FGQSxFQUdBaGpCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDZ2pCLFdBQXJCLEVBQWtDLENBQWxDLEVBQXFDQSxXQUhyQyxDQUpKO0FBVUEsWUFBTUEsV0FBVyxHQUFJLElBQUcxb0Isa0RBQVEsQ0FBQzhiLElBQVQsR0FBZ0I5YixrREFBUSxDQUFDOGIsSUFBVCxDQUFjd0MsU0FBZCxDQUF3QixDQUF4QixFQUEyQixDQUEzQixDQUFoQixHQUFnRHRlLGtEQUFRLENBQUMyb0IsTUFBTyxHQUF4RjtBQUNBLFlBQU1DLFNBQVMsR0FBR3pPLHFEQUFBLENBQXFCQyxRQUFyQixDQUE4QiwyQkFBOUIsQ0FBbEI7QUFDQSxZQUFNeU8sVUFBVSxHQUFHLENBQ2Z6bkIsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxpQkFBUyxFQUFHLEdBQUU4bEIsbUJBQW9CLElBQUdDLEtBQUssQ0FBQ1MsTUFBTztBQUFuRCxPQUFoQyxFQUF3RixhQUFZSCxTQUFTLENBQUN4RyxPQUFRLEdBQXRILEVBQTBIaGhCLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsaUJBQVMsRUFBRWdtQixvQkFBb0IsR0FBQztBQUFqQyxPQUFqQyxFQUF1RixJQUFHLENBQUNLLFNBQVMsQ0FBQ0ksTUFBVixJQUFvQixTQUFyQixFQUFnQ3hSLEtBQWhDLENBQXNDLENBQXRDLEVBQXlDLENBQXpDLENBQTRDLEdBQXRJLENBQTFILENBRGUsRUFFZnBXLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsaUJBQVMsRUFBRyxHQUFFOGxCLG1CQUFvQixJQUFHQyxLQUFLLENBQUNTLE1BQU87QUFBbkQsT0FBaEMsRUFBd0YsT0FBTTFxQixvREFBVyxHQUF6RyxFQUE2RytDLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsaUJBQVMsRUFBRWdtQixvQkFBb0IsR0FBQztBQUFqQyxPQUFqQyxFQUFzRkcsV0FBdEYsQ0FBN0csQ0FGZSxDQUFuQjtBQU1BLFlBQU1PLGdCQUFnQixHQUFHaGUsUUFBUSxDQUFDQSxRQUFRLENBQUN0RyxNQUFULEdBQWtCLENBQW5CLENBQVIsQ0FBOEJqRyxJQUF2RDs7QUFDQXVNLGNBQVEsQ0FBQ0EsUUFBUSxDQUFDdEcsTUFBVCxHQUFrQixDQUFuQixDQUFSLENBQThCakcsSUFBOUIsR0FBcUMsWUFBVztBQUM1QyxjQUFNeXBCLFNBQVMsR0FBR2MsZ0JBQWdCLENBQUMsR0FBR2htQixTQUFKLENBQWxDO0FBQ0FrbEIsaUJBQVMsQ0FBQ25kLEtBQVYsQ0FBZ0JDLFFBQWhCLENBQXlCVyxNQUF6QixDQUFnQyxDQUFoQyxFQUFtQyxDQUFuQyxFQUFzQ2lkLFVBQXRDO0FBQ0EsZUFBT1YsU0FBUDtBQUNILE9BSkQ7QUFLSDtBQXJEZ0UsR0FBOUMsQ0FBbkI7QUFzREgsQ0EzREQ7O0FBNkRBLE1BQU1lLGVBQWUsR0FBRyxZQUFXO0FBQy9CLFFBQU1DLGFBQWEsR0FBRzVlLHVEQUFjLENBQUM2ZSxXQUFmLENBQTJCLFNBQTNCLEVBQXNDLG1CQUF0QyxDQUF0QjtBQUNBLFFBQU1DLE1BQU0sR0FBRzllLHVEQUFjLENBQUM2ZSxXQUFmLENBQTJCLGFBQTNCLEVBQTBDLFVBQTFDLENBQWY7QUFDQSxRQUFNRSxJQUFJLEdBQUcvZSx1REFBYyxDQUFDNmUsV0FBZixDQUEyQixlQUEzQixDQUFiO0FBQ0EsU0FBT25wQixNQUFNLENBQUNzWixNQUFQLENBQWMsRUFBZCxFQUFrQjRQLGFBQWxCLEVBQWlDRSxNQUFqQyxFQUF5Q0MsSUFBekMsQ0FBUDtBQUNILENBTEQ7O0FBT0F6bkIsSUFBSSxDQUFDZ0IsU0FBTCxDQUFlK2dCLG1CQUFmLEdBQXFDLFlBQVc7QUFDNUMsTUFBSSxLQUFLMkYsbUJBQVQsRUFBOEI7QUFDOUIsUUFBTUMsWUFBWSxHQUFHTixlQUFlLEVBQXBDO0FBQ0EsUUFBTU8sYUFBYSxHQUFHRCxZQUFZLENBQUM5RCxRQUFiLENBQXNCeGEsS0FBdEIsQ0FBNEIsR0FBNUIsRUFBaUMsQ0FBakMsQ0FBdEI7QUFDQSxRQUFNd2UsU0FBUyxHQUFHRixZQUFZLENBQUM1RCxhQUFiLENBQTJCMWEsS0FBM0IsQ0FBaUMsR0FBakMsRUFBc0MsQ0FBdEMsQ0FBbEI7QUFDQSxRQUFNeWUsYUFBYSxHQUFHdm9CLDJDQUFJLENBQUN1USxtQkFBTCxDQUF5QnRQLFFBQVEsQ0FBQzZILGFBQVQsQ0FBd0IsSUFBR3VmLGFBQWMsS0FBSUMsU0FBVSxFQUF2RCxFQUEwRGhDLGFBQW5GLENBQXRCO0FBQ0EsUUFBTWtDLGNBQWMsR0FBR0QsYUFBYSxDQUFDRSxNQUFkLENBQXFCbnJCLElBQTVDO0FBQ0EsTUFBSSxDQUFDa3JCLGNBQUwsRUFBcUI7QUFDckIsT0FBS0wsbUJBQUwsR0FBMkJ4b0IsOENBQUssQ0FBQ2lFLFdBQU4sQ0FBa0I0a0IsY0FBYyxDQUFDL21CLFNBQWpDLEVBQTRDLFFBQTVDLEVBQXNEO0FBQUNxQyxTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUMvRixVQUFJQSxJQUFJLENBQUNFLFdBQUwsSUFBb0JGLElBQUksQ0FBQ3VsQixVQUE3QixFQUF5QztBQUNyQyxjQUFNcmxCLFdBQVcsR0FBR0YsSUFBSSxDQUFDRSxXQUF6QjtBQUNBLGNBQU1zbEIsU0FBUyxHQUFHeGxCLElBQUksQ0FBQ3VsQixVQUFMLENBQWdCOWUsS0FBbEM7QUFDQSxZQUFJekksU0FBUyxHQUFHa0MsV0FBVyxDQUFDdUcsS0FBWixDQUFrQnpJLFNBQWxDO0FBQ0FBLGlCQUFTLElBQUksV0FBYjtBQUNBLFlBQUl3bkIsU0FBUyxDQUFDQyxNQUFkLEVBQXNCem5CLFNBQVMsSUFBSSxZQUFiO0FBQ3RCLFlBQUl3bkIsU0FBUyxDQUFDRSxRQUFkLEVBQXdCMW5CLFNBQVMsSUFBSSxjQUFiO0FBQ3hCLFlBQUl3bkIsU0FBUyxDQUFDRyxLQUFkLEVBQXFCM25CLFNBQVMsSUFBSSxXQUFiO0FBQ3JCLFlBQUl3bkIsU0FBUyxDQUFDSSxLQUFkLEVBQXFCNW5CLFNBQVMsSUFBSSxXQUFiO0FBQ3JCLFlBQUl3bkIsU0FBUyxDQUFDSyxLQUFkLEVBQXFCN25CLFNBQVMsSUFBSSxXQUFiO0FBQ3JCLFlBQUl3bkIsU0FBUyxDQUFDTSxVQUFkLEVBQTBCOW5CLFNBQVMsSUFBSSxnQkFBYjtBQUMxQmtDLG1CQUFXLENBQUN1RyxLQUFaLENBQWtCekksU0FBbEIsR0FBOEJBLFNBQTlCO0FBQ0EsZUFBT2tDLFdBQVA7QUFDSDtBQUNKO0FBZmdGLEdBQXRELENBQTNCO0FBZ0JILENBeEJEOztBQTBCQTVDLElBQUksQ0FBQ2dCLFNBQUwsQ0FBZThnQixlQUFmLEdBQWlDLFlBQVc7QUFDeEMsTUFBSSxLQUFLMkcsY0FBVCxFQUF5QjtBQUN6QixRQUFNQyxTQUFTLEdBQUdoZ0IsdURBQWMsQ0FBQ0MsSUFBZixDQUFvQnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDeEMsT0FBRixJQUFhLENBQUN3QyxDQUFDLENBQUN4QyxPQUFGLENBQVVzVCxXQUF4QixJQUF1QzlRLENBQUMsQ0FBQ3hDLE9BQUYsQ0FBVW9kLFFBQWpELElBQTZENWEsQ0FBQyxDQUFDeEMsT0FBRixDQUFVb2QsUUFBVixHQUFxQi9lLFFBQXJCLENBQThCLGFBQTlCLENBQXRGLENBQWxCO0FBQ0EsTUFBSSxDQUFDdW1CLFNBQUwsRUFBZ0I7QUFDaEIsT0FBS0QsY0FBTCxHQUFzQnZwQiw4Q0FBSyxDQUFDaUUsV0FBTixDQUFrQnVsQixTQUFsQixFQUE2QixTQUE3QixFQUF3QztBQUFDcmxCLFNBQUssRUFBR1gsSUFBRCxJQUFVO0FBQzVFLFlBQU15RyxLQUFLLEdBQUd6RyxJQUFJLENBQUN1VSxlQUFMLENBQXFCLENBQXJCLENBQWQ7QUFDQSxVQUFJOU4sS0FBSyxDQUFDZ2YsTUFBVixFQUFrQnpsQixJQUFJLENBQUNFLFdBQUwsQ0FBaUJ1RyxLQUFqQixDQUF1QnpJLFNBQXZCLElBQW9DLFlBQXBDO0FBQ2xCLFVBQUl5SSxLQUFLLENBQUNpZixRQUFWLEVBQW9CMWxCLElBQUksQ0FBQ0UsV0FBTCxDQUFpQnVHLEtBQWpCLENBQXVCekksU0FBdkIsSUFBb0MsY0FBcEM7QUFDcEIsVUFBSXlJLEtBQUssQ0FBQ3dmLE9BQVYsRUFBbUJqbUIsSUFBSSxDQUFDRSxXQUFMLENBQWlCdUcsS0FBakIsQ0FBdUJ6SSxTQUF2QixJQUFvQyxhQUFwQztBQUNuQixhQUFPZ0MsSUFBSSxDQUFDRSxXQUFaO0FBQ0g7QUFONkQsR0FBeEMsQ0FBdEI7QUFPSCxDQVhEOztBQWFBNUMsSUFBSSxDQUFDZ0IsU0FBTCxDQUFlZ2hCLG1CQUFmLEdBQXFDLFlBQVc7QUFDNUMsTUFBSSxLQUFLNEcsbUJBQVQsRUFBOEI7QUFDOUIsUUFBTUMsTUFBTSxHQUFHbmdCLHVEQUFjLENBQUNtSCxpQkFBZixDQUFpQyxRQUFqQyxDQUFmO0FBQ0EsUUFBTWlaLGVBQWUsR0FBR3BnQix1REFBYyxDQUFDNmUsV0FBZixDQUEyQixnQkFBM0IsQ0FBeEI7QUFDQSxNQUFJLENBQUN1QixlQUFELElBQW9CLENBQUNELE1BQXpCLEVBQWlDOztBQUNqQyxRQUFNRSxjQUFjLEdBQUcsWUFBVztBQUM5QixVQUFNbm1CLFdBQVcsR0FBR2ttQixlQUFlLENBQUNFLFNBQWhCLENBQTBCLEdBQUc1bkIsU0FBN0IsQ0FBcEI7QUFDQXdCLGVBQVcsQ0FBQ3VHLEtBQVosQ0FBa0J6SSxTQUFsQixJQUErQixxQkFBL0I7QUFDQSxXQUFPa0MsV0FBUDtBQUNILEdBSkQ7O0FBS0EsT0FBS2dtQixtQkFBTCxHQUEyQjFwQiw4Q0FBSyxDQUFDaUUsV0FBTixDQUFrQjBsQixNQUFNLENBQUM3bkIsU0FBekIsRUFBb0MsUUFBcEMsRUFBOEM7QUFBQ3FDLFNBQUssRUFBR1gsSUFBRCxJQUFVO0FBQ3ZGQSxVQUFJLENBQUNFLFdBQUwsQ0FBaUJ1RyxLQUFqQixDQUF1QkMsUUFBdkIsQ0FBZ0MsQ0FBaEMsRUFBbUNELEtBQW5DLENBQXlDQyxRQUF6QyxDQUFrRCxDQUFsRCxFQUFxRHZNLElBQXJELEdBQTREa3NCLGNBQTVEO0FBQ0g7QUFGd0UsR0FBOUMsQ0FBM0I7QUFHSCxDQWJEOztBQWVBL29CLElBQUksQ0FBQ2dCLFNBQUwsQ0FBZW1oQixlQUFmLEdBQWlDLFlBQVc7QUFDeEMsTUFBSSxLQUFLOEcsZUFBVCxFQUEwQjtBQUMxQixRQUFNQyxVQUFVLEdBQUd0bEIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzVCxXQUFWLEtBQTBCLFlBQTFELEVBQXdFLENBQXhFLENBQW5CLENBRndDLENBRXNEOztBQUM5RixRQUFNc0wsTUFBTSxHQUFHaGEsdURBQWMsQ0FBQ0MsSUFBZixDQUFvQnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDOFEsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBQ0EsTUFBSSxDQUFDc0wsTUFBRCxJQUFXLENBQUN3RyxVQUFaLElBQTBCLENBQUNBLFVBQVUsQ0FBQ3BsQixPQUExQyxFQUFtRDtBQUNuRCxPQUFLbWxCLGVBQUwsR0FBdUIvcEIsOENBQUssQ0FBQ2lFLFdBQU4sQ0FBa0IrbEIsVUFBbEIsRUFBOEIsU0FBOUIsRUFBeUM7QUFBQzdsQixTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUM5RSxVQUFHLENBQUNoRix3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBZ0M7QUFDaEMsWUFBTXlyQixVQUFVLEdBQUd6bUIsSUFBSSxDQUFDdVUsZUFBTCxDQUFxQixDQUFyQixLQUEyQixJQUE5QztBQUNBLFlBQU03TixRQUFRLEdBQUdsSyw4Q0FBSyxDQUFDa3FCLGFBQU4sQ0FBb0IxbUIsSUFBSSxDQUFDRSxXQUF6QixFQUFzQyxnQkFBdEMsQ0FBakI7QUFFQSxVQUFJLENBQUN3RyxRQUFELElBQWEsQ0FBQytmLFVBQWQsSUFBNEIsQ0FBQ0EsVUFBVSxDQUFDbG5CLEdBQTVDLEVBQWdEO0FBQ2hELFVBQUksQ0FBQytTLEtBQUssQ0FBQ0MsT0FBTixDQUFjN0wsUUFBZCxDQUFMLEVBQThCO0FBRTlCLFlBQU1wTSxFQUFFLEdBQUcyTSx3REFBTSxFQUFqQjtBQUNBUCxjQUFRLENBQUNFLElBQVQsQ0FBYy9KLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFDM0N6RCxVQUFFLEVBQUUsZUFBYUE7QUFEMEIsT0FBakMsQ0FBZDtBQUdBb2tCLCtEQUFlLENBQUNpSSxLQUFoQixDQUFzQkYsVUFBdEIsRUFBa0MsZUFBYW5zQixFQUEvQztBQUNIO0FBYitELEdBQXpDLENBQXZCO0FBY0gsQ0FuQkQ7O0FBcUJBZ0QsSUFBSSxDQUFDZ0IsU0FBTCxDQUFlaWhCLGtCQUFmLEdBQW9DLFlBQVc7QUFDM0MsTUFBSSxLQUFLcUgsa0JBQVQsRUFBNkI7QUFDN0IsUUFBTUMsYUFBYSxHQUFHN2dCLHVEQUFjLENBQUM2ZSxXQUFmLENBQTJCLGtCQUEzQixDQUF0QjtBQUNBLFFBQU03RSxNQUFNLEdBQUdoYSx1REFBYyxDQUFDQyxJQUFmLENBQW9CckMsQ0FBQyxJQUFJQSxDQUFDLENBQUM4USxXQUFGLElBQWlCLFFBQTFDLENBQWY7QUFDQSxNQUFJLENBQUNzTCxNQUFELElBQVcsQ0FBQzZHLGFBQVosSUFBNkIsQ0FBQ0EsYUFBYSxDQUFDemxCLE9BQWhELEVBQXlEO0FBQ3pELE9BQUt3bEIsa0JBQUwsR0FBMEJwcUIsOENBQUssQ0FBQ2lFLFdBQU4sQ0FBa0JvbUIsYUFBbEIsRUFBaUMsU0FBakMsRUFBNEM7QUFBQ2xtQixTQUFLLEVBQUdYLElBQUQsSUFBVTtBQUNwRixZQUFNdUMsTUFBTSxHQUFHL0YsOENBQUssQ0FBQ2txQixhQUFOLENBQW9CMW1CLElBQUksQ0FBQ3VVLGVBQUwsQ0FBcUIsQ0FBckIsQ0FBcEIsRUFBNkMsZ0JBQTdDLENBQWYsQ0FEb0YsQ0FFcEY7O0FBQ0EsWUFBTTdOLFFBQVEsR0FBR2xLLDhDQUFLLENBQUNrcUIsYUFBTixDQUFvQjFtQixJQUFJLENBQUNFLFdBQXpCLEVBQXNDLGtEQUF0QyxDQUFqQjtBQUNBLFVBQUksQ0FBQ3dHLFFBQUQsSUFBYSxDQUFDbkUsTUFBZCxJQUF3QixDQUFDQSxNQUFNLENBQUNqSSxFQUFwQyxFQUF1QyxPQUo2QyxDQUtwRjs7QUFDQSxVQUFJLENBQUNnWSxLQUFLLENBQUNDLE9BQU4sQ0FBYzdMLFFBQWQsQ0FBTCxFQUE4Qjs7QUFDOUIsVUFBSW5FLE1BQU0sQ0FBQ2pJLEVBQVAsS0FBYyxvQkFBbEIsRUFBd0M7QUFBRTtBQUN0Q29NLGdCQUFRLENBQUNFLElBQVQsQ0FDSS9KLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCeWlCLHdEQUF6QixFQUFzQztBQUFDekwsZUFBSyxFQUFFLE9BQVI7QUFBaUIwTCxjQUFJLEVBQUUsS0FBdkI7QUFBOEJoZCxjQUFJLEVBQUU7QUFBcEMsU0FBdEMsRUFDSTVHLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCaWlCLE1BQXpCLEVBQWlDO0FBQUNoaUIsbUJBQVMsRUFBRSxlQUFaO0FBQTZCMGlCLGNBQUksRUFBRSw2Q0FBbkM7QUFBa0Z4bUIsZUFBSyxFQUFFLFlBQXpGO0FBQXVHeW1CLGdCQUFNLEVBQUU7QUFBL0csU0FBakMsRUFDSTlqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjZpQixrREFBekIsRUFBaUM7QUFBQ3JGLGNBQUksRUFBRSxNQUFQO0FBQWV2ZCxtQkFBUyxFQUFFO0FBQTFCLFNBQWpDLENBREosQ0FESixDQURKO0FBT0gsT0FSRCxNQVFPLElBQUl1RSxNQUFNLENBQUNqSSxFQUFQLEtBQWMsb0JBQWQsSUFBc0NpSSxNQUFNLENBQUNqSSxFQUFQLEtBQWMsb0JBQXhELEVBQTZFO0FBQUU7QUFDbEZvTSxnQkFBUSxDQUFDRSxJQUFULENBQ0kvSiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QnlpQix3REFBekIsRUFBc0M7QUFBQ3pMLGVBQUssRUFBRSxPQUFSO0FBQWlCMEwsY0FBSSxFQUFFLEtBQXZCO0FBQThCaGQsY0FBSSxFQUFFO0FBQXBDLFNBQXRDLEVBQ0k1RywyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QmlpQixNQUF6QixFQUFpQztBQUFDaGlCLG1CQUFTLEVBQUUsZUFBWjtBQUE2QjBpQixjQUFJLEVBQUUsd0NBQW5DO0FBQTZFeG1CLGVBQUssRUFBRSxXQUFwRjtBQUFpR3ltQixnQkFBTSxFQUFFO0FBQXpHLFNBQWpDLEVBQ0k5akIsMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUI4aUIsdURBQXpCLEVBQXdDO0FBQUN0RixjQUFJLEVBQUUsTUFBUDtBQUFldmQsbUJBQVMsRUFBRTtBQUExQixTQUF4QyxDQURKLENBREosQ0FESjtBQU9IOztBQUNELFlBQU0xRCxFQUFFLEdBQUcyTSx3REFBTSxFQUFqQjtBQUNBUCxjQUFRLENBQUNFLElBQVQsQ0FDSS9KLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQzVCekQsVUFBRSxFQUFFLFlBQVVBLEVBRGM7QUFFNUJ5TyxhQUFLLEVBQUU7QUFDSGEsaUJBQU8sRUFBRTtBQUROO0FBRnFCLE9BQWhDLENBREo7QUFRQWtYLGlCQUFXLENBQUN4bUIsRUFBRCxFQUFLaUksTUFBTCxFQUFhLElBQWIsQ0FBWDtBQUNIO0FBbENxRSxHQUE1QyxDQUExQjtBQW1DSCxDQXhDRDs7QUEwQ0EsU0FBU3VlLFdBQVQsQ0FBcUJ4bUIsRUFBckIsRUFBeUJpbUIsSUFBekIsRUFBK0J1RyxJQUEvQixFQUFvQztBQUNoQ2pzQixTQUFPLENBQUNrc0IsUUFBUixDQUFpQixNQUFNO0FBQ25CLFVBQU05ZSxHQUFHLEdBQUduSyxRQUFRLENBQUNrcEIsY0FBVCxDQUF3QixZQUFVMXNCLEVBQWxDLENBQVo7QUFDQSxRQUFHLENBQUMyTixHQUFELElBQVFBLEdBQUcsQ0FBQ2dmLFVBQUosQ0FBZTdtQixNQUFmLEdBQXdCLENBQW5DLEVBQXFDO0FBQ3JDLFFBQUc2SCxHQUFHLENBQUNnZixVQUFKLENBQWU3bUIsTUFBbEIsRUFBeUI7QUFDekIsUUFBSThtQixRQUFRLEdBQUdwcEIsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQWY7QUFDQW1wQixZQUFRLENBQUNuZSxLQUFULENBQWVhLE9BQWYsR0FBeUIsTUFBekI7QUFDQTNCLE9BQUcsQ0FBQy9KLFdBQUosQ0FBZ0JncEIsUUFBaEI7QUFFQSxVQUFNbEgsTUFBTSxHQUFHaGEsdURBQWMsQ0FBQ0MsSUFBZixDQUFvQnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDOFEsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBRUF5UyxxREFBTyxDQUFDQyxTQUFSLENBQWtCN0csSUFBSSxDQUFDam1CLEVBQXZCLEVBQ0M0bEIsSUFERCxDQUNNbUgsTUFBTSxJQUFJO0FBQ1pBLFlBQU0sQ0FBQ3ZnQixPQUFQLENBQWUrZSxLQUFLLElBQUk7QUFDcEIsY0FBTXBmLEtBQUssR0FBRztBQUNWNmdCLGFBQUcsRUFBRTtBQUNEL0wsZ0JBQUksRUFBRSxNQURMO0FBRUR2ZCxxQkFBUyxFQUFFLFNBRlY7QUFHRHVwQixpQkFBSyxFQUFFO0FBSE47QUFESyxTQUFkO0FBT0ExQixhQUFLLENBQUMyQixNQUFOLENBQWExZ0IsT0FBYixDQUFxQjJnQixLQUFLLElBQUk7QUFDMUIsY0FBR0EsS0FBSyxLQUFLLE1BQWIsRUFBb0I7QUFBQztBQUNqQmhoQixpQkFBSyxDQUFDOFosSUFBTixHQUFhQSxJQUFiO0FBQ0g7QUFDSixTQUpEOztBQUtBLFlBQUcsQ0FBQ3NGLEtBQUssQ0FBQ25GLElBQVYsRUFBZTtBQUNYamEsZUFBSyxDQUFDdVosTUFBTixHQUFlQSxNQUFmO0FBQ0F2WixlQUFLLENBQUNpYSxJQUFOLEdBQWE7QUFDVDFpQixxQkFBUyxFQUFFOG9CLElBQUksR0FBRyxlQUFILEdBQXFCLGlCQUQzQjtBQUVUNXNCLGlCQUFLLEVBQUUyckIsS0FBSyxDQUFDbGlCLElBRko7QUFHVGdkLGtCQUFNLEVBQUU7QUFIQyxXQUFiO0FBS0g7O0FBQ0QsY0FBTXZOLE9BQU8sR0FBR3ZXLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCeWlCLHdEQUF6QixFQUFzQztBQUFDekwsZUFBSyxFQUFFLE9BQVI7QUFBaUIwTCxjQUFJLEVBQUUsS0FBdkI7QUFBOEJoZCxjQUFJLEVBQUVvaUIsS0FBSyxDQUFDbGlCO0FBQTFDLFNBQXRDLEVBQ1praUIsS0FBSyxDQUFDbkYsSUFBTixHQUFhN2pCLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJpaUIsTUFBekIsRUFBaUM7QUFDMUNVLGNBQUksRUFBRW1GLEtBQUssQ0FBQ25GLElBRDhCO0FBRTFDMWlCLG1CQUFTLEVBQUU4b0IsSUFBSSxHQUFHLGVBQUgsR0FBcUIsaUJBRk07QUFHMUM1c0IsZUFBSyxFQUFFMnJCLEtBQUssQ0FBQ2xpQixJQUg2QjtBQUkxQ2dkLGdCQUFNLEVBQUU7QUFKa0MsU0FBakMsRUFLVjlqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjhuQixLQUFLLENBQUM2QixTQUEvQixFQUEwQ2poQixLQUExQyxDQUxVLENBQWIsR0FLdUQ1SiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjhuQixLQUFLLENBQUM2QixTQUEvQixFQUEwQ2poQixLQUExQyxDQU4zQyxDQUFoQjtBQVFBLGNBQU1raEIsSUFBSSxHQUFHN3BCLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixLQUF2QixDQUFiO0FBQ0FsQixtREFBSSxDQUFDK3FCLFFBQUwsQ0FBY3RoQixNQUFkLENBQXFCOE0sT0FBckIsRUFBOEJ1VSxJQUE5QjtBQUNBQSxZQUFJLENBQUNWLFVBQUwsQ0FBZ0JuZ0IsT0FBaEIsQ0FBd0J1RyxJQUFJLElBQUk7QUFDNUJwRixhQUFHLENBQUMvSixXQUFKLENBQWdCbVAsSUFBaEI7QUFDSCxTQUZEO0FBR0gsT0FsQ0Q7QUFtQ0gsS0FyQ0Q7QUFzQ0gsR0FoREQ7QUFpREg7O0FBRUQvUCxJQUFJLENBQUNnQixTQUFMLENBQWVraEIsZUFBZixHQUFpQyxZQUFXO0FBQ3hDLE1BQUksS0FBS3FJLGVBQVQsRUFBMEI7QUFDMUIsUUFBTUMsY0FBYyxHQUFHOWhCLHVEQUFjLENBQUNtSCxpQkFBZixDQUFpQyxnQkFBakMsQ0FBdkI7QUFDQSxRQUFNNlMsTUFBTSxHQUFHaGEsdURBQWMsQ0FBQ0MsSUFBZixDQUFvQnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDOFEsV0FBRixJQUFpQixRQUExQyxDQUFmO0FBQ0EsTUFBSSxDQUFDc0wsTUFBRCxJQUFXLENBQUM4SCxjQUFaLElBQThCLENBQUNBLGNBQWMsQ0FBQ3hwQixTQUE5QyxJQUEyRCxDQUFDd3BCLGNBQWMsQ0FBQ3hwQixTQUFmLENBQXlCeXBCLGdCQUF6RixFQUEyRztBQUMzRyxPQUFLRixlQUFMLEdBQXVCcnJCLDhDQUFLLENBQUNpRSxXQUFOLENBQWtCcW5CLGNBQWMsQ0FBQ3hwQixTQUFqQyxFQUE0QyxrQkFBNUMsRUFBZ0U7QUFBQ3FDLFNBQUssRUFBR1gsSUFBRCxJQUFVO0FBQ3JHLFlBQU11Z0IsSUFBSSxHQUFHL2pCLDhDQUFLLENBQUNrcUIsYUFBTixDQUFvQjFtQixJQUFJLENBQUN1bEIsVUFBekIsRUFBcUMsWUFBckMsQ0FBYjtBQUNBLFlBQU03ZSxRQUFRLEdBQUdsSyw4Q0FBSyxDQUFDa3FCLGFBQU4sQ0FBb0IxbUIsSUFBSSxDQUFDRSxXQUF6QixFQUFzQyxnQkFBdEMsQ0FBakI7QUFDQSxVQUFJLENBQUN3RyxRQUFELElBQWEsQ0FBQzZaLElBQWQsSUFBc0IsQ0FBQ0EsSUFBSSxDQUFDam1CLEVBQWhDLEVBQW1DLE9BSGtFLENBSXJHOztBQUNBLFVBQUksQ0FBQ2dZLEtBQUssQ0FBQ0MsT0FBTixDQUFjN0wsUUFBZCxDQUFMLEVBQThCOztBQUM5QixVQUFJNlosSUFBSSxDQUFDam1CLEVBQUwsS0FBWSxvQkFBaEIsRUFBc0M7QUFDbENvTSxnQkFBUSxDQUFDRSxJQUFULENBQ0kvSiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QnlpQix3REFBekIsRUFBc0M7QUFBQ3pMLGVBQUssRUFBRSxPQUFSO0FBQWlCMEwsY0FBSSxFQUFFLEtBQXZCO0FBQThCaGQsY0FBSSxFQUFFO0FBQXBDLFNBQXRDLEVBQ0k1RywyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QmlpQixNQUF6QixFQUFpQztBQUFDaGlCLG1CQUFTLEVBQUUsaUJBQVo7QUFBK0IwaUIsY0FBSSxFQUFFLDZDQUFyQztBQUFvRnhtQixlQUFLLEVBQUUsWUFBM0Y7QUFBeUd5bUIsZ0JBQU0sRUFBRTtBQUFqSCxTQUFqQyxFQUNJOWpCLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCNmlCLGtEQUF6QixFQUFpQztBQUFDckYsY0FBSSxFQUFFLE1BQVA7QUFBZXZkLG1CQUFTLEVBQUU7QUFBMUIsU0FBakMsQ0FESixDQURKLENBREo7QUFPSCxPQVJELE1BUU8sSUFBSXVpQixJQUFJLENBQUNqbUIsRUFBTCxLQUFZLG9CQUFaLElBQW9DaW1CLElBQUksQ0FBQ2ptQixFQUFMLEtBQVksb0JBQXBELEVBQXlFO0FBQzVFb00sZ0JBQVEsQ0FBQ0UsSUFBVCxDQUNJL0osMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUJ5aUIsd0RBQXpCLEVBQXNDO0FBQUN6TCxlQUFLLEVBQUUsT0FBUjtBQUFpQjBMLGNBQUksRUFBRSxLQUF2QjtBQUE4QmhkLGNBQUksRUFBRTtBQUFwQyxTQUF0QyxFQUNJNUcsMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUJpaUIsTUFBekIsRUFBaUM7QUFBQ2hpQixtQkFBUyxFQUFFLGlCQUFaO0FBQStCMGlCLGNBQUksRUFBRSx3Q0FBckM7QUFBK0V4bUIsZUFBSyxFQUFFLFdBQXRGO0FBQW1HeW1CLGdCQUFNLEVBQUU7QUFBM0csU0FBakMsRUFDSTlqQiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjhpQix1REFBekIsRUFBd0M7QUFBQ3RGLGNBQUksRUFBRSxNQUFQO0FBQWV2ZCxtQkFBUyxFQUFFO0FBQTFCLFNBQXhDLENBREosQ0FESixDQURKO0FBT0g7O0FBQ0QsWUFBTTFELEVBQUUsR0FBRzJNLHdEQUFNLEVBQWpCO0FBQ0FQLGNBQVEsQ0FBQ0UsSUFBVCxDQUNJL0osMkNBQUksQ0FBQzRLLEtBQUwsQ0FBVzFKLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ3pELFVBQUUsRUFBRSxZQUFVQTtBQUFmLE9BQWhDLENBREo7QUFHQXdtQixpQkFBVyxDQUFDeG1CLEVBQUQsRUFBS2ltQixJQUFMLEVBQVcsS0FBWCxDQUFYO0FBQ0g7QUE1QnNGLEdBQWhFLENBQXZCO0FBNkJILENBbENEOztBQW9DQWpqQixJQUFJLENBQUNnQixTQUFMLENBQWUwcEIsY0FBZixHQUFnQyxrQkFBaUI7QUFDN0M7QUFDQTtBQUVBLFFBQU1DLGFBQWEsR0FBRy9xQixrREFBUyxDQUFDK3FCLGFBQWhDO0FBQ0EsTUFBSSxDQUFDQSxhQUFMLEVBQW9CLE9BQU8sS0FBUDtBQUVwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtGSCxDQXpGRDs7QUEyRmUsbUVBQUkzcUIsSUFBSixFQUFmO0FBRUE7Ozs7Ozs7Ozs7Ozs7O0FDMXJCQTtBQUFBO0FBQUE7QUFBQTtBQUNBOztBQUVBLE1BQU1rWSxFQUFFLEdBQUd4RixtQkFBTyxDQUFDLGNBQUQsQ0FBbEI7O0FBQ0EsTUFBTXVGLElBQUksR0FBR3ZGLG1CQUFPLENBQUMsa0JBQUQsQ0FBcEI7O0FBQ0EsTUFBTWtZLGNBQWMsR0FBR3h1QixhQUFhLENBQUN5dUIsT0FBZCxHQUF3Qnp1QixhQUFhLENBQUN5dUIsT0FBZCxDQUFzQkQsY0FBOUMsR0FBK0R4dUIsYUFBYSxDQUFDMHVCLEdBQWQsR0FBb0IxdUIsYUFBYSxDQUFDMHVCLEdBQWQsQ0FBa0JDLGlCQUFsQixFQUFwQixHQUE0RCxRQUFsSjtBQUVBLElBQUl6UixRQUFRLEdBQUcsRUFBZjtBQUNBLElBQUkvYixPQUFPLENBQUNDLFFBQVIsS0FBcUIsT0FBekIsRUFBa0M4YixRQUFRLEdBQUcvYixPQUFPLENBQUN5dEIsR0FBUixDQUFZQyxPQUF2QixDQUFsQyxLQUNLLElBQUkxdEIsT0FBTyxDQUFDQyxRQUFSLEtBQXFCLFFBQXpCLEVBQW1DOGIsUUFBUSxHQUFHckIsSUFBSSxDQUFDMU8sSUFBTCxDQUFVaE0sT0FBTyxDQUFDeXRCLEdBQVIsQ0FBWUUsSUFBdEIsRUFBNEIsU0FBNUIsRUFBdUMsYUFBdkMsQ0FBWCxDQUFuQyxLQUNBNVIsUUFBUSxHQUFHL2IsT0FBTyxDQUFDeXRCLEdBQVIsQ0FBWUcsZUFBWixHQUE4QjV0QixPQUFPLENBQUN5dEIsR0FBUixDQUFZRyxlQUExQyxHQUE0RGxULElBQUksQ0FBQzFPLElBQUwsQ0FBVWhNLE9BQU8sQ0FBQ3l0QixHQUFSLENBQVlFLElBQXRCLEVBQTRCLFNBQTVCLENBQXZFO0FBQ0w1UixRQUFRLEdBQUdyQixJQUFJLENBQUMxTyxJQUFMLENBQVUrUCxRQUFWLEVBQW9CLGVBQXBCLENBQVg7QUFFZSxtRUFBSSxNQUFNMVosU0FBTixDQUFnQjtBQUMvQk0sYUFBVyxHQUFHO0FBQ1YsU0FBS3dDLElBQUwsR0FBWTtBQUFDM0YsY0FBUSxFQUFFO0FBQUNxdUIsY0FBTSxFQUFFLEVBQVQ7QUFBYUMsY0FBTSxFQUFFLEVBQXJCO0FBQXlCQyxXQUFHLEVBQUU7QUFBOUI7QUFBWCxLQUFaO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixFQUFsQjtBQUNBcHZCLFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQnZJLFNBQS9CLEdBQTJDLElBQTNDO0FBQ0g7O0FBRURpaEIsWUFBVSxHQUFHO0FBQ1QsUUFBSTtBQUNBLFVBQUksQ0FBQzNJLEVBQUUsQ0FBQ3dGLFVBQUgsQ0FBYyxLQUFLOE4sTUFBbkIsQ0FBTCxFQUFpQ3RULEVBQUUsQ0FBQ3VULGFBQUgsQ0FBaUIsS0FBS0QsTUFBdEIsRUFBOEIxUixJQUFJLENBQUNPLFNBQUwsQ0FBZSxLQUFLM1gsSUFBcEIsRUFBMEIsSUFBMUIsRUFBZ0MsQ0FBaEMsQ0FBOUIsRUFBa0UsT0FBbEU7QUFDakMsWUFBTUEsSUFBSSxHQUFHb1gsSUFBSSxDQUFDQyxLQUFMLENBQVc3QixFQUFFLENBQUN5RixZQUFILENBQWdCLEtBQUs2TixNQUFyQixFQUE2QixPQUE3QixDQUFYLENBQWI7QUFDQSxVQUFJOW9CLElBQUksQ0FBQ2tNLGNBQUwsQ0FBb0IsVUFBcEIsQ0FBSixFQUFxQyxLQUFLbE0sSUFBTCxHQUFZQSxJQUFaO0FBQ3JDLFVBQUksQ0FBQ3dWLEVBQUUsQ0FBQ3dGLFVBQUgsQ0FBYyxLQUFLZ08sWUFBbkIsQ0FBTCxFQUF1Qzs7QUFDdkMsVUFBSTN1QixRQUFRLEdBQUdraUIsT0FBdUIsQ0FBQyxLQUFLeU0sWUFBTixDQUF0Qzs7QUFDQXhULFFBQUUsQ0FBQ3lULFVBQUgsQ0FBYyxLQUFLRCxZQUFuQjtBQUNBLFVBQUkzdUIsUUFBUSxDQUFDNlIsY0FBVCxDQUF3QixVQUF4QixDQUFKLEVBQXlDN1IsUUFBUSxHQUFHcUIsTUFBTSxDQUFDc1osTUFBUCxDQUFjO0FBQUMwVCxjQUFNLEVBQUUsRUFBVDtBQUFhQyxjQUFNLEVBQUUsRUFBckI7QUFBeUJDLFdBQUcsRUFBRTtBQUE5QixPQUFkLEVBQWlEO0FBQUMsU0FBQ1YsY0FBRCxHQUFrQjd0QjtBQUFuQixPQUFqRCxDQUFYLENBQXpDLEtBQ0tBLFFBQVEsR0FBR3FCLE1BQU0sQ0FBQ3NaLE1BQVAsQ0FBYztBQUFDMFQsY0FBTSxFQUFFLEVBQVQ7QUFBYUMsY0FBTSxFQUFFLEVBQXJCO0FBQXlCQyxXQUFHLEVBQUU7QUFBOUIsT0FBZCxFQUFpRHZ1QixRQUFqRCxDQUFYO0FBQ0wsV0FBSzJVLFNBQUwsQ0FBZSxVQUFmLEVBQTJCM1UsUUFBM0I7QUFDSCxLQVZELENBV0EsT0FBT29lLEdBQVAsRUFBWTtBQUNSelQsYUFBTyxDQUFDbU0sS0FBUixDQUFjc0gsR0FBZDtBQUNBamMsb0RBQUssQ0FBQzhQLEtBQU4sQ0FBWSxpQkFBWixFQUErQiw2R0FBL0I7QUFDSDtBQUNKOztBQUVELE1BQUkyYixhQUFKLEdBQW9CO0FBQ2hCLFdBQU8sS0FBS2lCLGNBQUwsR0FBc0IsSUFBN0I7QUFDSDs7QUFFRCxNQUFJQyxVQUFKLEdBQWlCO0FBQUMsV0FBTyxLQUFLQyxXQUFMLEtBQXFCLEtBQUtBLFdBQUwsR0FBbUI3VCxJQUFJLENBQUNJLE9BQUwsQ0FBYSxLQUFLc1MsYUFBbEIsRUFBaUMsZUFBakMsRUFBa0QsYUFBbEQsQ0FBeEMsQ0FBUDtBQUFrSDs7QUFDcEksTUFBSWEsTUFBSixHQUFhO0FBQUMsV0FBTyxLQUFLTyxPQUFMLEtBQWlCLEtBQUtBLE9BQUwsR0FBZTlULElBQUksQ0FBQ0ksT0FBTCxDQUFhaUIsUUFBYixFQUF1QixnQkFBdkIsQ0FBaEMsQ0FBUDtBQUFrRjs7QUFDaEcsTUFBSW9TLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtNLGFBQUwsS0FBdUIsS0FBS0EsYUFBTCxHQUFxQi9ULElBQUksQ0FBQ0ksT0FBTCxDQUFhaUIsUUFBYixFQUF1QixpQkFBdkIsQ0FBNUMsQ0FBUDtBQUErRjs7QUFDbkgyUyxlQUFhLENBQUM5YixVQUFELEVBQWE7QUFBQyxXQUFPOEgsSUFBSSxDQUFDSSxPQUFMLENBQWF4WSx1REFBYyxDQUFDc1osYUFBNUIsRUFBMkNoSixVQUFVLEdBQUcsY0FBeEQsQ0FBUDtBQUFnRjs7QUFFM0d3SixpQkFBZSxDQUFDN2EsR0FBRCxFQUFNO0FBQ2pCLFdBQU8sS0FBSzRELElBQUwsQ0FBVTNGLFFBQVYsQ0FBbUI2dEIsY0FBbkIsRUFBbUM5ckIsR0FBbkMsS0FBMkMsSUFBbEQ7QUFDSDs7QUFFRDhhLGlCQUFlLENBQUM5YSxHQUFELEVBQU00RCxJQUFOLEVBQVk7QUFDdkIsU0FBS0EsSUFBTCxDQUFVM0YsUUFBVixDQUFtQjZ0QixjQUFuQixFQUFtQzlyQixHQUFuQyxJQUEwQzRELElBQTFDO0FBQ0F3VixNQUFFLENBQUN1VCxhQUFILENBQWlCLEtBQUtELE1BQXRCLEVBQThCMVIsSUFBSSxDQUFDTyxTQUFMLENBQWUsS0FBSzNYLElBQXBCLEVBQTBCLElBQTFCLEVBQWdDLENBQWhDLENBQTlCLEVBQWtFLE9BQWxFO0FBQ0g7O0FBRUQrTyxXQUFTLENBQUMzUyxHQUFELEVBQU07QUFDWCxXQUFPLEtBQUs0RCxJQUFMLENBQVU1RCxHQUFWLEtBQWtCLEVBQXpCO0FBQ0g7O0FBRUQ0UyxXQUFTLENBQUM1UyxHQUFELEVBQU1DLEtBQU4sRUFBYTtBQUNsQixTQUFLMkQsSUFBTCxDQUFVNUQsR0FBVixJQUFpQkMsS0FBakI7QUFDQW1aLE1BQUUsQ0FBQ3VULGFBQUgsQ0FBaUIsS0FBS0QsTUFBdEIsRUFBOEIxUixJQUFJLENBQUNPLFNBQUwsQ0FBZSxLQUFLM1gsSUFBcEIsRUFBMEIsSUFBMUIsRUFBZ0MsQ0FBaEMsQ0FBOUIsRUFBa0UsT0FBbEU7QUFDSDs7QUFFRDBOLGVBQWEsQ0FBQ0QsVUFBRCxFQUFhclIsR0FBYixFQUFrQjtBQUMzQixRQUFJLEtBQUt5c0IsVUFBTCxDQUFnQnBiLFVBQWhCLE1BQWdDM08sU0FBcEMsRUFBK0MsT0FBTyxLQUFLK3BCLFVBQUwsQ0FBZ0JwYixVQUFoQixFQUE0QnJSLEdBQTVCLENBQVA7QUFDL0MsUUFBSSxDQUFDb1osRUFBRSxDQUFDd0YsVUFBSCxDQUFjLEtBQUt1TyxhQUFMLENBQW1COWIsVUFBbkIsQ0FBZCxDQUFMLEVBQW9ELE9BQU8zTyxTQUFQO0FBQ3BELFNBQUsrcEIsVUFBTCxDQUFnQnBiLFVBQWhCLElBQThCMkosSUFBSSxDQUFDQyxLQUFMLENBQVc3QixFQUFFLENBQUN5RixZQUFILENBQWdCLEtBQUtzTyxhQUFMLENBQW1COWIsVUFBbkIsQ0FBaEIsQ0FBWCxDQUE5QjtBQUNBLFdBQU8sS0FBS29iLFVBQUwsQ0FBZ0JwYixVQUFoQixFQUE0QnJSLEdBQTVCLENBQVA7QUFDSDs7QUFFRHlSLGVBQWEsQ0FBQ0osVUFBRCxFQUFhclIsR0FBYixFQUFrQkMsS0FBbEIsRUFBeUI7QUFDbEMsUUFBSUEsS0FBSyxLQUFLeUMsU0FBZCxFQUF5QjtBQUN6QixRQUFJLEtBQUsrcEIsVUFBTCxDQUFnQnBiLFVBQWhCLE1BQWdDM08sU0FBcEMsRUFBK0MsS0FBSytwQixVQUFMLENBQWdCcGIsVUFBaEIsSUFBOEIsRUFBOUI7QUFDL0MsU0FBS29iLFVBQUwsQ0FBZ0JwYixVQUFoQixFQUE0QnJSLEdBQTVCLElBQW1DQyxLQUFuQztBQUNBbVosTUFBRSxDQUFDdVQsYUFBSCxDQUFpQixLQUFLUSxhQUFMLENBQW1COWIsVUFBbkIsQ0FBakIsRUFBaUQySixJQUFJLENBQUNPLFNBQUwsQ0FBZSxLQUFLa1IsVUFBTCxDQUFnQnBiLFVBQWhCLENBQWYsRUFBNEMsSUFBNUMsRUFBa0QsQ0FBbEQsQ0FBakQsRUFBdUcsT0FBdkc7QUFDSDs7QUFFRE8sa0JBQWdCLENBQUNQLFVBQUQsRUFBYXJSLEdBQWIsRUFBa0I7QUFDOUIsUUFBSSxLQUFLeXNCLFVBQUwsQ0FBZ0JwYixVQUFoQixNQUFnQzNPLFNBQXBDLEVBQStDLEtBQUsrcEIsVUFBTCxDQUFnQnBiLFVBQWhCLElBQThCLEVBQTlCO0FBQy9DLFdBQU8sS0FBS29iLFVBQUwsQ0FBZ0JwYixVQUFoQixFQUE0QnJSLEdBQTVCLENBQVA7QUFDQW9aLE1BQUUsQ0FBQ3VULGFBQUgsQ0FBaUIsS0FBS1EsYUFBTCxDQUFtQjliLFVBQW5CLENBQWpCLEVBQWlEMkosSUFBSSxDQUFDTyxTQUFMLENBQWUsS0FBS2tSLFVBQUwsQ0FBZ0JwYixVQUFoQixDQUFmLEVBQTRDLElBQTVDLEVBQWtELENBQWxELENBQWpELEVBQXVHLE9BQXZHO0FBQ0g7O0FBdEU4QixDQUFwQixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ2JBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU0rYixPQUFOLENBQWM7QUFDN0Joc0IsYUFBVyxHQUFHO0FBQ1YsU0FBS2lzQixhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJ6cUIsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBckI7QUFDQSxTQUFLMHFCLG9CQUFMLEdBQTRCLEtBQUtBLG9CQUFMLENBQTBCMXFCLElBQTFCLENBQStCLElBQS9CLENBQTVCO0FBQ0g7O0FBRUR5RixPQUFLLEdBQUc7QUFDSixTQUFLa2xCLGtCQUFMO0FBQ0EsUUFBSTN1Qix3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUMsS0FBSzR1QixpQkFBTDtBQUNwQzs7QUFFRHJZLE1BQUksR0FBRztBQUNILFNBQUtzWSxpQkFBTDtBQUNBLFNBQUtDLGdCQUFMO0FBQ0g7O0FBRURILG9CQUFrQixHQUFHO0FBQ2pCLFNBQUtFLGlCQUFMO0FBQ0EvckIsWUFBUSxDQUFDdUssZ0JBQVQsQ0FBMEIsU0FBMUIsRUFBcUMsS0FBS29oQixhQUExQztBQUNIOztBQUVESSxtQkFBaUIsR0FBRztBQUNoQi9yQixZQUFRLENBQUNxSyxtQkFBVCxDQUE2QixTQUE3QixFQUF3QyxLQUFLc2hCLGFBQTdDO0FBQ0g7O0FBRURHLG1CQUFpQixHQUFHO0FBQ2hCLFNBQUtFLGdCQUFMO0FBQ0Foc0IsWUFBUSxDQUFDdUssZ0JBQVQsQ0FBMEIsYUFBMUIsRUFBeUMsS0FBS3FoQixvQkFBOUM7QUFDSDs7QUFFREksa0JBQWdCLEdBQUc7QUFDZmhzQixZQUFRLENBQUNxSyxtQkFBVCxDQUE2QixhQUE3QixFQUE0QyxLQUFLdWhCLG9CQUFqRDtBQUNIOztBQUVERCxlQUFhLENBQUN0b0IsQ0FBRCxFQUFJO0FBQ2IsUUFBSUEsQ0FBQyxDQUFDNkcsS0FBRixLQUFZLEdBQVosSUFBbUI3RyxDQUFDLENBQUM2RyxLQUFGLElBQVcsR0FBbEMsRUFBdUM7QUFBQztBQUNwQ2hELGFBQU8sQ0FBQ0MsR0FBUixDQUFZLGdDQUFaLEVBQThDLGFBQTlDLEVBQTZELGtDQUE3RCxFQUFpRyxZQUFqRyxFQUErRyxFQUEvRztBQUNBLGVBRm1DLENBRXpCOztBQUNWOUQsT0FBQyxDQUFDNG9CLGNBQUY7QUFDQTVvQixPQUFDLENBQUM2b0Isd0JBQUY7QUFDRjtBQUNMOztBQUVETixzQkFBb0IsQ0FBQ3ZvQixDQUFELEVBQUk7QUFDcEIsUUFBRztBQUNDQSxPQUFDLENBQUM4b0IsZUFBRjtBQUNBLFlBQU1DLFFBQVEsR0FBRyxLQUFLQyxXQUFMLENBQWlCaHBCLENBQUMsQ0FBQ3dmLE1BQW5CLENBQWpCO0FBRUEsVUFBSSxDQUNBeUosVUFEQSxFQUVBQyxVQUZBLElBR0EsQ0FDQW5wQixTQUFTLENBQUMzRSxHQUFWLENBQWU0RSxDQUFELElBQU9BLENBQUMsQ0FBQytFLEtBQUYsSUFBVyxPQUFPL0UsQ0FBQyxDQUFDK0UsS0FBVCxLQUFtQixRQUE5QixJQUEwQy9FLENBQUMsQ0FBQ21wQixxQkFBakUsRUFBd0YsQ0FBeEYsQ0FEQSxFQUVBcHBCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBZTRFLENBQUQsSUFBT0EsQ0FBQyxDQUFDb3BCLElBQXZCLEVBQTZCLENBQTdCLENBRkEsQ0FISjs7QUFRQSxlQUFTQyxNQUFULEdBQWtCO0FBQ2QsWUFBRyxDQUFDSCxVQUFELElBQWUsQ0FBQ0QsVUFBVSxDQUFDbGtCLEtBQTlCLEVBQW9DLE9BQU9sQixPQUFPLENBQUNDLEdBQVIsQ0FBWW9sQixVQUFaLEVBQXdCRCxVQUFVLENBQUNsa0IsS0FBbkMsQ0FBUDtBQUVwQyxZQUFJdWtCLEVBQUUsR0FBR2pmLGlEQUFHLENBQUNrZixLQUFKLENBQVUsTUFBSWx1Qiw4Q0FBSyxDQUFDc0osUUFBTixDQUFldWtCLFVBQVUsQ0FBQ0UsSUFBMUIsQ0FBZCxDQUFUOztBQUNBLFlBQUksQ0FBQ0UsRUFBTCxFQUFTO0FBQ0wsZ0JBQU1FLFNBQVMsR0FBR25mLGlEQUFHLENBQUNrZixLQUFKLENBQVUsbUJBQWlCbHVCLDhDQUFLLENBQUNzSixRQUFOLENBQWVza0IsVUFBVSxDQUFDUSxjQUExQixDQUEzQixDQUFsQjtBQUNBLGdCQUFNQyxNQUFNLEdBQUdyZixpREFBRyxDQUFDek4sYUFBSixDQUFtQixlQUFjcXNCLFVBQVUsQ0FBQ2xrQixLQUFNLElBQWxELENBQWY7QUFDQXVrQixZQUFFLEdBQUdqZixpREFBRyxDQUFDek4sYUFBSixDQUFtQixlQUFjc3NCLFVBQVUsQ0FBQ0UsSUFBSyxJQUFHRixVQUFVLENBQUNTLGFBQWMsSUFBR1QsVUFBVSxDQUFDVSxvQkFBcUIsbUNBQWhILENBQUw7QUFDQUYsZ0JBQU0sQ0FBQ0csTUFBUCxDQUFjUCxFQUFkO0FBQ0FFLG1CQUFTLENBQUNLLE1BQVYsQ0FBaUJILE1BQWpCO0FBQ0FBLGdCQUFNLENBQUM5aEIsS0FBUCxDQUFhUyxHQUFiLEdBQW1CckksQ0FBQyxDQUFDOHBCLE9BQUYsR0FBWSxJQUEvQjtBQUNBSixnQkFBTSxDQUFDOWhCLEtBQVAsQ0FBYVksSUFBYixHQUFvQnhJLENBQUMsQ0FBQytwQixPQUFGLEdBQVksSUFBaEM7QUFDQUwsZ0JBQU0sQ0FBQzNILFlBQVAsQ0FBb0IsTUFBcEIsRUFBNEIsTUFBNUI7QUFDQTJILGdCQUFNLENBQUMzSCxZQUFQLENBQW9CLFVBQXBCLEVBQWdDLElBQWhDO0FBQ0EySCxnQkFBTSxDQUFDdndCLEVBQVAsR0FBWSwwQkFBWjtBQUNBdXdCLGdCQUFNLENBQUMzSCxZQUFQLENBQW9CLFlBQXBCLEVBQWtDLHVCQUFsQztBQUVBLGdCQUFNaUksZUFBZSxHQUFHanFCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBZTRFLENBQUQsSUFBT0EsQ0FBQyxDQUFDaXFCLFlBQXZCLEVBQXFDLENBQXJDLENBQXhCO0FBQ0EsZ0JBQU1BLFlBQVksR0FBRzVmLGlEQUFHLENBQUN6TixhQUFKLENBQW1CLGVBQWNvdEIsZUFBZSxDQUFDQyxZQUFhLElBQUdELGVBQWUsQ0FBQ0UsY0FBZSxJQUFHRixlQUFlLENBQUNHLGtCQUFtQixVQUF0SSxDQUFyQjtBQUNBLGdCQUFNQyxRQUFRLEdBQUcvZixpREFBRyxDQUFDek4sYUFBSixDQUFtQixlQUFjbUQsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNvcUIsUUFBckIsRUFBK0IsQ0FBL0IsRUFBa0NBLFFBQVMsSUFBR2xCLFVBQVUsQ0FBQ2tCLFFBQVMsVUFBbkcsQ0FBakI7QUFDQUgsc0JBQVksQ0FBQ0osTUFBYixDQUFvQk8sUUFBcEI7QUFDQWQsWUFBRSxDQUFDTyxNQUFILENBQVVJLFlBQVY7O0FBRUEsZ0JBQU1JLFFBQVEsR0FBRyxVQUFTcnFCLENBQVQsRUFBWTtBQUN6QixnQkFBSUEsQ0FBQyxDQUFDc3FCLE9BQUYsSUFBYXRxQixDQUFDLENBQUNzcUIsT0FBRixLQUFjLEVBQS9CLEVBQW1DO0FBQ25DWixrQkFBTSxDQUFDdmpCLE1BQVA7QUFDQXhKLG9CQUFRLENBQUNxSyxtQkFBVCxDQUE2QixPQUE3QixFQUFzQ3FqQixRQUF0QztBQUNBMXRCLG9CQUFRLENBQUNxSyxtQkFBVCxDQUE2QixhQUE3QixFQUE0Q3FqQixRQUE1QztBQUNBMXRCLG9CQUFRLENBQUNxSyxtQkFBVCxDQUE2QixPQUE3QixFQUFzQ3FqQixRQUF0QztBQUNILFdBTkQ7O0FBT0ExdEIsa0JBQVEsQ0FBQ3VLLGdCQUFULENBQTBCLE9BQTFCLEVBQW1DbWpCLFFBQW5DO0FBQ0ExdEIsa0JBQVEsQ0FBQ3VLLGdCQUFULENBQTBCLGFBQTFCLEVBQXlDbWpCLFFBQXpDO0FBQ0ExdEIsa0JBQVEsQ0FBQ3VLLGdCQUFULENBQTBCLE9BQTFCLEVBQW1DbWpCLFFBQW5DO0FBQ0g7O0FBQ0QsY0FBTVgsTUFBTSxHQUFHSixFQUFFLENBQUN0SCxhQUFsQjtBQUVBLGNBQU1vSSxRQUFRLEdBQUdkLEVBQUUsQ0FBQ3hELFVBQUgsQ0FBYyxDQUFkLEVBQWlCQSxVQUFqQixDQUE0QixDQUE1QixDQUFqQjtBQUNBLGNBQU15RSxHQUFHLEdBQUdsZ0IsaURBQUcsQ0FBQ3pOLGFBQUosQ0FBbUIsMEJBQW5CLENBQVo7QUFDQTs7OztBQUdBLGNBQU00dEIsR0FBRyxHQUFHbmdCLGlEQUFHLENBQUN6TixhQUFKLENBQW1CLGVBQWNzc0IsVUFBVSxDQUFDdUIsSUFBSyxJQUFHdkIsVUFBVSxDQUFDd0IsY0FBZSxJQUFHeEIsVUFBVSxDQUFDeUIsWUFBYSx3REFBekcsQ0FBWjtBQUNBSCxXQUFHLENBQUNYLE1BQUosQ0FBV3hmLGlEQUFHLENBQUN6TixhQUFKLENBQW1CLGVBQWNzc0IsVUFBVSxDQUFDMEIsS0FBTSx1QkFBbEQsQ0FBWDtBQUNBSixXQUFHLENBQUN0akIsZ0JBQUosQ0FBcUIsT0FBckIsRUFBOEIsTUFBTTtBQUNoQ3hMLHFEQUFJLENBQUNtdkIsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIvQixRQUF2QjtBQUNBVyxnQkFBTSxDQUFDOWhCLEtBQVAsQ0FBYWEsT0FBYixHQUF1QixNQUF2QjtBQUNILFNBSEQ7QUFJQStoQixXQUFHLENBQUN0akIsZ0JBQUosQ0FBcUIsV0FBckIsRUFBbUNsSCxDQUFELElBQU87QUFDckMsY0FBSStxQixRQUFRLEdBQUcxZ0IsaURBQUcsQ0FBQzJnQixRQUFKLENBQWEsd0JBQXNCM3ZCLDhDQUFLLENBQUNzSixRQUFOLENBQWV1a0IsVUFBVSxDQUFDK0IsT0FBMUIsQ0FBbkMsQ0FBZjtBQUNBRixrQkFBUSxJQUFJQSxRQUFRLENBQUNwbEIsT0FBVCxDQUFpQnVPLElBQUksSUFBSUEsSUFBSSxDQUFDN08sU0FBTCxDQUFlYyxNQUFmLENBQXNCK2lCLFVBQVUsQ0FBQytCLE9BQWpDLENBQXpCLENBQVo7QUFDQVQsYUFBRyxDQUFDbmxCLFNBQUosQ0FBY2lOLEdBQWQsQ0FBa0I0VyxVQUFVLENBQUMrQixPQUE3QjtBQUNILFNBSkQ7QUFLQVQsV0FBRyxDQUFDdGpCLGdCQUFKLENBQXFCLFVBQXJCLEVBQWtDbEgsQ0FBRCxJQUFPO0FBQ3BDd3FCLGFBQUcsQ0FBQ25sQixTQUFKLENBQWNjLE1BQWQsQ0FBcUIraUIsVUFBVSxDQUFDK0IsT0FBaEM7QUFDSCxTQUZEO0FBR0FWLFdBQUcsQ0FBQ1YsTUFBSixDQUFXVyxHQUFYOztBQUNBLFlBQUdKLFFBQVEsQ0FBQ3RFLFVBQVQsQ0FBb0I3bUIsTUFBdkIsRUFBOEI7QUFBRTtBQUM1QixnQkFBTWlzQixTQUFTLEdBQUc3Z0IsaURBQUcsQ0FBQ3pOLGFBQUosQ0FBbUIsZ0NBQStCc3NCLFVBQVUsQ0FBQ2dDLFNBQVUsVUFBdkUsQ0FBbEI7QUFDQWQsa0JBQVEsQ0FBQ1AsTUFBVCxDQUFnQnFCLFNBQWhCO0FBQ0g7O0FBQ0RkLGdCQUFRLENBQUNQLE1BQVQsQ0FBZ0JVLEdBQWhCOztBQUNBLFlBQUdiLE1BQU0sQ0FBQzNmLFlBQVAsR0FBc0IyZixNQUFNLENBQUN5QixZQUFoQyxFQUE2QztBQUN6Q3RuQixpQkFBTyxDQUFDQyxHQUFSLENBQVksaUJBQWU0bEIsTUFBTSxDQUFDOWhCLEtBQVAsQ0FBYVMsR0FBeEM7QUFDQXFoQixnQkFBTSxDQUFDOWhCLEtBQVAsQ0FBYVMsR0FBYixHQUFvQnFoQixNQUFNLENBQUM5aEIsS0FBUCxDQUFhUyxHQUFiLEdBQW1Ca2lCLEdBQUcsQ0FBQ3hnQixZQUF4QixHQUF3QyxJQUEzRDtBQUNBbEcsaUJBQU8sQ0FBQ0MsR0FBUixDQUFZLGdCQUFjNGxCLE1BQU0sQ0FBQzloQixLQUFQLENBQWFTLEdBQXZDO0FBQ0g7QUFDSjs7QUFFRCtPLGdCQUFVLENBQUNpUyxNQUFELEVBQVMsQ0FBVCxDQUFWO0FBQ0gsS0FqRkQsQ0FpRkMsT0FBTXJwQixDQUFOLEVBQVE7QUFDTDZELGFBQU8sQ0FBQ21NLEtBQVIsQ0FBY2hRLENBQWQ7QUFDSDtBQUNKOztBQUVEZ3BCLGFBQVcsQ0FBQy9XLE9BQUQsRUFBVTtBQUNqQixRQUFJQSxPQUFPLENBQUM5WSxFQUFaLEVBQWdCLE9BQVEsSUFBRzhZLE9BQU8sQ0FBQzlZLEVBQUcsRUFBdEI7QUFDaEI7Ozs7O0FBSUEsYUFBU2l5QixRQUFULENBQWtCQyxFQUFsQixFQUFxQjtBQUNqQixVQUFJQyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxhQUFPRCxFQUFFLENBQUNFLFVBQVYsRUFBcUI7QUFDbkIsWUFBSUYsRUFBRSxDQUFDbHlCLEVBQVAsRUFBVTtBQUNSbXlCLGVBQUssQ0FBQ0UsT0FBTixDQUFjLE1BQUlILEVBQUUsQ0FBQ2x5QixFQUFyQjtBQUNBO0FBQ0QsU0FIRCxNQUdLO0FBQ0gsY0FBSWt5QixFQUFFLElBQUVBLEVBQUUsQ0FBQ0ksYUFBSCxDQUFpQjloQixlQUF6QixFQUEwQzJoQixLQUFLLENBQUNFLE9BQU4sQ0FBY0gsRUFBRSxDQUFDSyxPQUFILENBQVdydEIsV0FBWCxLQUF5QjhTLEtBQUssQ0FBQ2lNLElBQU4sQ0FBV2lPLEVBQUUsQ0FBQ2htQixTQUFILENBQWFzbUIsT0FBYixFQUFYLEVBQW1DeHBCLEdBQW5DLENBQXVDbkMsQ0FBQyxJQUFJLE1BQUlBLENBQWhELEVBQW1EMEYsSUFBbkQsQ0FBd0QsRUFBeEQsQ0FBdkMsRUFBMUMsS0FDSTtBQUNGLGlCQUFLLElBQUl5TSxDQUFDLEdBQUMsQ0FBTixFQUFRblMsQ0FBQyxHQUFDcXJCLEVBQWYsRUFBa0JyckIsQ0FBQyxDQUFDNHJCLHNCQUFwQixFQUEyQzVyQixDQUFDLEdBQUNBLENBQUMsQ0FBQzRyQixzQkFBSixFQUEyQnpaLENBQUMsRUFBdkUsQ0FBMEU7O0FBQzFFbVosaUJBQUssQ0FBQ0UsT0FBTixDQUFjSCxFQUFFLENBQUNLLE9BQUgsQ0FBV3J0QixXQUFYLEtBQXlCLENBQUUsT0FBT2d0QixFQUFFLENBQUN4dUIsU0FBVixLQUF3QixRQUF4QixJQUFvQ3d1QixFQUFFLENBQUN4dUIsU0FBeEMsSUFBc0QsRUFBdkQsRUFBMkQySSxLQUEzRCxDQUFpRSxHQUFqRSxFQUFzRXlELE1BQXRFLENBQTZFakosQ0FBQyxJQUFJLENBQUMsQ0FBQ0EsQ0FBcEYsRUFBdUZtQyxHQUF2RixDQUEyRm5DLENBQUMsSUFBSSxNQUFJQSxDQUFwRyxFQUF1RzBGLElBQXZHLENBQTRHLEVBQTVHLENBQXpCLEdBQXlJLGFBQXpJLEdBQXVKeU0sQ0FBdkosR0FBeUosR0FBdks7QUFDRDtBQUNEa1osWUFBRSxHQUFDQSxFQUFFLENBQUNFLFVBQU47QUFDRDtBQUNGOztBQUNELGFBQU9ELEtBQUssQ0FBQzVsQixJQUFOLENBQVcsS0FBWCxDQUFQO0FBQ0g7O0FBQ0QsV0FBTzBsQixRQUFRLENBQUNuWixPQUFELENBQWY7QUFDSDs7QUExSjRCLENBQWxCLEVBQWYsRTs7Ozs7Ozs7Ozs7O0FDTEE7QUFBZSxtRUFBSSxNQUFNNFosYUFBTixDQUFvQjtBQUNuQ3h2QixhQUFXLEdBQUU7QUFDVC9ELFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQjZaLGNBQXJCLENBQW9DOWUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVU2ckIsV0FBaEUsRUFDQy9NLElBREQsQ0FDTWdOLFlBQVksSUFBSTtBQUNsQixVQUFJdFMsSUFBSSxHQUFHLElBQVg7QUFDQSxZQUFNcVMsV0FBVyxHQUFHQyxZQUFZLENBQUM5ckIsT0FBYixDQUFxQjZyQixXQUF6Qzs7QUFDQUMsa0JBQVksQ0FBQzlyQixPQUFiLENBQXFCNnJCLFdBQXJCLEdBQW1DLFlBQVU7QUFDekMsWUFBR3JTLElBQUksQ0FBQ3VTLFFBQVIsRUFBaUIsT0FBT0YsV0FBVyxDQUFDMW1CLElBQVosQ0FBaUIsSUFBakIsRUFBdUIsR0FBRzdILFNBQTFCLENBQVA7QUFDcEIsT0FGRDs7QUFHQSxZQUFNMHVCLFVBQVUsR0FBR0YsWUFBWSxDQUFDOXJCLE9BQWIsQ0FBcUJnc0IsVUFBeEM7O0FBQ0FGLGtCQUFZLENBQUM5ckIsT0FBYixDQUFxQmdzQixVQUFyQixHQUFrQyxZQUFVO0FBQ3hDLFlBQUd4UyxJQUFJLENBQUN1UyxRQUFSLEVBQWlCLE9BQU9DLFVBQVUsQ0FBQzdtQixJQUFYLENBQWdCLElBQWhCLEVBQXNCLEdBQUc3SCxTQUF6QixDQUFQO0FBQ3BCLE9BRkQ7O0FBR0EsV0FBS3l1QixRQUFMLEdBQWdCLElBQWhCO0FBQ0gsS0FaRDtBQWFBMXpCLFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQnVuQixhQUEvQixHQUErQyxJQUEvQztBQUNIOztBQUVEN3FCLFNBQU8sR0FBRTtBQUNMLFNBQUtnckIsUUFBTCxHQUFnQixJQUFoQjtBQUNIOztBQUVEbHJCLFFBQU0sR0FBRTtBQUNKLFNBQUtrckIsUUFBTCxHQUFnQixLQUFoQjtBQUNIOztBQXhCa0MsQ0FBeEIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLFNBQVNsbUIsTUFBVCxHQUFrQjtBQUFFO0FBQ3ZCLFNBQU8sdUNBQXVDNUcsT0FBdkMsQ0FBK0MsT0FBL0MsRUFBd0QsVUFBU2lULENBQVQsRUFBWTtBQUN2RSxRQUFJZ0YsQ0FBQyxHQUFHMU4sSUFBSSxDQUFDeWlCLE1BQUwsS0FBZ0IsRUFBaEIsR0FBcUIsQ0FBN0I7QUFBQSxRQUFnQ0MsQ0FBQyxHQUFHaGEsQ0FBQyxJQUFJLEdBQUwsR0FBV2dGLENBQVgsR0FBZ0JBLENBQUMsR0FBRyxHQUFKLEdBQVUsR0FBOUQ7QUFDQSxXQUFPZ1YsQ0FBQyxDQUFDOU8sUUFBRixDQUFXLEVBQVgsQ0FBUDtBQUNILEdBSE0sQ0FBUDtBQUlIO0FBRUQsTUFBTStPLHNCQUFzQixHQUFHLEVBQS9CO0FBQ0EsSUFBSUMsYUFBYSxHQUFHLEVBQXBCO0FBRWUsbUVBQUksTUFBTUMsYUFBTixDQUFvQjtBQUNuQ2p3QixhQUFXLEdBQUU7QUFDVCxTQUFLa3dCLE1BQUwsR0FBYztBQUNWckcsWUFBTSxFQUFFO0FBREUsS0FBZDtBQUtBNXRCLFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQmdvQixhQUEvQixHQUErQyxJQUEvQztBQUNIOztBQUVELE1BQUkvUSxLQUFKLEdBQVc7QUFDUCxXQUFPLEtBQUtnUixNQUFaO0FBQ0g7O0FBRUQsTUFBSWhSLEtBQUosQ0FBVTFjLElBQVYsRUFBZTtBQUNYLFFBQUcsT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QixPQUFPLEtBQUswdEIsTUFBWixLQUF1QixRQUF0RCxFQUErRCxPQUFPLEtBQUtBLE1BQUwsR0FBYzF0QixJQUFyQjtBQUMvRCxXQUFPLEtBQUswdEIsTUFBTCxHQUFjaHlCLE1BQU0sQ0FBQ3NaLE1BQVAsQ0FBYyxLQUFLMFksTUFBbkIsRUFBMkIxdEIsSUFBM0IsQ0FBckI7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsUUFBTW9uQixTQUFOLENBQWdCN0csSUFBaEIsRUFBcUI7QUFDakIsUUFBRyxLQUFLN0QsS0FBTCxDQUFXMkssTUFBWCxDQUFrQjlHLElBQWxCLENBQUgsRUFBMkIsT0FBTyxLQUFLN0QsS0FBTCxDQUFXMkssTUFBWCxDQUFrQjlHLElBQWxCLENBQVA7QUFDM0IsUUFBR2dOLHNCQUFzQixDQUFDaE4sSUFBRCxDQUF6QixFQUFnQyxPQUFPZ04sc0JBQXNCLENBQUNoTixJQUFELENBQTdCO0FBRWhDLFFBQUk1SyxPQUFKO0FBQ0EsVUFBTWdZLFVBQVUsR0FBRyxJQUFJdFYsT0FBSixDQUFhdVYsR0FBRCxJQUFValksT0FBTyxHQUFHaVksR0FBaEMsQ0FBbkI7QUFDQUwsMEJBQXNCLENBQUNoTixJQUFELENBQXRCLEdBQStCb04sVUFBL0I7QUFFQSxVQUFNdEcsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsU0FBSSxJQUFJeEIsS0FBUixJQUFpQmdJLFNBQVMsQ0FBQ3hHLE1BQTNCLEVBQWtDO0FBQzlCLFVBQUd4QixLQUFLLENBQUNpSSxZQUFOLENBQW1CcnVCLFFBQW5CLENBQTRCOGdCLElBQTVCLENBQUgsRUFBcUM4RyxNQUFNLENBQUN6Z0IsSUFBUCxDQUFZaWYsS0FBWjtBQUN4Qzs7QUFDRCxVQUFNa0ksYUFBYSxHQUFHLE1BQU0sSUFBSTFWLE9BQUosQ0FBYTFDLE9BQUQsSUFBYTtBQUNqRCxVQUFHLENBQUMzYSx3REFBYyxDQUFDLGFBQUQsQ0FBbEIsRUFBa0MsT0FBTzJhLE9BQU8sQ0FBQyxFQUFELENBQWQ7QUFDbEM2WCxtQkFBYSxDQUFDNW1CLElBQWQsQ0FBbUIsQ0FBQzJaLElBQUQsRUFBTzVLLE9BQVAsQ0FBbkI7QUFDQTRDLGdCQUFVLENBQUMsTUFBTTtBQUNiLFlBQUl5VixLQUFLLEdBQUdSLGFBQVo7QUFDQSxZQUFHUSxLQUFLLENBQUM1dEIsTUFBTixLQUFpQixDQUFwQixFQUFzQjtBQUN0Qm90QixxQkFBYSxHQUFHLEVBQWhCO0FBQ0FTLHFCQUFhLENBQUNDLE1BQU0sQ0FBQzdHLE1BQVIsRUFBZ0IsTUFBaEIsRUFBd0JqUSxJQUFJLENBQUNPLFNBQUwsQ0FBZXFXLEtBQUssQ0FBQzFxQixHQUFOLENBQVVuQyxDQUFDLElBQUlBLENBQUMsQ0FBQyxDQUFELENBQWhCLENBQWYsQ0FBeEIsQ0FBYixDQUNDK2UsSUFERCxDQUNNLE1BQU0wTixHQUFOLElBQWE7QUFDZixjQUFHQSxHQUFHLENBQUNPLE1BQUosS0FBZSxHQUFsQixFQUFzQjtBQUFDO0FBQ25CSCxpQkFBSyxDQUFDbG5CLE9BQU4sQ0FBYzlHLElBQUksSUFBSTtBQUNsQkEsa0JBQUksQ0FBQyxDQUFELENBQUosQ0FBUSxFQUFSLEVBRGtCLENBQ1A7QUFDZCxhQUZEO0FBR0g7O0FBQ0QsZ0JBQU1vdUIsWUFBWSxHQUFHLE1BQU1SLEdBQUcsQ0FBQ1MsSUFBSixFQUEzQjs7QUFFQSxlQUFJLElBQUk5TixJQUFSLElBQWdCNk4sWUFBaEIsRUFBNkI7QUFDekIsZ0JBQUlFLE9BQU8sR0FBR04sS0FBSyxDQUFDL25CLElBQU4sQ0FBV3FvQixPQUFPLElBQUlBLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZS9OLElBQUksQ0FBQ2dPLE9BQTFDLENBQWQ7QUFDQUQsbUJBQU8sQ0FBQyxDQUFELENBQVAsQ0FBVy9OLElBQUksQ0FBQzhHLE1BQWhCO0FBQ0g7QUFDSixTQWJELEVBYUdtSCxLQWJILENBYVUvVixHQUFELElBQVM7QUFBQztBQUNmLGNBQUcsRUFBRUEsR0FBRyxZQUFZZ1csY0FBakIsQ0FBSCxFQUFvQ3pwQixPQUFPLENBQUNtTSxLQUFSLENBQWNzSCxHQUFkO0FBQ3BDdVYsZUFBSyxDQUFDbG5CLE9BQU4sQ0FBYzlHLElBQUksSUFBSTtBQUNsQkEsZ0JBQUksQ0FBQyxDQUFELENBQUosQ0FBUSxFQUFSLEVBRGtCLENBQ1A7QUFDZCxXQUZEO0FBR0gsU0FsQkQ7QUFtQkgsT0F2QlMsRUF1QlAsQ0F2Qk8sQ0FBVjtBQXdCSCxLQTNCMkIsQ0FBNUI7O0FBNEJBLFNBQUksSUFBSTZsQixLQUFSLElBQWlCa0ksYUFBakIsRUFBK0I7QUFDM0IsVUFBRyxDQUFDRixTQUFTLENBQUN4RyxNQUFWLENBQWlCcGhCLElBQWpCLENBQXNCOUUsQ0FBQyxJQUFJQSxDQUFDLENBQUM3RyxFQUFGLEtBQVN1ckIsS0FBcEMsQ0FBSixFQUErQyxTQURwQixDQUM2Qjs7QUFDeEQsVUFBR3dCLE1BQU0sQ0FBQ3BoQixJQUFQLENBQVk5RSxDQUFDLElBQUlBLENBQUMsQ0FBQzdHLEVBQUYsS0FBU3VyQixLQUExQixDQUFILEVBQW9DLFNBRlQsQ0FFa0I7O0FBQzdDd0IsWUFBTSxDQUFDemdCLElBQVAsQ0FBWWluQixTQUFTLENBQUN4RyxNQUFWLENBQWlCcGhCLElBQWpCLENBQXNCOUUsQ0FBQyxJQUFJQSxDQUFDLENBQUM3RyxFQUFGLEtBQVN1ckIsS0FBcEMsQ0FBWjtBQUNIOztBQUNELFNBQUtuSixLQUFMLEdBQWE7QUFDVDJLLFlBQU0sRUFBRTNyQixNQUFNLENBQUNzWixNQUFQLENBQWMsS0FBSzBILEtBQUwsQ0FBVzJLLE1BQXpCLEVBQWlDO0FBQUMsU0FBQzlHLElBQUQsR0FBUThHO0FBQVQsT0FBakM7QUFEQyxLQUFiO0FBR0E5TyxjQUFVLENBQUMsTUFBTTtBQUNiLGFBQU8sS0FBS21FLEtBQUwsQ0FBVzJLLE1BQVgsQ0FBa0I5RyxJQUFsQixDQUFQO0FBQ0gsS0FGUyxFQUVQLE1BRk8sQ0FBVjtBQUlBNUssV0FBTyxDQUFDMFIsTUFBRCxDQUFQO0FBQ0EsV0FBT2tHLHNCQUFzQixDQUFDaE4sSUFBRCxDQUE3QjtBQUNBLFdBQU84RyxNQUFQO0FBQ0g7O0FBL0VrQyxDQUF4QixFQUFmOztBQWtGQSxNQUFNNEcsYUFBYSxHQUFHLFVBQVNTLEtBQVQsRUFBZ0JwZ0IsTUFBaEIsRUFBd0J0TyxJQUF4QixFQUE2QjtBQUMvQyxNQUFHLENBQUNoRix3REFBYyxDQUFDLGFBQUQsQ0FBbEIsRUFBa0M7QUFDOUIsV0FBT3FkLE9BQU8sQ0FBQ3NXLE1BQVIsQ0FBZSxJQUFJRixjQUFKLENBQW1CLDJDQUFuQixDQUFmLENBQVA7QUFDSDs7QUFDRCxTQUFPRyxpREFBUyxDQUFFLEdBQUVmLFNBQVMsQ0FBQ2dCLFVBQVcsVUFBU0gsS0FBTSxFQUF4QyxFQUEyQztBQUN2RHBnQixVQUR1RDtBQUV2RHdnQixXQUFPLEVBQUU7QUFDTCxnQkFBVSxXQURMO0FBRUwsdUJBQWlCcjFCLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQjJvQixhQUFyQixJQUFzQztBQUZsRCxLQUY4QztBQU12RCxRQUFJL3VCLElBQUksR0FBRztBQUNQL0IsVUFBSSxFQUFFK0I7QUFEQyxLQUFILEdBRUosRUFGSjtBQU51RCxHQUEzQyxDQUFoQjtBQVVILENBZEQ7O0FBZ0JBLE1BQU15dUIsY0FBTixTQUE2Qm5wQixLQUE3QixDQUFtQztBQUMvQjlILGFBQVcsR0FBRTtBQUNULFVBQU0sR0FBR2tCLFNBQVQ7QUFDQSxTQUFLaUYsSUFBTCxHQUFZLGdCQUFaO0FBQ0g7O0FBSjhCOztBQU81QixNQUFNa3FCLFNBQVMsR0FBRztBQUNyQmdCLFlBQVUsRUFBRSw4QkFEUztBQUVyQnhILFFBQU0sRUFBRSxDQUFFO0FBQ047QUFDSTFqQixRQUFJLEVBQUUsc0JBRFY7QUFFSXJKLE1BQUUsRUFBRSxzQ0FGUjtBQUdJd3pCLGdCQUFZLEVBQUUsQ0FDVixvQkFEVSxFQUVWLG9CQUZVLENBSGxCO0FBT0l0RyxVQUFNLEVBQUUsRUFQWjtBQVFJRSxhQUFTLEVBQUVzSCx1REFSZjtBQVNJdE8sUUFBSSxFQUFFO0FBVFYsR0FESSxFQVdEO0FBQ0MvYyxRQUFJLEVBQUUsU0FEUDtBQUVDckosTUFBRSxFQUFFLHNDQUZMO0FBR0N3ekIsZ0JBQVksRUFBRSxDQUNWLG9CQURVLEVBRVYsb0JBRlUsRUFHVixvQkFIVSxDQUhmO0FBUUN0RyxVQUFNLEVBQUUsRUFSVDtBQVNDRSxhQUFTLEVBQUV1SCxtREFUWjtBQVVDdk8sUUFBSSxFQUFFO0FBVlAsR0FYQztBQUZhLENBQWxCO0FBNEJBLE1BQU13TixNQUFNLEdBQUc7QUFDbEI3RyxRQUFNLEVBQUc7QUFEUyxDQUFmLEM7Ozs7Ozs7Ozs7OztBQ3BKUDtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBOzs7Ozs7Ozs7OztBQVdDOzs7O0FBS2MsTUFBTWpXLFFBQU4sQ0FBZTtBQUUxQixTQUFPMUYsUUFBUCxDQUFnQnBSLEVBQWhCLEVBQW9CO0FBQ2hCLFdBQU9BLEVBQUUsQ0FBQytGLE9BQUgsQ0FBVyxvQkFBWCxFQUFpQyxHQUFqQyxDQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtILFNBQU9vTCxRQUFQLENBQWdCblIsRUFBaEIsRUFBb0IrTyxHQUFwQixFQUF5QjtBQUN4QnZMLFlBQVEsQ0FBQ294QixJQUFULENBQWNsRSxNQUFkLENBQXFCNVosUUFBUSxDQUFDclQsYUFBVCxDQUF3QixjQUFhekQsRUFBRyxLQUFJK08sR0FBSSxVQUFoRCxDQUFyQjtBQUNBO0FBRUQ7Ozs7OztBQUlBLFNBQU91QyxXQUFQLENBQW1CdFIsRUFBbkIsRUFBdUI7QUFDdEIsVUFBTThZLE9BQU8sR0FBR3RWLFFBQVEsQ0FBQ2twQixjQUFULENBQXdCMXNCLEVBQXhCLENBQWhCO0FBQ0EsUUFBSThZLE9BQUosRUFBYUEsT0FBTyxDQUFDOUwsTUFBUjtBQUNiO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT3dFLFNBQVAsQ0FBaUJ4UixFQUFqQixFQUFxQmlGLEdBQXJCLEVBQTBCO0FBQ3pCLFdBQU8sSUFBSThZLE9BQUosQ0FBWTFDLE9BQU8sSUFBSTtBQUM3QixZQUFNd1osTUFBTSxHQUFHcnhCLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixRQUF2QixDQUFmO0FBQ0FveEIsWUFBTSxDQUFDNzBCLEVBQVAsR0FBWUEsRUFBWjtBQUNBNjBCLFlBQU0sQ0FBQ0MsR0FBUCxHQUFhN3ZCLEdBQWI7QUFDQTR2QixZQUFNLENBQUNoMUIsSUFBUCxHQUFjLGlCQUFkO0FBQ0FnMUIsWUFBTSxDQUFDRSxNQUFQLEdBQWdCMVosT0FBaEI7QUFDQTdYLGNBQVEsQ0FBQ294QixJQUFULENBQWNsRSxNQUFkLENBQXFCbUUsTUFBckI7QUFDQSxLQVBNLENBQVA7QUFRQTtBQUVEOzs7Ozs7QUFJQSxTQUFPbmpCLFlBQVAsQ0FBb0IxUixFQUFwQixFQUF3QjtBQUNqQkEsTUFBRSxHQUFHLEtBQUtvUixRQUFMLENBQWNwUixFQUFkLENBQUw7QUFDTixVQUFNOFksT0FBTyxHQUFHdFYsUUFBUSxDQUFDa3BCLGNBQVQsQ0FBd0Ixc0IsRUFBeEIsQ0FBaEI7QUFDQSxRQUFJOFksT0FBSixFQUFhQSxPQUFPLENBQUM5TCxNQUFSO0FBQ1YsR0FqRHlCLENBbUQxQjs7O0FBQ0EsU0FBT2dvQixPQUFQLENBQWU7QUFBQy9tQixVQUFNLEdBQUdnbkIsQ0FBQyxJQUFJQSxDQUFmO0FBQWtCQyxVQUFsQjtBQUEwQi9tQjtBQUExQixHQUFmLEVBQW9EO0FBQ2hELFVBQU1oRSxLQUFLLEdBQUdnckIsV0FBVyxDQUFDcjBCLEdBQVosRUFBZDtBQUVBczBCLHlCQUFxQixDQUFDLFNBQVNKLE9BQVQsQ0FBaUJLLElBQWpCLEVBQXVCO0FBQzNDO0FBQ0EsVUFBSUMsWUFBWSxHQUFHLENBQUNELElBQUksR0FBR2xyQixLQUFSLElBQWlCZ0UsUUFBcEM7QUFDQSxVQUFJbW5CLFlBQVksR0FBRyxDQUFuQixFQUFzQkEsWUFBWSxHQUFHLENBQWYsQ0FIcUIsQ0FLM0M7O0FBQ0EsWUFBTUMsUUFBUSxHQUFHdG5CLE1BQU0sQ0FBQ3FuQixZQUFELENBQXZCO0FBRUFKLFlBQU0sQ0FBQ0ssUUFBRCxDQUFOLENBUjJDLENBUXpCOztBQUVsQixVQUFJRCxZQUFZLEdBQUcsQ0FBbkIsRUFBc0I7QUFDcEJGLDZCQUFxQixDQUFDSixPQUFELENBQXJCO0FBQ0Q7QUFFRixLQWRvQixDQUFyQjtBQWVEO0FBRUg7Ozs7Ozs7Ozs7O0FBU0EsU0FBT1EsQ0FBUCxDQUFTNUYsUUFBVCxFQUFtQjtBQUNmLFVBQU05VyxPQUFPLEdBQUcsS0FBSzJjLFNBQUwsQ0FBZTdGLFFBQWYsQ0FBaEI7QUFDQSxVQUFNOEYsTUFBTSxHQUFHNWMsT0FBTyxZQUFZNmMsUUFBbkIsR0FBOEIzZCxLQUFLLENBQUNpTSxJQUFOLENBQVduTCxPQUFYLEVBQW9COGMsSUFBcEIsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxRQUFGLEtBQWUsQ0FBN0MsQ0FBOUIsR0FBZ0ZoZCxPQUFPLENBQUNnZCxRQUFSLEtBQXFCLENBQXBIO0FBQ0EsUUFBSUosTUFBSixFQUFZLE9BQU81YyxPQUFQO0FBQ1osV0FBTyxLQUFLc1gsS0FBTCxDQUFXUixRQUFYLENBQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7QUFPQSxTQUFPUSxLQUFQLENBQWFSLFFBQWIsRUFBdUJtRyxXQUFXLEdBQUd2eUIsUUFBckMsRUFBK0M7QUFDM0MsV0FBT3V5QixXQUFXLENBQUMxcUIsYUFBWixDQUEwQnVrQixRQUExQixDQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7O0FBT0EsU0FBT2lDLFFBQVAsQ0FBZ0JqQyxRQUFoQixFQUEwQm1HLFdBQVcsR0FBR3Z5QixRQUF4QyxFQUFrRDtBQUM5QyxXQUFPdXlCLFdBQVcsQ0FBQ2piLGdCQUFaLENBQTZCOFUsUUFBN0IsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7Ozs7Ozs7QUFXQSxTQUFPNkYsU0FBUCxDQUFpQk8sSUFBakIsRUFBdUJDLFFBQVEsR0FBRyxLQUFsQyxFQUF5QztBQUNyQyxVQUFNQyxRQUFRLEdBQUcxeUIsUUFBUSxDQUFDQyxhQUFULENBQXVCLFVBQXZCLENBQWpCO0FBQ0F5eUIsWUFBUSxDQUFDM1EsU0FBVCxHQUFxQnlRLElBQXJCO0FBQ0EsVUFBTWpqQixJQUFJLEdBQUdtakIsUUFBUSxDQUFDdHRCLE9BQVQsQ0FBaUJ1dEIsU0FBakIsQ0FBMkIsSUFBM0IsQ0FBYjtBQUNBLFFBQUlGLFFBQUosRUFBYyxPQUFPbGpCLElBQVA7QUFDZCxXQUFPQSxJQUFJLENBQUM0WixVQUFMLENBQWdCN21CLE1BQWhCLEdBQXlCLENBQXpCLEdBQTZCaU4sSUFBSSxDQUFDNFosVUFBbEMsR0FBK0M1WixJQUFJLENBQUM0WixVQUFMLENBQWdCLENBQWhCLENBQXREO0FBQ0g7QUFFRDs7O0FBQ0EsU0FBT2xwQixhQUFQLENBQXFCdXlCLElBQXJCLEVBQTJCQyxRQUFRLEdBQUcsS0FBdEMsRUFBNkM7QUFBQyxXQUFPLEtBQUtSLFNBQUwsQ0FBZU8sSUFBZixFQUFxQkMsUUFBckIsQ0FBUDtBQUF1QztBQUVyRjs7Ozs7O0FBSUEsU0FBT0csVUFBUCxDQUFrQkosSUFBbEIsRUFBd0I7QUFDcEIsVUFBTUssUUFBUSxHQUFHN3lCLFFBQVEsQ0FBQzh5QixjQUFULENBQXdCLEVBQXhCLENBQWpCO0FBQ0EsVUFBTUMsV0FBVyxHQUFHL3lCLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixNQUF2QixDQUFwQjtBQUNBOHlCLGVBQVcsQ0FBQzdGLE1BQVosQ0FBbUIyRixRQUFuQjtBQUNBQSxZQUFRLENBQUNHLFNBQVQsR0FBcUJSLElBQXJCO0FBQ0EsV0FBT08sV0FBVyxDQUFDaFIsU0FBbkI7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9rUixRQUFQLENBQWdCM2QsT0FBaEIsRUFBeUIsR0FBR0MsT0FBNUIsRUFBcUM7QUFDakNBLFdBQU8sR0FBR0EsT0FBTyxDQUFDdUssSUFBUixHQUFleFQsTUFBZixDQUFzQmtKLENBQUMsSUFBSUEsQ0FBM0IsQ0FBVjs7QUFDQSxTQUFLLElBQUlBLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELE9BQU8sQ0FBQ2pULE1BQTVCLEVBQW9Da1QsQ0FBQyxFQUFyQyxFQUF5Q0QsT0FBTyxDQUFDQyxDQUFELENBQVAsR0FBYUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBV2tMLFFBQVgsR0FBc0I3WCxLQUF0QixDQUE0QixHQUE1QixDQUFiOztBQUN6QzBNLFdBQU8sR0FBR0EsT0FBTyxDQUFDdUssSUFBUixHQUFleFQsTUFBZixDQUFzQmtKLENBQUMsSUFBSUEsQ0FBM0IsQ0FBVjtBQUNBRixXQUFPLENBQUM1TSxTQUFSLENBQWtCaU4sR0FBbEIsQ0FBc0IsR0FBR0osT0FBekI7QUFDQSxXQUFPRCxPQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPNGQsV0FBUCxDQUFtQjVkLE9BQW5CLEVBQTRCLEdBQUdDLE9BQS9CLEVBQXdDO0FBQ3BDLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsT0FBTyxDQUFDalQsTUFBNUIsRUFBb0NrVCxDQUFDLEVBQXJDLEVBQXlDRCxPQUFPLENBQUNDLENBQUQsQ0FBUCxHQUFhRCxPQUFPLENBQUNDLENBQUQsQ0FBUCxDQUFXa0wsUUFBWCxHQUFzQjdYLEtBQXRCLENBQTRCLEdBQTVCLENBQWI7O0FBQ3pDME0sV0FBTyxHQUFHQSxPQUFPLENBQUN1SyxJQUFSLEdBQWV4VCxNQUFmLENBQXNCa0osQ0FBQyxJQUFJQSxDQUEzQixDQUFWO0FBQ0FGLFdBQU8sQ0FBQzVNLFNBQVIsQ0FBa0JjLE1BQWxCLENBQXlCLEdBQUcrTCxPQUE1QjtBQUNBLFdBQU9ELE9BQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7Ozs7QUFVQSxTQUFPNmQsV0FBUCxDQUFtQjdkLE9BQW5CLEVBQTRCOGQsU0FBNUIsRUFBdUNDLFNBQXZDLEVBQWtEO0FBQzlDRCxhQUFTLEdBQUdBLFNBQVMsQ0FBQzFTLFFBQVYsR0FBcUI3WCxLQUFyQixDQUEyQixHQUEzQixFQUFnQ3lELE1BQWhDLENBQXVDa0osQ0FBQyxJQUFJQSxDQUE1QyxDQUFaO0FBQ0EsUUFBSSxPQUFPNmQsU0FBUCxLQUFzQixXQUExQixFQUF1Q0QsU0FBUyxDQUFDcHFCLE9BQVYsQ0FBa0J3TSxDQUFDLElBQUlGLE9BQU8sQ0FBQzVNLFNBQVIsQ0FBa0JnSixNQUFsQixDQUF5QjhELENBQXpCLEVBQTRCNmQsU0FBNUIsQ0FBdkIsRUFBdkMsS0FDS0QsU0FBUyxDQUFDcHFCLE9BQVYsQ0FBa0J3TSxDQUFDLElBQUlGLE9BQU8sQ0FBQzVNLFNBQVIsQ0FBa0JnSixNQUFsQixDQUF5QjhELENBQXpCLENBQXZCO0FBQ0wsV0FBT0YsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT2dlLFFBQVAsQ0FBZ0JoZSxPQUFoQixFQUF5QjhkLFNBQXpCLEVBQW9DO0FBQ2hDLFdBQU9BLFNBQVMsQ0FBQzFTLFFBQVYsR0FBcUI3WCxLQUFyQixDQUEyQixHQUEzQixFQUFnQ3lELE1BQWhDLENBQXVDa0osQ0FBQyxJQUFJQSxDQUE1QyxFQUErQytkLEtBQS9DLENBQXFEL2QsQ0FBQyxJQUFJRixPQUFPLENBQUM1TSxTQUFSLENBQWtCcU4sUUFBbEIsQ0FBMkJQLENBQTNCLENBQTFELENBQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7QUFPQSxTQUFPZ2UsWUFBUCxDQUFvQmxlLE9BQXBCLEVBQTZCbWUsT0FBN0IsRUFBc0NDLE9BQXRDLEVBQStDO0FBQzNDcGUsV0FBTyxDQUFDNU0sU0FBUixDQUFrQm5HLE9BQWxCLENBQTBCa3hCLE9BQTFCLEVBQW1DQyxPQUFuQztBQUNBLFdBQU9wZSxPQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPcWUsUUFBUCxDQUFnQkMsUUFBaEIsRUFBMEJDLFFBQTFCLEVBQW9DO0FBQ2hDLFFBQUksT0FBT0EsUUFBUCxJQUFvQixRQUF4QixFQUFrQ0EsUUFBUSxHQUFHLEtBQUtqSCxLQUFMLENBQVdpSCxRQUFYLENBQVg7QUFDbEMsUUFBSSxDQUFDQSxRQUFMLEVBQWUsT0FBTyxJQUFQO0FBQ2ZBLFlBQVEsQ0FBQzNHLE1BQVQsQ0FBZ0IwRyxRQUFoQjtBQUNBLFdBQU9BLFFBQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9FLFNBQVAsQ0FBaUJGLFFBQWpCLEVBQTJCQyxRQUEzQixFQUFxQztBQUNqQyxRQUFJLE9BQU9BLFFBQVAsSUFBb0IsUUFBeEIsRUFBa0NBLFFBQVEsR0FBRyxLQUFLakgsS0FBTCxDQUFXaUgsUUFBWCxDQUFYO0FBQ2xDLFFBQUksQ0FBQ0EsUUFBTCxFQUFlLE9BQU8sSUFBUDtBQUNmQSxZQUFRLENBQUNFLE9BQVQsQ0FBaUJILFFBQWpCO0FBQ0EsV0FBT0EsUUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0ksV0FBUCxDQUFtQkosUUFBbkIsRUFBNkJLLFVBQTdCLEVBQXlDO0FBQ3JDQSxjQUFVLENBQUNyRixVQUFYLENBQXNCc0YsWUFBdEIsQ0FBbUNOLFFBQW5DLEVBQTZDSyxVQUFVLENBQUNFLFdBQXhEO0FBQ0EsV0FBT1AsUUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTy93QixLQUFQLENBQWErd0IsUUFBYixFQUF1QlEsT0FBdkIsRUFBZ0M7QUFDNUJSLFlBQVEsQ0FBQ2hGLFVBQVQsQ0FBb0JzRixZQUFwQixDQUFpQ0UsT0FBakMsRUFBMENSLFFBQVEsQ0FBQ08sV0FBbkQ7QUFDQSxXQUFPUCxRQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7QUFNQSxTQUFPUyxJQUFQLENBQVkvZSxPQUFaLEVBQXFCOFcsUUFBUSxHQUFHLEVBQWhDLEVBQW9DO0FBQ2hDLFdBQU9BLFFBQVEsR0FBRzlXLE9BQU8sQ0FBQ3pOLGFBQVIsQ0FBc0IsT0FBT3VrQixRQUE3QixDQUFILEdBQTRDOVcsT0FBTyxDQUFDTyxrQkFBbkU7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT3llLE9BQVAsQ0FBZWhmLE9BQWYsRUFBd0I7QUFDcEIsV0FBT0EsT0FBTyxDQUFDZ0MsZ0JBQVIsQ0FBeUIsS0FBekIsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT2lkLFNBQVAsQ0FBaUJqZixPQUFqQixFQUEwQjhXLFFBQTFCLEVBQW9DO0FBQ2hDLFVBQU1pSSxJQUFJLEdBQUcsRUFBYjs7QUFDQSxXQUFPL2UsT0FBTyxDQUFDTyxrQkFBUixJQUE4QixDQUFDUCxPQUFPLENBQUNPLGtCQUFSLENBQTJCMmUsT0FBM0IsQ0FBbUNwSSxRQUFuQyxDQUF0QyxFQUFvRmlJLElBQUksQ0FBQ3ZyQixJQUFMLENBQVV3TSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ08sa0JBQTVCOztBQUNwRixXQUFPd2UsSUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0ksUUFBUCxDQUFnQm5mLE9BQWhCLEVBQXlCOFcsUUFBUSxHQUFHLEVBQXBDLEVBQXdDO0FBQ3BDLFVBQU1xSSxRQUFRLEdBQUduZixPQUFPLENBQUMyWixzQkFBekI7QUFDQSxRQUFJN0MsUUFBSixFQUFjLE9BQU9xSSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0QsT0FBVCxDQUFpQnBJLFFBQWpCLENBQVosR0FBeUNxSSxRQUF6QyxHQUFvRCxJQUEzRDtBQUNkLFdBQU9BLFFBQVA7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT0MsV0FBUCxDQUFtQnBmLE9BQW5CLEVBQTRCO0FBQ3hCLFVBQU1tZixRQUFRLEdBQUcsRUFBakI7O0FBQ0EsV0FBT25mLE9BQU8sQ0FBQzJaLHNCQUFmLEVBQXVDd0YsUUFBUSxDQUFDM3JCLElBQVQsQ0FBY3dNLE9BQU8sR0FBR0EsT0FBTyxDQUFDMlosc0JBQWhDOztBQUN2QyxXQUFPd0YsUUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0UsYUFBUCxDQUFxQnJmLE9BQXJCLEVBQThCOFcsUUFBOUIsRUFBd0M7QUFDcEMsVUFBTXFJLFFBQVEsR0FBRyxFQUFqQjs7QUFDQSxXQUFPbmYsT0FBTyxDQUFDMlosc0JBQVIsSUFBa0MsQ0FBQzNaLE9BQU8sQ0FBQzJaLHNCQUFSLENBQStCdUYsT0FBL0IsQ0FBdUNwSSxRQUF2QyxDQUExQyxFQUE0RnFJLFFBQVEsQ0FBQzNyQixJQUFULENBQWN3TSxPQUFPLEdBQUdBLE9BQU8sQ0FBQzJaLHNCQUFoQzs7QUFDNUYsV0FBT3dGLFFBQVA7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT0csYUFBUCxDQUFxQnJsQixJQUFyQixFQUEyQjtBQUN2QixVQUFNM0csUUFBUSxHQUFHMkcsSUFBSSxDQUFDcWYsVUFBTCxDQUFnQnpGLFVBQWpDO0FBQ0EsUUFBSTBMLEdBQUcsR0FBRyxDQUFWOztBQUNBLFNBQUssSUFBSTVmLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdyTSxRQUFRLENBQUN0RyxNQUE3QixFQUFxQzJTLENBQUMsRUFBdEMsRUFBMEM7QUFDdEMsVUFBSXJNLFFBQVEsQ0FBQ3FNLENBQUQsQ0FBUixJQUFlMUYsSUFBbkIsRUFBeUIsT0FBT3NsQixHQUFQO0FBQ3pCLFVBQUlqc0IsUUFBUSxDQUFDcU0sQ0FBRCxDQUFSLENBQVlxZCxRQUFaLElBQXdCLENBQTVCLEVBQStCdUMsR0FBRztBQUNyQzs7QUFDRCxXQUFPLENBQUMsQ0FBUjtBQUNIO0FBRUQ7OztBQUNBLFNBQU94ckIsS0FBUCxDQUFha0csSUFBYixFQUFtQjtBQUFDLFdBQU8sS0FBS3FsQixhQUFMLENBQW1CcmxCLElBQW5CLENBQVA7QUFBaUM7QUFFckQ7Ozs7Ozs7OztBQU9BLFNBQU91bEIsTUFBUCxDQUFjeGYsT0FBZCxFQUF1QjhXLFFBQVEsR0FBRyxFQUFsQyxFQUFzQztBQUNsQyxXQUFPLENBQUNBLFFBQUQsSUFBYTlXLE9BQU8sQ0FBQytQLGFBQVIsQ0FBc0JtUCxPQUF0QixDQUE4QnBJLFFBQTlCLENBQWIsR0FBdUQ5VyxPQUFPLENBQUMrUCxhQUEvRCxHQUErRSxJQUF0RjtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTzBQLFNBQVAsQ0FBaUJ6ZixPQUFqQixFQUEwQjhXLFFBQTFCLEVBQW9DO0FBQ2hDLFdBQU85VyxPQUFPLENBQUN6TixhQUFSLENBQXNCLGNBQWN1a0IsUUFBcEMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTzRJLFlBQVAsQ0FBb0IxZixPQUFwQixFQUE2QjhXLFFBQTdCLEVBQXVDO0FBQ25DLFdBQU85VyxPQUFPLENBQUNnQyxnQkFBUixDQUF5QixjQUFjOFUsUUFBdkMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBTzZJLE9BQVAsQ0FBZTNmLE9BQWYsRUFBd0I4VyxRQUFRLEdBQUcsRUFBbkMsRUFBdUM7QUFDbkMsVUFBTTZJLE9BQU8sR0FBRyxFQUFoQjtBQUNBLFFBQUk3SSxRQUFKLEVBQWMsT0FBTzlXLE9BQU8sQ0FBQytQLGFBQVIsSUFBeUIvUCxPQUFPLENBQUMrUCxhQUFSLENBQXNCNlAsT0FBdEIsQ0FBOEI5SSxRQUE5QixDQUFoQyxFQUF5RTZJLE9BQU8sQ0FBQ25zQixJQUFSLENBQWF3TSxPQUFPLEdBQUdBLE9BQU8sQ0FBQytQLGFBQVIsQ0FBc0I2UCxPQUF0QixDQUE4QjlJLFFBQTlCLENBQXZCLEVBQXZGLEtBQ0ssT0FBTzlXLE9BQU8sQ0FBQytQLGFBQWYsRUFBOEI0UCxPQUFPLENBQUNuc0IsSUFBUixDQUFhd00sT0FBTyxHQUFHQSxPQUFPLENBQUMrUCxhQUEvQjtBQUNuQyxXQUFPNFAsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0UsWUFBUCxDQUFvQjdmLE9BQXBCLEVBQTZCOFcsUUFBN0IsRUFBdUM7QUFDbkMsVUFBTTZJLE9BQU8sR0FBRyxFQUFoQjs7QUFDQSxXQUFPM2YsT0FBTyxDQUFDK1AsYUFBUixJQUF5QixDQUFDL1AsT0FBTyxDQUFDK1AsYUFBUixDQUFzQm1QLE9BQXRCLENBQThCcEksUUFBOUIsQ0FBakMsRUFBMEU2SSxPQUFPLENBQUNuc0IsSUFBUixDQUFhd00sT0FBTyxHQUFHQSxPQUFPLENBQUMrUCxhQUEvQjs7QUFDMUUsV0FBTzRQLE9BQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9HLFFBQVAsQ0FBZ0I5ZixPQUFoQixFQUF5QjhXLFFBQVEsR0FBRyxHQUFwQyxFQUF5QztBQUNyQyxXQUFPNVgsS0FBSyxDQUFDaU0sSUFBTixDQUFXbkwsT0FBTyxDQUFDK1AsYUFBUixDQUFzQnpjLFFBQWpDLEVBQTJDMEQsTUFBM0MsQ0FBa0RqSixDQUFDLElBQUlBLENBQUMsSUFBSWlTLE9BQUwsSUFBZ0JqUyxDQUFDLENBQUNteEIsT0FBRixDQUFVcEksUUFBVixDQUF2RSxDQUFQO0FBQ0g7QUFFRDs7Ozs7Ozs7Ozs7QUFTQSxTQUFPN2dCLEdBQVAsQ0FBVytKLE9BQVgsRUFBb0IrZixTQUFwQixFQUErQjkyQixLQUEvQixFQUFzQztBQUNsQyxRQUFJLE9BQU9BLEtBQVAsSUFBaUIsV0FBckIsRUFBa0MsT0FBTysyQixNQUFNLENBQUNDLGdCQUFQLENBQXdCamdCLE9BQXhCLEVBQWlDK2YsU0FBakMsQ0FBUDtBQUNsQy9mLFdBQU8sQ0FBQ3JLLEtBQVIsQ0FBY29xQixTQUFkLElBQTJCOTJCLEtBQTNCO0FBQ0EsV0FBTytXLE9BQVA7QUFDSDtBQUVEOzs7Ozs7Ozs7O0FBUUEsU0FBT21VLEtBQVAsQ0FBYW5VLE9BQWIsRUFBc0IvVyxLQUF0QixFQUE2QjtBQUN6QixRQUFJLE9BQU9BLEtBQVAsSUFBaUIsV0FBckIsRUFBa0MsT0FBT2tFLFFBQVEsQ0FBQzh5QixnQkFBZ0IsQ0FBQ2pnQixPQUFELENBQWhCLENBQTBCbVUsS0FBM0IsQ0FBZjtBQUNsQ25VLFdBQU8sQ0FBQ3JLLEtBQVIsQ0FBY3dlLEtBQWQsR0FBc0JsckIsS0FBdEI7QUFDQSxXQUFPK1csT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7Ozs7QUFRQSxTQUFPa2dCLE1BQVAsQ0FBY2xnQixPQUFkLEVBQXVCL1csS0FBdkIsRUFBOEI7QUFDMUIsUUFBSSxPQUFPQSxLQUFQLElBQWlCLFdBQXJCLEVBQWtDLE9BQU9rRSxRQUFRLENBQUM4eUIsZ0JBQWdCLENBQUNqZ0IsT0FBRCxDQUFoQixDQUEwQmtnQixNQUEzQixDQUFmO0FBQ2xDbGdCLFdBQU8sQ0FBQ3JLLEtBQVIsQ0FBY3VxQixNQUFkLEdBQXVCajNCLEtBQXZCO0FBQ0EsV0FBTytXLE9BQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU8zUCxJQUFQLENBQVkyUCxPQUFaLEVBQXFCM1AsSUFBckIsRUFBMkI7QUFDdkIsUUFBSSxPQUFPQSxJQUFQLElBQWdCLFdBQXBCLEVBQWlDLE9BQU8yUCxPQUFPLENBQUNtZ0IsV0FBZjtBQUNqQyxXQUFPbmdCLE9BQU8sQ0FBQ21nQixXQUFSLEdBQXNCOXZCLElBQTdCO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU91SCxVQUFQLENBQWtCb0ksT0FBbEIsRUFBMkI7QUFDdkIsV0FBT0EsT0FBTyxDQUFDckksV0FBZjtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPSSxXQUFQLENBQW1CaUksT0FBbkIsRUFBNEI7QUFDeEIsV0FBT0EsT0FBTyxDQUFDbEksWUFBZjtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPc29CLFVBQVAsQ0FBa0JwZ0IsT0FBbEIsRUFBMkI7QUFDdkIsV0FBT0EsT0FBTyxDQUFDcWdCLFdBQWY7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT0MsV0FBUCxDQUFtQnRnQixPQUFuQixFQUE0QjtBQUN4QixXQUFPQSxPQUFPLENBQUN1Z0IsWUFBZjtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPQyxNQUFQLENBQWN4Z0IsT0FBZCxFQUF1QjtBQUNuQixXQUFPQSxPQUFPLENBQUN5Z0IscUJBQVIsRUFBUDtBQUNIOztBQUVELGFBQVdDLFNBQVgsR0FBdUI7QUFBRSxXQUFPLEtBQUtDLFVBQUwsS0FBb0IsS0FBS0EsVUFBTCxHQUFrQixFQUF0QyxDQUFQO0FBQW1EO0FBRTVFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLFNBQU9DLEVBQVAsQ0FBVTVnQixPQUFWLEVBQW1CNmdCLEtBQW5CLEVBQTBCQyxRQUExQixFQUFvQzlsQixRQUFwQyxFQUE4QztBQUMxQyxVQUFNLENBQUNqVSxJQUFELEVBQU9nNkIsU0FBUCxJQUFvQkYsS0FBSyxDQUFDdHRCLEtBQU4sQ0FBWSxHQUFaLENBQTFCO0FBQ0EsVUFBTXl0QixXQUFXLEdBQUdGLFFBQVEsSUFBSTlsQixRQUFoQztBQUNBLFFBQUksQ0FBQ0EsUUFBTCxFQUFlQSxRQUFRLEdBQUc4bEIsUUFBWDtBQUNmLFVBQU1HLFNBQVMsR0FBRyxDQUFDRCxXQUFELEdBQWVobUIsUUFBZixHQUEwQixVQUFTNmxCLEtBQVQsRUFBZ0I7QUFDeEQsVUFBSUEsS0FBSyxDQUFDdFQsTUFBTixDQUFhMlIsT0FBYixDQUFxQjRCLFFBQXJCLENBQUosRUFBb0M7QUFDaEM5bEIsZ0JBQVEsQ0FBQzZsQixLQUFELENBQVI7QUFDSDtBQUNKLEtBSkQ7QUFNQTdnQixXQUFPLENBQUMvSyxnQkFBUixDQUF5QmxPLElBQXpCLEVBQStCazZCLFNBQS9COztBQUNBLFVBQU1DLE1BQU0sR0FBRyxNQUFNO0FBQ2pCbGhCLGFBQU8sQ0FBQ2pMLG1CQUFSLENBQTRCaE8sSUFBNUIsRUFBa0NrNkIsU0FBbEM7QUFDSCxLQUZEOztBQUdBLFFBQUlGLFNBQUosRUFBZTtBQUNYLFVBQUksQ0FBQyxLQUFLTCxTQUFMLENBQWVLLFNBQWYsQ0FBTCxFQUFnQyxLQUFLTCxTQUFMLENBQWVLLFNBQWYsSUFBNEIsRUFBNUI7O0FBQ2hDLFlBQU1JLFNBQVMsR0FBRyxNQUFNO0FBQ3BCRCxjQUFNO0FBQ04sYUFBS1IsU0FBTCxDQUFlSyxTQUFmLEVBQTBCOXNCLE1BQTFCLENBQWlDLEtBQUt5c0IsU0FBTCxDQUFlSyxTQUFmLEVBQTBCL3NCLFNBQTFCLENBQW9Dc1QsQ0FBQyxJQUFJQSxDQUFDLENBQUN1WixLQUFGLElBQVc5NUIsSUFBWCxJQUFtQnVnQixDQUFDLENBQUN0SCxPQUFGLElBQWFBLE9BQXpFLENBQWpDLEVBQW9ILENBQXBIO0FBQ0gsT0FIRDs7QUFJQSxXQUFLMGdCLFNBQUwsQ0FBZUssU0FBZixFQUEwQnZ0QixJQUExQixDQUErQjtBQUMzQnF0QixhQUFLLEVBQUU5NUIsSUFEb0I7QUFFM0JpWixlQUFPLEVBQUVBLE9BRmtCO0FBRzNCa2hCLGNBQU0sRUFBRUM7QUFIbUIsT0FBL0I7QUFLQSxhQUFPQSxTQUFQO0FBQ0g7O0FBQ0QsV0FBT0QsTUFBUDtBQUNIO0FBRUQ7Ozs7Ozs7Ozs7OztBQVVBLFNBQU9FLElBQVAsQ0FBWXBoQixPQUFaLEVBQXFCNmdCLEtBQXJCLEVBQTRCQyxRQUE1QixFQUFzQzlsQixRQUF0QyxFQUFnRDtBQUM1QyxVQUFNLENBQUNqVSxJQUFELEVBQU9nNkIsU0FBUCxJQUFvQkYsS0FBSyxDQUFDdHRCLEtBQU4sQ0FBWSxHQUFaLENBQTFCO0FBQ0EsVUFBTXl0QixXQUFXLEdBQUdGLFFBQVEsSUFBSTlsQixRQUFoQztBQUNBLFFBQUksQ0FBQ0EsUUFBTCxFQUFlQSxRQUFRLEdBQUc4bEIsUUFBWDtBQUNmLFVBQU1HLFNBQVMsR0FBRyxDQUFDRCxXQUFELEdBQWUsVUFBU0gsS0FBVCxFQUFnQjtBQUM3QzdsQixjQUFRLENBQUM2bEIsS0FBRCxDQUFSO0FBQ0E3Z0IsYUFBTyxDQUFDakwsbUJBQVIsQ0FBNEJoTyxJQUE1QixFQUFrQ2s2QixTQUFsQztBQUNILEtBSGlCLEdBR2QsVUFBU0osS0FBVCxFQUFnQjtBQUNoQixVQUFJLENBQUNBLEtBQUssQ0FBQ3RULE1BQU4sQ0FBYTJSLE9BQWIsQ0FBcUI0QixRQUFyQixDQUFMLEVBQXFDO0FBQ3JDOWxCLGNBQVEsQ0FBQzZsQixLQUFELENBQVI7QUFDQTdnQixhQUFPLENBQUNqTCxtQkFBUixDQUE0QmhPLElBQTVCLEVBQWtDazZCLFNBQWxDO0FBQ0gsS0FQRDtBQVNBamhCLFdBQU8sQ0FBQy9LLGdCQUFSLENBQXlCbE8sSUFBekIsRUFBK0JrNkIsU0FBL0I7O0FBQ0EsVUFBTUMsTUFBTSxHQUFHLE1BQU07QUFDakJsaEIsYUFBTyxDQUFDakwsbUJBQVIsQ0FBNEJoTyxJQUE1QixFQUFrQ2s2QixTQUFsQztBQUNILEtBRkQ7O0FBR0EsUUFBSUYsU0FBSixFQUFlO0FBQ1gsVUFBSSxDQUFDLEtBQUtMLFNBQUwsQ0FBZUssU0FBZixDQUFMLEVBQWdDLEtBQUtMLFNBQUwsQ0FBZUssU0FBZixJQUE0QixFQUE1Qjs7QUFDaEMsWUFBTUksU0FBUyxHQUFHLE1BQU07QUFDcEJELGNBQU07QUFDTixhQUFLUixTQUFMLENBQWVLLFNBQWYsRUFBMEI5c0IsTUFBMUIsQ0FBaUMsS0FBS3lzQixTQUFMLENBQWVLLFNBQWYsRUFBMEIvc0IsU0FBMUIsQ0FBb0NzVCxDQUFDLElBQUlBLENBQUMsQ0FBQ3VaLEtBQUYsSUFBVzk1QixJQUFYLElBQW1CdWdCLENBQUMsQ0FBQ3RILE9BQUYsSUFBYUEsT0FBekUsQ0FBakMsRUFBb0gsQ0FBcEg7QUFDSCxPQUhEOztBQUlBLFdBQUswZ0IsU0FBTCxDQUFlSyxTQUFmLEVBQTBCdnRCLElBQTFCLENBQStCO0FBQzNCcXRCLGFBQUssRUFBRTk1QixJQURvQjtBQUUzQmlaLGVBQU8sRUFBRUEsT0FGa0I7QUFHM0JraEIsY0FBTSxFQUFFQztBQUhtQixPQUEvQjtBQUtBLGFBQU9BLFNBQVA7QUFDSDs7QUFDRCxXQUFPRCxNQUFQO0FBQ0g7O0FBRUQsU0FBT0csUUFBUCxDQUFnQlIsS0FBaEIsRUFBdUI3Z0IsT0FBdkIsRUFBZ0M7QUFDNUIsVUFBTSxDQUFDalosSUFBRCxFQUFPZzZCLFNBQVAsSUFBb0JGLEtBQUssQ0FBQ3R0QixLQUFOLENBQVksR0FBWixDQUExQjs7QUFDQSxRQUFJK3RCLFdBQVcsR0FBR0MsUUFBUSxJQUFJQSxRQUFRLENBQUNWLEtBQVQsSUFBa0I5NUIsSUFBaEQ7QUFBQSxRQUFzRHk2QixhQUFhLEdBQUdyRixDQUFDLElBQUlBLENBQTNFOztBQUNBLFFBQUluYyxPQUFKLEVBQWFzaEIsV0FBVyxHQUFHaGEsQ0FBQyxJQUFJQSxDQUFDLENBQUN1WixLQUFGLElBQVc5NUIsSUFBWCxJQUFtQnVnQixDQUFDLENBQUN0SCxPQUFGLElBQWFBLE9BQW5ELEVBQTREd2hCLGFBQWEsR0FBR2xhLENBQUMsSUFBSUEsQ0FBQyxDQUFDdEgsT0FBRixJQUFhQSxPQUE5RjtBQUNiLFVBQU0wZ0IsU0FBUyxHQUFHLEtBQUtBLFNBQUwsQ0FBZUssU0FBZixLQUE2QixFQUEvQztBQUNBLFVBQU1obEIsSUFBSSxHQUFHaFYsSUFBSSxHQUFHMjVCLFNBQVMsQ0FBQzFwQixNQUFWLENBQWlCc3FCLFdBQWpCLENBQUgsR0FBbUNaLFNBQVMsQ0FBQzFwQixNQUFWLENBQWlCd3FCLGFBQWpCLENBQXBEOztBQUNBLFNBQUssSUFBSXRoQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHbkUsSUFBSSxDQUFDL08sTUFBekIsRUFBaUNrVCxDQUFDLEVBQWxDLEVBQXNDbkUsSUFBSSxDQUFDbUUsQ0FBRCxDQUFKLENBQVFnaEIsTUFBUjtBQUN6QztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQU9sa0IsR0FBUCxDQUFXZ0QsT0FBWCxFQUFvQjZnQixLQUFwQixFQUEyQkMsUUFBM0IsRUFBcUM5bEIsUUFBckMsRUFBK0M7QUFDM0MsUUFBSSxPQUFPZ0YsT0FBUCxJQUFtQixRQUF2QixFQUFpQyxPQUFPLEtBQUtxaEIsUUFBTCxDQUFjcmhCLE9BQWQsQ0FBUDtBQUNqQyxVQUFNLENBQUNqWixJQUFELEVBQU9nNkIsU0FBUCxJQUFvQkYsS0FBSyxDQUFDdHRCLEtBQU4sQ0FBWSxHQUFaLENBQTFCO0FBQ0EsUUFBSXd0QixTQUFKLEVBQWUsT0FBTyxLQUFLTSxRQUFMLENBQWNSLEtBQWQsRUFBcUI3Z0IsT0FBckIsQ0FBUDtBQUVmLFVBQU1naEIsV0FBVyxHQUFHRixRQUFRLElBQUk5bEIsUUFBaEM7QUFDQSxRQUFJLENBQUNBLFFBQUwsRUFBZUEsUUFBUSxHQUFHOGxCLFFBQVg7QUFDZixVQUFNRyxTQUFTLEdBQUcsQ0FBQ0QsV0FBRCxHQUFlaG1CLFFBQWYsR0FBMEIsVUFBUzZsQixLQUFULEVBQWdCO0FBQ3hELFVBQUlBLEtBQUssQ0FBQ3RULE1BQU4sQ0FBYTJSLE9BQWIsQ0FBcUI0QixRQUFyQixDQUFKLEVBQW9DO0FBQ2hDOWxCLGdCQUFRLENBQUM2bEIsS0FBRCxDQUFSO0FBQ0g7QUFDSixLQUpEO0FBTUE3Z0IsV0FBTyxDQUFDakwsbUJBQVIsQ0FBNEJoTyxJQUE1QixFQUFrQ2s2QixTQUFsQztBQUNBLFdBQU9qaEIsT0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7OztBQU9BLFNBQU95aEIsYUFBUCxDQUFxQnhuQixJQUFyQixFQUEyQmUsUUFBM0IsRUFBcUMwbUIsT0FBTyxHQUFHLElBQS9DLEVBQXFEO0FBQ2pELFVBQU1DLGVBQWUsR0FBRyxNQUFNO0FBQzFCLFdBQUtDLFFBQUwsQ0FBYzV5QixXQUFkLENBQTBCMnlCLGVBQTFCO0FBQ0EzbUIsY0FBUTtBQUNYLEtBSEQ7O0FBSUEsU0FBSzRtQixRQUFMLENBQWM5eUIsU0FBZCxDQUF3QjZ5QixlQUF4QixFQUF5Q3RTLFFBQVEsSUFBSTtBQUNqRCxZQUFNd1MsS0FBSyxHQUFHM2lCLEtBQUssQ0FBQ2lNLElBQU4sQ0FBV3VXLE9BQU8sR0FBR3JTLFFBQVEsQ0FBQ0UsVUFBWixHQUF5QkYsUUFBUSxDQUFDeVMsWUFBcEQsQ0FBZDtBQUNBLFlBQU1DLFdBQVcsR0FBR0YsS0FBSyxDQUFDaGIsT0FBTixDQUFjNU0sSUFBZCxJQUFzQixDQUFDLENBQTNDO0FBQ0EsWUFBTStuQixXQUFXLEdBQUdILEtBQUssQ0FBQy9FLElBQU4sQ0FBVzBDLE1BQU0sSUFBSUEsTUFBTSxDQUFDL2UsUUFBUCxDQUFnQnhHLElBQWhCLENBQXJCLENBQXBCO0FBQ0EsYUFBTzhuQixXQUFXLElBQUlDLFdBQXRCO0FBQ0gsS0FMRDtBQU1BLFdBQU8vbkIsSUFBUDtBQUNIO0FBRUQ7OztBQUNBLFNBQU95bkIsT0FBUCxDQUFlem5CLElBQWYsRUFBcUJlLFFBQXJCLEVBQStCO0FBQUUsV0FBTyxLQUFLeW1CLGFBQUwsQ0FBbUJ4bkIsSUFBbkIsRUFBeUJlLFFBQXpCLENBQVA7QUFBNEM7QUFFN0U7OztBQUNBLFNBQU9pbkIsU0FBUCxDQUFpQmhvQixJQUFqQixFQUF1QmUsUUFBdkIsRUFBaUM7QUFBRSxXQUFPLEtBQUt5bUIsYUFBTCxDQUFtQnhuQixJQUFuQixFQUF5QmUsUUFBekIsRUFBbUMsS0FBbkMsQ0FBUDtBQUFtRDtBQUV0Rjs7O0FBQ0EsU0FBT2tuQixPQUFQLENBQWVqb0IsSUFBZixFQUFxQmUsUUFBckIsRUFBK0I7QUFBRSxXQUFPLEtBQUswbUIsT0FBTCxDQUFhem5CLElBQWIsRUFBbUJlLFFBQW5CLENBQVA7QUFBc0M7QUFFdkU7OztBQUNBLFNBQU9ELFNBQVAsQ0FBaUJkLElBQWpCLEVBQXVCZSxRQUF2QixFQUFpQztBQUFFLFdBQU8sS0FBS2luQixTQUFMLENBQWVob0IsSUFBZixFQUFxQmUsUUFBckIsRUFBK0IsS0FBL0IsQ0FBUDtBQUErQztBQUVsRjs7Ozs7O0FBSUEsU0FBT21uQixJQUFQLENBQVlySixRQUFaLEVBQXNCO0FBQ2xCLFVBQU1zSixVQUFVLEdBQUcsS0FBS3pGLFNBQUwsQ0FBZ0IsaUNBQWhCLENBQW5COztBQUNBLFNBQUssSUFBSTV1QixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHK3FCLFFBQVEsQ0FBQzlyQixNQUE3QixFQUFxQ2UsQ0FBQyxFQUF0QyxFQUEwQ3EwQixVQUFVLENBQUN0M0IsV0FBWCxDQUF1Qmd1QixRQUFRLENBQUMvcUIsQ0FBRCxDQUEvQjs7QUFDMUMsV0FBT3EwQixVQUFQO0FBQ0g7QUFFRDs7Ozs7O0FBSUEsU0FBT0MsY0FBUCxDQUFzQnBvQixJQUF0QixFQUE0QjtBQUN4QixRQUFJLEVBQUVBLElBQUksWUFBWUMsTUFBbEIsS0FBNkIsRUFBRUQsSUFBSSxZQUFZRSxPQUFsQixDQUFqQyxFQUE2RCxPQUFPek8sU0FBUDtBQUM3RCxXQUFPdU8sSUFBSSxZQUFZQyxNQUFoQixHQUF5QkQsSUFBSSxDQUFDLENBQUQsQ0FBN0IsR0FBbUNBLElBQTFDO0FBQ0g7O0FBdHNCeUI7QUF5c0I5QjVULE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQitGLEdBQS9CLEdBQXFDNEYsUUFBckMsQzs7Ozs7Ozs7Ozs7O0FDaHZCQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUEsTUFBTXljLFNBQVMsR0FBRztBQUNkNkgsWUFBVSxFQUFFO0FBREUsQ0FBbEI7QUFJQSxJQUFJQyxpQkFBaUIsR0FBR3owQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3kwQixXQUFyQixFQUFrQyxDQUFsQyxDQUF4QjtBQUNBLElBQUlDLGNBQWMsR0FBRzMwQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTAwQixrQkFBMUMsRUFBOEQsQ0FBOUQsQ0FBckI7QUFDQSxJQUFJQyxrQkFBa0IsR0FBRzcwQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXNULFdBQVYsS0FBMEIsY0FBMUQsRUFBMEUsQ0FBMUUsQ0FBekI7QUFDQSxJQUFJc2hCLHVCQUF1QixHQUFHOTBCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDODBCLHNCQUFyQixFQUE2QyxDQUE3QyxDQUE5QjtBQUNBLElBQUlDLGdCQUFnQixHQUFHaDFCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVKzBCLGlCQUExQyxFQUE2RCxDQUE3RCxDQUF2QjtBQUNBLElBQUlDLFFBQVEsR0FBR2wxQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVWcxQixRQUF2QixJQUFtQ2oxQixDQUFDLENBQUNDLE9BQUYsQ0FBVWcxQixRQUFWLENBQW1CQyxjQUF6RSxFQUF5RixDQUF6RixDQUFmO0FBQ0EsSUFBSUMsV0FBVyxHQUFHcDFCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVbTFCLFFBQXZCLElBQW1DcDFCLENBQUMsQ0FBQ0MsT0FBRixDQUFVbzFCLFNBQTdDLElBQTBELENBQUNyMUIsQ0FBQyxDQUFDQyxPQUFGLENBQVVxMUIsVUFBeEYsRUFBb0csQ0FBcEcsQ0FBbEI7QUFDQSxJQUFJQyxXQUFXLEdBQUd4MUIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVV1MUIsNEJBQTFDLENBQWxCO0FBRWUsbUVBQUksTUFBTXpYLFdBQU4sQ0FBa0I7QUFDakMxaEIsYUFBVyxHQUFFO0FBQ1QsU0FBS0ksSUFBTCxHQUFZNHdCLEtBQVosQ0FBa0IvVixHQUFHLElBQUlqYyw4Q0FBSyxDQUFDaWMsR0FBTixDQUFVLGFBQVYsRUFBeUIsa0JBQXpCLEVBQTZDQSxHQUE3QyxDQUF6QixFQURTLENBQ21FO0FBQy9FOztBQUVELFFBQU03YSxJQUFOLEdBQVk7QUFDUjtBQUNBLFFBQUcsQ0FBQ200QixrQkFBSixFQUF1QkEsa0JBQWtCLEdBQUcsTUFBTXQ4QixNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUI2WixjQUFyQixDQUFvQzllLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVc1QsV0FBVixLQUEwQixjQUFoRixDQUEzQjtBQUN2QixRQUFHLENBQUNzaEIsdUJBQUosRUFBNEJBLHVCQUF1QixHQUFHLE1BQU12OEIsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCNlosY0FBckIsQ0FBb0M5ZSxDQUFDLElBQUlBLENBQUMsQ0FBQzgwQixzQkFBM0MsQ0FBaEM7QUFDNUIsUUFBRyxDQUFDQyxnQkFBSixFQUFxQkEsZ0JBQWdCLEdBQUcsTUFBTXo4QixNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUI2WixjQUFyQixDQUFvQzllLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVKzBCLGlCQUFoRSxDQUF6QjtBQUNyQixRQUFHLENBQUNDLFFBQUosRUFBYUEsUUFBUSxHQUFHLE1BQU0zOEIsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCNlosY0FBckIsQ0FBb0M5ZSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVWcxQixRQUF2QixJQUFtQ2oxQixDQUFDLENBQUNDLE9BQUYsQ0FBVWcxQixRQUFWLENBQW1CQyxjQUEvRixDQUFqQjtBQUNiLFFBQUcsQ0FBQ0MsV0FBSixFQUFnQkEsV0FBVyxHQUFHLE1BQU03OEIsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCNlosY0FBckIsQ0FBb0M5ZSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVW0xQixRQUF2QixJQUFtQ3AxQixDQUFDLENBQUNDLE9BQUYsQ0FBVW8xQixTQUE3QyxJQUEwRCxDQUFDcjFCLENBQUMsQ0FBQ0MsT0FBRixDQUFVcTFCLFVBQTlHLENBQXBCO0FBQ2hCLFFBQUcsQ0FBQ0MsV0FBSixFQUFnQkEsV0FBVyxHQUFHLE1BQU1qOUIsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCNlosY0FBckIsQ0FBb0M5ZSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXUxQiw0QkFBaEUsQ0FBcEI7O0FBRWhCLFFBQUdaLGtCQUFrQixJQUFJQyx1QkFBdEIsSUFBaURFLGdCQUFqRCxJQUFxRUUsUUFBckUsSUFBaUZFLFdBQWpGLElBQWdHSSxXQUFuRyxFQUErRztBQUMzRzF4QixhQUFPLENBQUNDLEdBQVIsQ0FBYSw0REFBYixFQUEwRSt3Qix1QkFBMUU7QUFDQSxZQUFNQyxzQkFBc0IsR0FBR0QsdUJBQXVCLENBQUNDLHNCQUF2RDs7QUFDQUQsNkJBQXVCLENBQUNDLHNCQUF4QixHQUFpRCxVQUFTOTBCLENBQVQsRUFBWThTLENBQVosRUFBZWtjLENBQWYsRUFBa0I3WCxDQUFsQixFQUFxQjFJLENBQXJCLEVBQXVCO0FBQ3BFLGNBQU12VCxLQUFLLEdBQUc0NUIsc0JBQXNCLENBQUMxdkIsSUFBdkIsQ0FBNEIsSUFBNUIsRUFBa0MsR0FBRzdILFNBQXJDLENBQWQ7QUFDQXJDLGFBQUssQ0FBQ3U2QixnQkFBTixHQUF5QjtBQUNyQnRFLGlCQUFPLENBQUN1RSxJQUFELEVBQU9DLElBQVAsRUFBWTtBQUNmLGdCQUFJQyxTQUFTLEdBQUdELElBQUksQ0FBQzEyQixNQUFMLEdBQWMsQ0FBZCxJQUFtQixRQUFReTJCLElBQTNDO0FBQ0FHLDBCQUFjLENBQUNELFNBQUQsQ0FBZDtBQUNBLG1CQUFPQSxTQUFQO0FBQ0gsV0FMb0I7O0FBTXJCRSxzQkFBWSxDQUFDaGpCLENBQUQsRUFBRztBQUNYLGdCQUFJaWpCLE9BQU8sR0FBR2hCLGdCQUFnQixDQUFDOTBCLE9BQWpCLENBQXlCKzBCLGlCQUF6QixDQUEyQ2xpQixDQUEzQyxFQUE4QzlTLENBQTlDLENBQWQ7QUFDQSxtQkFBTysxQixPQUFQO0FBQ0gsV0FUb0I7O0FBVXJCQyx1QkFBYSxDQUFDaDJCLENBQUQsRUFBSThTLENBQUosRUFBT2tjLENBQVAsRUFBVTdYLENBQVYsRUFBYTFJLENBQWIsRUFBZTtBQUN4QixtQkFBT3duQixDQUFDLENBQUNqMkIsQ0FBRCxFQUFJOFMsQ0FBSixFQUFPckUsQ0FBQyxDQUFDeW5CLE1BQVQsRUFBaUJsSCxDQUFqQixFQUFvQjdYLENBQXBCLEVBQXVCOGQsUUFBUSxDQUFDaDFCLE9BQVQsQ0FBaUJnMUIsUUFBakIsQ0FBMEJDLGNBQWpELEVBQWlFRCxRQUFRLENBQUNoMUIsT0FBVCxDQUFpQmcxQixRQUFqQixDQUEwQmtCLEtBQTNGLEVBQWtHdkIsa0JBQWtCLENBQUMzMEIsT0FBbkIsQ0FBMkJtMkIsS0FBN0gsRUFBcUksVUFBU3AyQixDQUFULEVBQVk7QUFDckoscUJBQU87QUFDSHEyQixxQkFBSyxFQUFFcjJCLENBREo7QUFFSC9FLG1CQUFHLEVBQUUrRSxDQUFDLENBQUM3RyxFQUFGLElBQVE2RyxDQUFDLENBQUNzMkIsVUFBVixJQUF3QnQyQixDQUFDLENBQUN3QyxJQUY1QjtBQUdIK3pCLHdCQUFRLEVBQUUsR0FIUDtBQUlIeFcscUJBQUssRUFBRSxRQUFRL2YsQ0FBQyxDQUFDdzJCLE9BQVYsR0FBb0JyQixXQUFXLENBQUNsMUIsT0FBWixDQUFvQm0xQixRQUFwQixDQUE2QnAxQixDQUFDLENBQUN3MkIsT0FBL0IsQ0FBcEIsR0FBOEQ7QUFKbEUsZUFBUDtBQU1ILGFBUE8sRUFPSCxVQUFTeDJCLENBQVQsRUFBWTtBQUNiLHFCQUFPLE1BQU1BLENBQU4sR0FBVSxHQUFqQjtBQUNILGFBVE8sQ0FBUjtBQVVILFdBckJvQjs7QUFzQnJCeTJCLHNCQUFZLENBQUN0OUIsRUFBRCxFQUFLNG1CLEtBQUwsRUFBVztBQUNuQixnQkFBSW1XLE1BQU0sR0FBR25XLEtBQUssQ0FBQ21XLE1BQW5CO0FBQ0EsZ0JBQUksUUFBUUEsTUFBUixJQUFrQixRQUFRQSxNQUFNLENBQUMvOEIsRUFBRCxDQUFwQyxFQUEwQyxPQUFPLEVBQVA7QUFDMUMsZ0JBQUlrOUIsS0FBSyxHQUFHSCxNQUFNLENBQUMvOEIsRUFBRCxDQUFsQjtBQUFBLGdCQUNJdTlCLFVBQVUsR0FBR0wsS0FBSyxDQUFDTSxRQUFOLEdBQWlCLEdBQWpCLEdBQXVCLEVBRHhDO0FBRUEsbUJBQU9OLEtBQUssQ0FBQ08sT0FBTixJQUFpQixRQUFRUCxLQUFLLENBQUNsOUIsRUFBL0IsR0FBb0MsTUFBTWs5QixLQUFLLENBQUM3ekIsSUFBWixHQUFtQixHQUF2RCxHQUE2RCxNQUFNazBCLFVBQU4sR0FBbUIsR0FBbkIsSUFBMEJMLEtBQUssQ0FBQ1EsWUFBTixJQUFzQlIsS0FBSyxDQUFDN3pCLElBQXRELElBQThELEdBQTlELEdBQW9FNnpCLEtBQUssQ0FBQ2w5QixFQUExRSxHQUErRSxHQUFuSjtBQUNILFdBNUJvQjs7QUE2QnJCMjlCLG9CQUFVLENBQUMzOUIsRUFBRCxFQUFLNG1CLEtBQUwsRUFBVztBQUNqQixnQkFBSW1XLE1BQU0sR0FBR25XLEtBQUssQ0FBQ21XLE1BQW5CO0FBQ0EsZ0JBQUksUUFBUUEsTUFBUixJQUFrQixRQUFRQSxNQUFNLENBQUMvOEIsRUFBRCxDQUFwQyxFQUEwQyxPQUFPLEVBQVA7QUFDMUMsZ0JBQUlrOUIsS0FBSyxHQUFHSCxNQUFNLENBQUMvOEIsRUFBRCxDQUFsQjtBQUFBLGdCQUNJdTlCLFVBQVUsR0FBR0wsS0FBSyxDQUFDTSxRQUFOLEdBQWlCLEdBQWpCLEdBQXVCLEVBRHhDO0FBRUEsbUJBQU9OLEtBQUssQ0FBQ08sT0FBTixJQUFpQixRQUFRUCxLQUFLLENBQUNsOUIsRUFBL0IsR0FBb0MsTUFBTWs5QixLQUFLLENBQUM3ekIsSUFBWixHQUFtQixHQUF2RCxHQUE2RCxNQUFNazBCLFVBQU4sR0FBbUIsR0FBbkIsSUFBMEJMLEtBQUssQ0FBQ1EsWUFBTixJQUFzQlIsS0FBSyxDQUFDN3pCLElBQXRELElBQThELEdBQTlELEdBQW9FNnpCLEtBQUssQ0FBQ2w5QixFQUExRSxHQUErRSxHQUFuSjtBQUNIOztBQW5Db0IsU0FBekI7QUFxQ0EsZUFBTytCLEtBQVA7QUFDSCxPQXhDRDtBQXlDSCxLQTVDRCxNQTRDSztBQUNEMkksYUFBTyxDQUFDbU0sS0FBUixDQUFjLElBQUk3TCxLQUFKLENBQVUsc0RBQVYsQ0FBZDtBQUNIO0FBRUQ7OztBQUNBLFdBQU8sQ0FBQ3pJLDJDQUFJLENBQUN3WCxnQkFBYixFQUErQixNQUFNLElBQUlnRSxPQUFKLENBQVkxQyxPQUFPLElBQUk0QyxVQUFVLENBQUM1QyxPQUFELEVBQVUsR0FBVixDQUFqQyxDQUFOOztBQUUvQixRQUFJLENBQUMsS0FBS3VpQixpQkFBVixFQUE0QjtBQUFFO0FBQzFCLFdBQUtDLGlCQUFMLEdBQXlCMzdCLDhDQUFLLENBQUNpRSxXQUFOLENBQWtCNUQsMkNBQUksQ0FBQ3dYLGdCQUF2QixFQUF5QyxTQUF6QyxFQUFvRDtBQUFDQyxjQUFNLEVBQUd0VSxJQUFELElBQVU7QUFDNUYsZ0JBQU1zQyxPQUFPLEdBQUc5Riw4Q0FBSyxDQUFDa3FCLGFBQU4sQ0FBb0IxbUIsSUFBSSxDQUFDdVUsZUFBTCxDQUFxQixDQUFyQixDQUFwQixFQUE2QyxzQ0FBN0MsQ0FBaEI7QUFDQSxjQUFHLENBQUNqUyxPQUFKLEVBQVk7QUFDWixnQkFBTVksT0FBTyxHQUFHMUcsOENBQUssQ0FBQ2txQixhQUFOLENBQW9CMW1CLElBQUksQ0FBQ3VVLGVBQUwsQ0FBcUIsQ0FBckIsQ0FBcEIsRUFBNkMsc0NBQTdDLENBQWhCO0FBQ0EsY0FBRyxDQUFDclIsT0FBRCxJQUFZLENBQUNBLE9BQU8sQ0FBQzlDLE1BQXhCLEVBQStCO0FBRS9COzs7Ozs7Ozs7QUFRQSxjQUFJaTNCLE1BQU0sR0FBRyxFQUFiO0FBRUEsZ0JBQU1lLFVBQVUsR0FBRyxFQUFuQjs7QUFDQSxlQUFJLElBQUkvcUIsSUFBUixJQUFnQm5LLE9BQWhCLEVBQXdCO0FBQ3BCLGdCQUFJLE9BQU9tSyxJQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzNCK3FCLHdCQUFVLENBQUN4eEIsSUFBWCxDQUFnQnlHLElBQWhCO0FBQ0E7QUFDSDs7QUFBQTtBQUNELGdCQUFJNk0sTUFBSjtBQUNBLGdCQUFJbWUsU0FBUyxHQUFHLEtBQWhCOztBQUVBLGVBQUc7QUFDQ25lLG9CQUFNLEdBQUcyVCxTQUFTLENBQUM2SCxVQUFWLENBQXFCNEMsSUFBckIsQ0FBMEJqckIsSUFBMUIsQ0FBVDs7QUFDQSxrQkFBSTZNLE1BQUosRUFBWTtBQUNSbWUseUJBQVMsR0FBRyxJQUFaO0FBQ0Esb0JBQUcsQ0FBQ3hDLGNBQUosRUFBbUJBLGNBQWMsR0FBRzMwQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVTAwQixrQkFBMUMsRUFBOEQsQ0FBOUQsQ0FBakI7QUFDbkIsc0JBQU0wQixLQUFLLEdBQUczQixjQUFjLENBQUN6MEIsT0FBZixDQUF1QjAwQixrQkFBdkIsQ0FBMEM1YixNQUFNLENBQUMsQ0FBRCxDQUFoRCxDQUFkOztBQUNBLG9CQUFHc2QsS0FBSCxFQUFTO0FBQ0xILHdCQUFNLENBQUN6d0IsSUFBUCxDQUFZO0FBQ1JreEIsNEJBQVEsRUFBRU4sS0FBSyxDQUFDTSxRQURSO0FBRVJuMEIsd0JBQUksRUFBRTZ6QixLQUFLLENBQUM3ekIsSUFGSjtBQUdSckosc0JBQUUsRUFBRWs5QixLQUFLLENBQUNsOUIsRUFIRjtBQUlSaStCLHVCQUFHLEVBQUVyZSxNQUFNLENBQUMsQ0FBRDtBQUpILG1CQUFaO0FBTUgsaUJBUEQsTUFPSztBQUNEbWQsd0JBQU0sQ0FBQ3p3QixJQUFQLENBQVk7QUFDUmt4Qiw0QkFBUSxFQUFFNWQsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVN0gsVUFBVixDQUFxQixJQUFyQixDQURGO0FBRVIxTyx3QkFBSSxFQUFFdVcsTUFBTSxDQUFDLENBQUQsQ0FGSjtBQUdSNWYsc0JBQUUsRUFBRTRmLE1BQU0sQ0FBQyxDQUFELENBSEY7QUFJUnFlLHVCQUFHLEVBQUVyZSxNQUFNLENBQUMsQ0FBRDtBQUpILG1CQUFaO0FBTUg7QUFDSjtBQUNKLGFBdEJELFFBc0JTQSxNQXRCVDs7QUF3QkEsZ0JBQUdtZSxTQUFILEVBQWE7QUFDVCxvQkFBTUcsS0FBSyxHQUFHbnJCLElBQUksQ0FBQzFHLEtBQUwsQ0FBVyxHQUFYLEVBQWdCckQsR0FBaEIsQ0FBb0IsQ0FBQ20xQixJQUFELEVBQU90eEIsS0FBUCxFQUFjdXhCLEdBQWQsS0FBc0I7QUFDcEQsb0JBQUcsQ0FBQ0QsSUFBSixFQUFTLE9BQU8sRUFBUDtBQUNULHNCQUFNakIsS0FBSyxHQUFHSCxNQUFNLENBQUNweEIsSUFBUCxDQUFZOUUsQ0FBQyxJQUFJQSxDQUFDLENBQUNvM0IsR0FBRixJQUFTRSxJQUExQixDQUFkO0FBQ0Esb0JBQUcsQ0FBQ2pCLEtBQUosRUFBVSxPQUFPaUIsSUFBUDtBQUNWLG9CQUFHLENBQUM5QyxpQkFBSixFQUFzQkEsaUJBQWlCLEdBQUd6MEIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUN5MEIsV0FBckIsRUFBa0MsQ0FBbEMsQ0FBcEI7QUFDdEIsdUJBQU9udUIsS0FBSyxDQUFDMUosYUFBTixDQUFvQjQzQixpQkFBaUIsQ0FBQ0MsV0FBdEMsRUFBbUQ7QUFDdEQ0Qix1QkFBSyxFQUFFO0FBQ0g3ekIsd0JBQUksRUFBRyxJQUFHNnpCLEtBQUssQ0FBQzd6QixJQUFLLEdBRGxCO0FBRUhnMUIsMkJBQU8sRUFBRW5CLEtBQUssQ0FBQ2w5QixFQUZaO0FBR0h3OUIsNEJBQVEsRUFBRU4sS0FBSyxDQUFDTSxRQUhiO0FBSUhjLDZCQUFTLEVBQUVGLEdBQUcsQ0FBQ3Q0QixNQUFKLEtBQWUsQ0FBZixJQUFvQjhDLE9BQU8sQ0FBQzlDLE1BQVIsS0FBbUI7QUFKL0M7QUFEK0MsaUJBQW5ELENBQVA7QUFRSCxlQWJhLEVBYVh5NEIsTUFiVyxDQWFKLENBQUN0RyxRQUFELEVBQVd1RyxPQUFYLEtBQXVCO0FBQzdCLG9CQUFHdkcsUUFBUSxDQUFDbnlCLE1BQVQsS0FBb0IsQ0FBdkIsRUFBeUIsT0FBTyxDQUFDMDRCLE9BQUQsQ0FBUDs7QUFDekIsb0JBQUcsT0FBT0EsT0FBUCxLQUFtQixRQUF0QixFQUErQjtBQUMzQixzQkFBRyxPQUFPdkcsUUFBUSxDQUFDQSxRQUFRLENBQUNueUIsTUFBVCxHQUFrQixDQUFuQixDQUFmLEtBQXlDLFFBQTVDLEVBQXFEO0FBQ2pEbXlCLDRCQUFRLENBQUNBLFFBQVEsQ0FBQ255QixNQUFULEdBQWtCLENBQW5CLENBQVIsSUFBa0MsSUFBRzA0QixPQUFRLEVBQTdDO0FBQ0EsMkJBQU92RyxRQUFQO0FBQ0g7O0FBQ0RBLDBCQUFRLENBQUMzckIsSUFBVCxDQUFjLE1BQUlreUIsT0FBbEI7QUFDQSx5QkFBT3ZHLFFBQVA7QUFDSDs7QUFDREEsd0JBQVEsQ0FBQzNyQixJQUFULENBQWMsR0FBZCxFQUFtQmt5QixPQUFuQjtBQUNBLHVCQUFPdkcsUUFBUDtBQUNILGVBekJhLEVBeUJYLEVBekJXLENBQWQ7QUEwQkE2Rix3QkFBVSxDQUFDeHhCLElBQVgsQ0FBZ0IsR0FBRzR4QixLQUFuQjtBQUNILGFBNUJELE1BNEJLO0FBQ0RKLHdCQUFVLENBQUN4eEIsSUFBWCxDQUFnQnlHLElBQWhCO0FBQ0g7QUFDSjs7QUFDRCxpQkFBTXJOLElBQUksQ0FBQ3VVLGVBQUwsQ0FBcUIsQ0FBckIsRUFBd0JDLHNCQUF4QixDQUErQy9OLEtBQS9DLENBQXFEdkQsT0FBckQsQ0FBNkQsQ0FBN0QsQ0FBTixFQUFzRTtBQUNsRWxELGdCQUFJLENBQUN1VSxlQUFMLENBQXFCLENBQXJCLEVBQXdCQyxzQkFBeEIsQ0FBK0MvTixLQUEvQyxDQUFxRHZELE9BQXJELENBQTZENjFCLEtBQTdEO0FBQ0g7O0FBQ0QsaUJBQU1YLFVBQVUsQ0FBQyxDQUFELENBQWhCLEVBQW9CO0FBQ2hCcDRCLGdCQUFJLENBQUN1VSxlQUFMLENBQXFCLENBQXJCLEVBQXdCQyxzQkFBeEIsQ0FBK0MvTixLQUEvQyxDQUFxRHZELE9BQXJELENBQTZEMEQsSUFBN0QsQ0FBa0V3eEIsVUFBVSxDQUFDVyxLQUFYLEVBQWxFO0FBQ0g7QUFDSjtBQXZGNEUsT0FBcEQsQ0FBekI7QUF3Rkg7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJKOztBQUVENTJCLFNBQU8sR0FBRTtBQUNMLFFBQUksQ0FBQyxLQUFLZzJCLGlCQUFWLEVBQTZCO0FBQzdCLFNBQUtBLGlCQUFMO0FBQ0EsU0FBS0EsaUJBQUwsR0FBeUIsSUFBekI7QUFDSDs7QUFFRDF6QixPQUFLLEdBQUUsQ0FFTjs7QUE3TGdDLENBQXRCLEVBQWY7O0FBZ01BLFNBQVMyeUIsQ0FBVCxDQUFXajJCLENBQVgsRUFBYzhTLENBQWQsRUFBaUJrYyxDQUFqQixFQUFvQjdYLENBQXBCLEVBQXVCMGdCLENBQXZCLEVBQTBCam1CLENBQTFCLEVBQTZCRCxDQUE3QixFQUFnQ21tQixDQUFoQyxFQUFtQ3ZlLENBQW5DLEVBQXNDcEgsQ0FBdEMsRUFBeUM7QUFDckMsTUFBSSxRQUFRNmMsQ0FBUixJQUFhLE1BQU1BLENBQUMsQ0FBQy92QixNQUF6QixFQUFpQyxPQUFPLElBQVA7QUFDakMsTUFBSTg0QixDQUFDLEdBQUcvSSxDQUFDLENBQUM3c0IsR0FBRixDQUFPLFVBQVNuQyxDQUFULEVBQVlndkIsQ0FBWixFQUFlO0FBQzFCLFdBQU8xb0IsS0FBSyxDQUFDMUosYUFBTixDQUFvQms3QixDQUFwQixFQUF1QnY5QixNQUFNLENBQUNzWixNQUFQLENBQWM7QUFDeENta0IsYUFBTyxFQUFFSCxDQUQrQjtBQUV4Q0ksYUFBTyxFQUFFOWdCLENBRitCO0FBR3hDb04sY0FBUSxFQUFFelIsQ0FBQyxLQUFLa2MsQ0FId0I7QUFJeENocEIsV0FBSyxFQUFFZ3BCO0FBSmlDLEtBQWQsRUFLM0J6VixDQUFDLENBQUN2WixDQUFELEVBQUlndkIsQ0FBSixDQUwwQixDQUF2QixDQUFQO0FBTUgsR0FQTyxDQUFSO0FBUUEsU0FBTyxDQUFDa0osQ0FBQyxDQUFDdG1CLENBQUQsRUFBSUQsQ0FBSixFQUFPM1IsQ0FBUCxFQUFVbVMsQ0FBVixDQUFGLEVBQWdCNGxCLENBQWhCLENBQVA7QUFDSDs7QUFFRCxTQUFTRyxDQUFULENBQVdsNEIsQ0FBWCxFQUFjOFMsQ0FBZCxFQUFpQmtjLENBQWpCLEVBQW9CN1gsQ0FBcEIsRUFBdUI7QUFDbkIsTUFBSTFJLENBQUMsR0FBSXVnQixDQUFDLENBQUMvdkIsTUFBRixHQUFXLENBQVgsR0FBZWUsQ0FBQyxDQUFDZ1osTUFBRixDQUFTO0FBQzdCbWYsVUFBTSxFQUFFaGhCLENBQUMsQ0FBQzZYLENBQUQ7QUFEb0IsR0FBVCxDQUFmLEdBRUpsYyxDQUZMOztBQUdBLE1BQUczQixLQUFLLENBQUNDLE9BQU4sQ0FBYzNDLENBQWQsQ0FBSCxFQUFvQjtBQUNoQkEsS0FBQyxDQUFDK2MsT0FBRixDQUFVbGxCLEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0IsUUFBcEIsRUFBOEIsRUFBOUIsRUFBa0MsY0FBbEMsQ0FBVjtBQUNILEdBRkQsTUFFSztBQUNENlIsS0FBQyxHQUFHLGlCQUFlQSxDQUFuQjtBQUNIOztBQUNELFNBQU9uSSxLQUFLLENBQUMxSixhQUFOLENBQW9CZzRCLGtCQUFrQixDQUFDMzBCLE9BQW5CLENBQTJCbTRCLEtBQS9DLEVBQXNEO0FBQ3pEci9CLFNBQUssRUFBRTBWO0FBRGtELEdBQXRELEVBRUpBLENBRkksQ0FBUDtBQUdIOztBQUNEeXBCLENBQUMsQ0FBQzNrQixXQUFGLEdBQWdCLGNBQWhCO0FBRUEsSUFBSThrQixpQkFBaUIsR0FBR3Q0QixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXE0QixlQUExQyxFQUEyRCxDQUEzRCxDQUF4QjtBQUNBLElBQUlBLGVBQWUsR0FBR0QsaUJBQWlCLElBQUlBLGlCQUFpQixDQUFDcDRCLE9BQWxCLENBQTBCcTRCLGVBQXJFO0FBQ0EsSUFBSUMsUUFBUSxHQUFHLEtBQWY7QUFDQSxJQUFJbG9CLFVBQVUsR0FBRyxLQUFqQjs7QUFFQSxTQUFTd2xCLGNBQVQsQ0FBd0IyQyxNQUF4QixFQUErQjtBQUMzQkQsVUFBUSxHQUFHQyxNQUFYO0FBQ0EsTUFBR25vQixVQUFILEVBQWM7QUFDZCxNQUFHLENBQUNnb0IsaUJBQUosRUFBc0JBLGlCQUFpQixHQUFHdDRCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVcTRCLGVBQTFDLEVBQTJELENBQTNELENBQXBCO0FBQ3RCLE1BQUcsQ0FBQ0QsaUJBQUosRUFBc0I7QUFDdEIsTUFBRyxDQUFDQyxlQUFKLEVBQW9CQSxlQUFlLEdBQUdELGlCQUFpQixDQUFDcDRCLE9BQWxCLENBQTBCcTRCLGVBQTVDO0FBRXBCam9CLFlBQVUsR0FBRyxJQUFiOztBQUNBZ29CLG1CQUFpQixDQUFDcDRCLE9BQWxCLENBQTBCcTRCLGVBQTFCLEdBQTRDLFVBQVNqQyxLQUFULEVBQWU7QUFDdkQsUUFBR2tDLFFBQUgsRUFBWTtBQUNSLFVBQUdsQyxLQUFLLENBQUNvQyxVQUFOLElBQW9CcEMsS0FBSyxDQUFDcUMsU0FBN0IsRUFBdUMsT0FBTyxJQUFQO0FBQ3ZDLGFBQU8sS0FBUDtBQUNIOztBQUNELFdBQU9KLGVBQWUsQ0FBQ2x6QixJQUFoQixDQUFxQixJQUFyQixFQUEyQixHQUFHN0gsU0FBOUIsQ0FBUDtBQUNILEdBTkQ7QUFPSCxDOzs7Ozs7Ozs7Ozs7QUNoUUQ7QUFBQTtBQUFBO0FBQUE7QUFDQSxNQUFNO0FBQUNvN0I7QUFBRCxJQUFhajlCLDJDQUFJLENBQUMwbkIsS0FBeEI7QUFHTyxTQUFTd1YsY0FBVCxHQUF5QjtBQUM1QixTQUFPRCxRQUFRLEdBQUcsQ0FBSCxDQUFmO0FBQ0gsQzs7Ozs7Ozs7Ozs7O0FDTkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNcGQsS0FBSyxHQUFHLEVBQWQ7QUFDQSxNQUFNc2QsTUFBTSxHQUFHLEVBQWY7QUFFZSxtRUFBSSxNQUFNdGIsZUFBTixDQUFzQjtBQUNyQ2xoQixhQUFXLEdBQUU7QUFDVC9ELFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQmlaLGVBQS9CLEdBQWlELElBQWpEO0FBQ0g7O0FBRURpSSxPQUFLLENBQUNGLFVBQUQsRUFBYW5zQixFQUFiLEVBQWdCO0FBQ2pCTyxXQUFPLENBQUNrc0IsUUFBUixDQUFpQixNQUFNO0FBQ25Ca1QsdUJBQWlCLENBQUN4VCxVQUFELEVBQWFuc0IsRUFBYixDQUFqQjtBQUNILEtBRkQ7QUFHSDs7QUFFRG1LLE9BQUssR0FBRSxDQUVOOztBQUVEeTFCLFdBQVMsQ0FBQzNpQixJQUFELEVBQU07QUFDWCxXQUFPbUYsS0FBSyxDQUFDbkYsSUFBRCxDQUFMLElBQWUsQ0FBQ21GLEtBQUssQ0FBQ25GLElBQUQsQ0FBTCxDQUFZRSxPQUFuQztBQUNIOztBQWpCb0MsQ0FBMUIsRUFBZjtBQW9CQSxNQUFNMGlCLEtBQUssR0FBRyxDQUNWLENBQUMsU0FBRCxFQUFZLENBQVosQ0FEVSxFQUVWLENBQUMsU0FBRCxFQUFZLENBQVosQ0FGVSxFQUdWLENBQUMsT0FBRCxFQUFVLENBQVYsQ0FIVSxFQUlWLENBQUMsT0FBRCxFQUFVLENBQVYsQ0FKVSxFQUtWLENBQUMsU0FBRCxFQUFZLENBQVosQ0FMVSxFQU1WLENBQUMsaUJBQUQsRUFBb0IsQ0FBcEIsQ0FOVSxFQU9WLENBQUMsZ0JBQUQsRUFBbUIsQ0FBbkIsQ0FQVSxFQVFWLENBQUMsYUFBRCxFQUFnQixDQUFoQixDQVJVLEVBU1YsQ0FBQyxpQkFBRCxFQUFvQixDQUFwQixDQVRVLEVBVVYsQ0FBQyxTQUFELEVBQVksQ0FBWixDQVZVLEVBV1YsQ0FBQyxRQUFELEVBQVcsQ0FBWCxDQVhVLEVBWVYsQ0FBQyxlQUFELEVBQWtCLENBQWxCLENBWlUsRUFhVixDQUFDLHVDQUFELEVBQTBDLENBQTFDLENBYlUsRUFjVixDQUFDLHVCQUFELEVBQTBCLENBQTFCLENBZFU7QUFlVjtBQUNBLENBQUMseUJBQUQsRUFBNEIsQ0FBNUIsQ0FoQlUsRUFpQlYsQ0FBQyx5QkFBRCxFQUE0QixDQUE1QixDQWpCVSxFQWtCVixDQUFDLHFCQUFELEVBQXdCLENBQXhCLENBbEJVO0FBbUJWO0FBQ0EsQ0FBQyw4QkFBRCxFQUFpQyxDQUFqQyxDQXBCVSxFQXFCVixDQUFDLGtEQUFELEVBQXFELENBQXJELENBckJVLEVBcUIrQzs7QUFDekQ7QUFDQSxDQUFDLHlCQUFELEVBQTRCLENBQTVCLENBdkJVLEVBdUJzQjtBQUNoQyxDQUFDLDZDQUFELEVBQWdELENBQWhELENBeEJVLEVBd0IwQzs7QUFDcEQ7QUFDQSxDQUFDLHNCQUFELEVBQXlCLENBQXpCLENBMUJVLENBQWQ7QUE2QkEsTUFBTUMsT0FBTyxHQUFHLENBQ1osdUJBRFksRUFFWix5QkFGWSxDQUFoQjtBQUtPLFNBQVNDLFlBQVQsQ0FBc0I5aUIsSUFBdEIsRUFBNEJ2WCxJQUE1QixFQUFrQ3M2QixjQUFsQyxFQUFrREMsY0FBbEQsRUFBa0VuaUIsUUFBbEUsRUFBMkU7QUFDOUVwWSxNQUFJLEdBQUdBLElBQUksQ0FBQ3dlLFFBQUwsQ0FBYyxNQUFkLENBQVA7QUFDQSxNQUFJZ2MsU0FBUyxHQUFHLEtBQWhCO0FBQ0E7Ozs7QUFHQSxRQUFNQyxXQUFXLEdBQUd6NkIsSUFBSSxDQUFDSyxPQUFMLENBQWEsc0NBQWIsRUFBcUQsRUFBckQsRUFBeUQ4UyxJQUF6RCxFQUFwQixDQU44RSxDQU1LOztBQUVuRixPQUFJLE1BQU0sQ0FBQ2xRLElBQUQsRUFBTzlJLElBQVAsQ0FBVixJQUEwQmdnQyxLQUExQixFQUFnQztBQUM1QixVQUFNTyxLQUFLLEdBQUd2Z0MsSUFBSSxLQUFLLENBQVQsR0FBYXNnQyxXQUFiLEdBQTJCejZCLElBQXpDOztBQUNBLFFBQUdpRCxJQUFJLENBQUNxMUIsSUFBTCxDQUFVb0MsS0FBVixDQUFILEVBQW9CO0FBQ2hCRixlQUFTLEdBQUdKLE9BQU8sQ0FBQ2pnQyxJQUFELENBQW5CO0FBQ0E7QUFDSDtBQUNKOztBQUVELE1BQUcsQ0FBQ3FnQyxTQUFKLEVBQWMsT0FBT0QsY0FBYyxDQUFDaGpCLElBQUQsQ0FBckI7QUFDZG1GLE9BQUssQ0FBQ25GLElBQUQsQ0FBTCxHQUFjO0FBQ1ZFLFdBQU8sRUFBRSxJQURDO0FBRVY5VCxRQUFJLEVBQUVnM0IsU0FBUyxDQUFDcGpCLElBQUQsQ0FBVCxDQUFnQjVRLEtBQWhCLENBQXNCLEdBQXRCLEVBQTJCcWIsR0FBM0IsRUFGSTtBQUdWN25CLFFBQUksRUFBRXdnQyxTQUFTLENBQUNwakIsSUFBRCxDQUFULENBQWdCbkYsUUFBaEIsQ0FBeUIsS0FBekIsSUFBa0MsUUFBbEMsR0FBNkMsT0FIekM7QUFJVmtLLFFBQUksRUFBRWtlLFNBSkk7QUFLVmpqQixRQUFJLEVBQUVBLElBTEk7QUFNVmE7QUFOVSxHQUFkO0FBU0FwVCxTQUFPLENBQUNDLEdBQVIsQ0FBYSwrQkFBOEJ5WCxLQUFLLENBQUNuRixJQUFELENBQUwsQ0FBWXBkLElBQVosQ0FBaUJxRixXQUFqQixFQUErQixLQUFJa2QsS0FBSyxDQUFDbkYsSUFBRCxDQUFMLENBQVk1VCxJQUFLLEVBQS9GO0FBRUEyMkIsZ0JBQWMsQ0FBQzVkLEtBQUssQ0FBQ25GLElBQUQsQ0FBTixDQUFkO0FBQ0g7QUFFRCxNQUFNb2pCLFNBQVMsR0FBRyxFQUFsQjtBQUVPLFNBQVNDLFNBQVQsQ0FBbUJyakIsSUFBbkIsRUFBeUJ2WCxJQUF6QixFQUErQm9ZLFFBQS9CLEVBQXlDa2lCLGNBQXpDLEVBQXlEQyxjQUF6RCxFQUF3RTtBQUMzRXYxQixTQUFPLENBQUNDLEdBQVIsQ0FBYSxTQUFRbVQsUUFBUyxVQUFTYixJQUFLLEVBQTVDOztBQUNBLE1BQUcsQ0FBQ21GLEtBQUssQ0FBQ25GLElBQUQsQ0FBVCxFQUFnQjtBQUNacVgscURBQVMsQ0FBQyxvRUFBa0VyWCxJQUFuRSxFQUF5RTtBQUFFO0FBQ2hGdVgsYUFBTyxFQUFFO0FBQ0wsc0JBQWNsWixvREFBQSxDQUFxQkMsUUFBckIsQ0FBOEIsMEJBQTlCLENBRFQsQ0FDbUU7O0FBRG5FO0FBRHFFLEtBQXpFLENBQVQsQ0FJR3FLLElBSkgsQ0FJUSxNQUFNME4sR0FBTixJQUFhO0FBQ2pCLFVBQUdBLEdBQUcsQ0FBQ08sTUFBSixLQUFlLEdBQWxCLEVBQXNCO0FBQ2xCLFlBQUcvVixRQUFRLENBQUNoRyxRQUFULENBQWtCLFlBQWxCLENBQUgsRUFBbUMsT0FBT21vQixjQUFjLENBQUNoakIsSUFBRCxDQUFyQjs7QUFDbkMsWUFBRztBQUNDOGlCLHNCQUFZLENBQUM5aUIsSUFBRCxFQUFPdlgsSUFBUCxFQUFhczZCLGNBQWIsRUFBNkJDLGNBQTdCLEVBQTZDbmlCLFFBQTdDLENBQVo7QUFDSCxTQUZELENBRUMsT0FBTWpYLENBQU4sRUFBUTtBQUNMNkQsaUJBQU8sQ0FBQ21NLEtBQVIsQ0FBY2hRLENBQWQ7QUFDQW81Qix3QkFBYztBQUNqQjs7QUFDRDtBQUNIOztBQUNELFlBQU0vaUIsTUFBTSxHQUFHLE1BQU1vVyxHQUFHLENBQUNTLElBQUosRUFBckI7QUFDQTdXLFlBQU0sQ0FBQ0QsSUFBUCxHQUFjQSxJQUFkO0FBQ0FDLFlBQU0sQ0FBQ1ksUUFBUCxHQUFrQkEsUUFBbEI7QUFFQXNFLFdBQUssQ0FBQ25GLElBQUQsQ0FBTCxHQUFjQyxNQUFkO0FBRUE4aUIsb0JBQWMsQ0FBQzlpQixNQUFELENBQWQ7QUFDSCxLQXRCRCxFQXNCR2dYLEtBdEJILENBc0JVL1YsR0FBRCxJQUFTO0FBQ2R6VCxhQUFPLENBQUNtTSxLQUFSLENBQWUsK0JBQThCc0gsR0FBSSxFQUFqRDtBQUNBLFVBQUdMLFFBQVEsQ0FBQ2hHLFFBQVQsQ0FBa0IsWUFBbEIsQ0FBSCxFQUFtQyxPQUFPbW9CLGNBQWMsQ0FBQ2hqQixJQUFELENBQXJCO0FBQ25DOGlCLGtCQUFZLENBQUM5aUIsSUFBRCxFQUFPdlgsSUFBUCxFQUFhczZCLGNBQWIsRUFBNkJDLGNBQTdCLEVBQTZDbmlCLFFBQTdDLENBQVo7QUFDSCxLQTFCRDtBQTJCSCxHQTVCRCxNQTRCSztBQUNELFVBQU1aLE1BQU0sR0FBR2tGLEtBQUssQ0FBQ25GLElBQUQsQ0FBcEI7QUFFQStpQixrQkFBYyxDQUFDOWlCLE1BQUQsQ0FBZDtBQUNIO0FBQ0o7QUFFTSxTQUFTMkUsV0FBVCxDQUFxQjBlLE1BQXJCLEVBQTZCUCxjQUE3QixFQUE2Q0MsY0FBYyxHQUFJaGpCLElBQUQsSUFBVSxDQUFFLENBQTFFLEVBQTRFdWpCLFlBQVksR0FBRyxLQUEzRixFQUFpRztBQUNwRyxRQUFNdmpCLElBQUksR0FBR3dqQixpREFBQSxDQUFrQixRQUFsQixDQUFiO0FBQ0EsTUFBSS82QixJQUFJLEdBQUdzZSxNQUFNLENBQUMwYyxLQUFQLENBQWEsQ0FBYixDQUFYO0FBRUFDLDZEQUFnQixDQUFDSixNQUFELENBQWhCLENBQXlCN0csRUFBekIsQ0FBNEIsTUFBNUIsRUFBb0NrSCxLQUFLLElBQUk7QUFDekNsN0IsUUFBSSxHQUFHc2UsTUFBTSxDQUFDNmMsTUFBUCxDQUFjLENBQUNuN0IsSUFBRCxFQUFPazdCLEtBQVAsQ0FBZCxDQUFQO0FBQ0EzakIsUUFBSSxDQUFDaVksTUFBTCxDQUFZMEwsS0FBWjtBQUNILEdBSEQsRUFHR2xILEVBSEgsQ0FHTSxLQUhOLEVBR2EsTUFBTTtBQUNmLFVBQU1vSCxVQUFVLEdBQUc3akIsSUFBSSxDQUFDOGpCLE1BQUwsQ0FBWSxLQUFaLENBQW5CO0FBRUFWLGFBQVMsQ0FBQ1MsVUFBRCxDQUFULEdBQXdCUCxNQUF4Qjs7QUFFQSxRQUFHQyxZQUFZLElBQUkxa0IsMERBQVUsQ0FBQ2dsQixVQUFELENBQTdCLEVBQTBDO0FBQ3RDLFVBQUkvK0IsS0FBSyxHQUFHK1osMERBQVUsQ0FBQ2dsQixVQUFELENBQXRCOztBQUNBLFVBQUcvK0IsS0FBSyxDQUFDK2YsU0FBTixHQUFtQmpoQixJQUFJLENBQUNDLEdBQUwsS0FBYSxRQUFuQyxFQUE2QztBQUN6QyxlQUFPZ2IsMERBQVUsQ0FBQ2dsQixVQUFELENBQWpCO0FBQ0EvYywrREFBYyxDQUFDM0csY0FBZjtBQUNILE9BSEQsTUFHSztBQUNENGlCLHNCQUFjLENBQUNqK0IsS0FBSyxDQUFDbWIsTUFBUCxDQUFkO0FBQ0E7QUFDSDtBQUNKOztBQUVEb2pCLGFBQVMsQ0FBQ1EsVUFBRCxFQUFhcDdCLElBQWIsRUFBbUIrYSxxREFBUSxDQUFDOGYsTUFBRCxDQUEzQixFQUFxQ1AsY0FBckMsRUFBcURDLGNBQXJELENBQVQ7QUFDSCxHQXBCRDtBQXFCSDtBQUVNLFNBQVNOLGlCQUFULENBQTJCeFQsVUFBM0IsRUFBdUNuc0IsRUFBdkMsRUFBMEM7QUFDN0MsTUFBRyxDQUFDd0QsUUFBUSxDQUFDa3BCLGNBQVQsQ0FBd0Ixc0IsRUFBeEIsQ0FBSixFQUFnQztBQUNoQyxNQUFHLENBQUNtc0IsVUFBVSxDQUFDbG5CLEdBQVgsQ0FBZThTLFVBQWYsQ0FBMEIsNkJBQTFCLENBQUosRUFBNkQsT0FBT3ZVLFFBQVEsQ0FBQ2twQixjQUFULENBQXdCMXNCLEVBQXhCLEVBQTRCZ04sTUFBNUIsRUFBUDtBQUM3RCxNQUFHLENBQUNtZixVQUFVLENBQUNyTyxRQUFYLENBQW9CaEcsUUFBcEIsQ0FBNkIsWUFBN0IsQ0FBRCxJQUErQyxDQUFDcVUsVUFBVSxDQUFDck8sUUFBWCxDQUFvQmhHLFFBQXBCLENBQTZCLFlBQTdCLENBQW5ELEVBQThGLE9BQU90VSxRQUFRLENBQUNrcEIsY0FBVCxDQUF3QjFzQixFQUF4QixFQUE0QmdOLE1BQTVCLEVBQVA7QUFFOUZzbkIsbURBQVMsQ0FBQ25JLFVBQVUsQ0FBQ2xuQixHQUFaLEVBQWlCO0FBQ3RCdXZCLFdBQU8sRUFBRTtBQUNMLG9CQUFjbFosb0RBQUEsQ0FBcUJDLFFBQXJCLENBQThCLDBCQUE5QjtBQURUO0FBRGEsR0FBakIsQ0FBVCxDQUlHcUssSUFKSCxDQUlRME4sR0FBRyxJQUFJO0FBQ1gsUUFBR0EsR0FBRyxDQUFDTyxNQUFKLEtBQWUsR0FBbEIsRUFBc0IsTUFBTSxJQUFJN29CLEtBQUosQ0FBVSxxQkFBVixDQUFOO0FBQ3RCLFVBQU1pUyxJQUFJLEdBQUd3akIsaURBQUEsQ0FBa0IsUUFBbEIsQ0FBYjtBQUNBLFFBQUkvNkIsSUFBSSxHQUFHc2UsTUFBTSxDQUFDMGMsS0FBUCxDQUFhLENBQWIsQ0FBWDtBQUNBcE4sT0FBRyxDQUFDM3ZCLElBQUosQ0FBUysxQixFQUFULENBQVksTUFBWixFQUFvQmtILEtBQUssSUFBSTtBQUN6Qmw3QixVQUFJLEdBQUdzZSxNQUFNLENBQUM2YyxNQUFQLENBQWMsQ0FBQ243QixJQUFELEVBQU9rN0IsS0FBUCxDQUFkLENBQVA7QUFDQTNqQixVQUFJLENBQUNpWSxNQUFMLENBQVkwTCxLQUFaO0FBQ0gsS0FIRDtBQUlBdE4sT0FBRyxDQUFDM3ZCLElBQUosQ0FBUysxQixFQUFULENBQVksS0FBWixFQUFtQixNQUFNO0FBQ3JCLFlBQU1vSCxVQUFVLEdBQUc3akIsSUFBSSxDQUFDOGpCLE1BQUwsQ0FBWSxLQUFaLENBQW5CO0FBRUFyQixZQUFNLENBQUN2VCxVQUFVLENBQUNsbkIsR0FBWixDQUFOLEdBQXlCNjdCLFVBQXpCO0FBQ0FULGVBQVMsQ0FBQ1MsVUFBRCxDQUFULEdBQXdCM1UsVUFBVSxDQUFDbG5CLEdBQW5DO0FBRUFxN0IsZUFBUyxDQUFDUSxVQUFELEVBQWFwN0IsSUFBYixFQUFtQnltQixVQUFVLENBQUNyTyxRQUE5QixFQUF5Q1osTUFBRCxJQUFZO0FBQ3pEOGpCLHdCQUFnQixDQUFDaGhDLEVBQUQsRUFBS2tkLE1BQUwsRUFBYWlQLFVBQVUsQ0FBQ3JPLFFBQXhCLENBQWhCO0FBQ0gsT0FGUSxFQUVOLE1BQU07QUFDTCxZQUFJL0MsSUFBSSxHQUFHdlgsUUFBUSxDQUFDa3BCLGNBQVQsQ0FBd0Ixc0IsRUFBeEIsQ0FBWDtBQUNBLFlBQUcrYSxJQUFILEVBQVFBLElBQUksQ0FBQy9OLE1BQUw7QUFDWCxPQUxRLENBQVQ7QUFNSCxLQVpEO0FBYUgsR0F6QkQsRUF5QkdrbkIsS0F6QkgsQ0F5QlMsTUFBSSxDQUFFLENBekJmO0FBMEJIO0FBRUQsSUFBSStNLGdCQUFnQixHQUFHcjZCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcTZCLG1CQUFyQixFQUEwQyxDQUExQyxDQUF2QjtBQUNBLElBQUlDLFdBQVcsR0FBR3Y2QixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3U2QixjQUFyQixFQUFxQyxDQUFyQyxDQUFsQjtBQUVBOzs7Ozs7QUFLQSxTQUFTSixnQkFBVCxDQUEwQmhoQyxFQUExQixFQUE4QmtkLE1BQTlCLEVBQXNDWSxRQUF0QyxFQUErQztBQUMzQyxRQUFNblEsR0FBRyxHQUFHbkssUUFBUSxDQUFDa3BCLGNBQVQsQ0FBd0Ixc0IsRUFBeEIsQ0FBWjtBQUNBLE1BQUcsQ0FBQzJOLEdBQUQsSUFBUUEsR0FBRyxDQUFDZ2YsVUFBSixDQUFlN21CLE1BQWYsR0FBd0IsQ0FBbkMsRUFBcUMsT0FGTSxDQUVDOztBQUU1QyxNQUFHLENBQUNtN0IsZ0JBQUosRUFBcUJBLGdCQUFnQixHQUFHcjZCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcTZCLG1CQUFyQixFQUEwQyxDQUExQyxDQUFuQjtBQUNyQixNQUFHLENBQUNDLFdBQUosRUFBZ0JBLFdBQVcsR0FBR3Y2QixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3U2QixjQUFyQixFQUFxQyxDQUFyQyxDQUFkOztBQUVoQixNQUFHbGtCLE1BQU0sQ0FBQ0MsT0FBVixFQUFrQjtBQUNkLFFBQUc7QUFDQ3hQLFNBQUcsQ0FBQ3lrQixVQUFKLENBQWUzakIsS0FBZixDQUFxQjR5QixXQUFyQixHQUFtQyxrQkFBbkM7QUFDQTs7Ozs7QUFJQSxVQUFJQyxRQUFRLEdBQUl2dUIsSUFBRCxJQUFVO0FBQ3JCLGFBQUksSUFBSXFHLEtBQVIsSUFBaUJyRyxJQUFJLENBQUMzRyxRQUF0QixFQUErQjtBQUMzQixjQUFHZ04sS0FBSyxDQUFDbVosT0FBTixLQUFrQixHQUFyQixFQUF5QjtBQUNyQm5aLGlCQUFLLENBQUNyTCxnQkFBTixDQUF1QixPQUF2QixFQUFpQ2xILENBQUQsSUFBTztBQUNuQ0EsZUFBQyxDQUFDNG9CLGNBQUY7QUFDQTVvQixlQUFDLENBQUM2b0Isd0JBQUY7QUFFQXh0Qiw0REFBSyxDQUFDK1AscUJBQU4sQ0FDSSwwQ0FESixFQUVJLFNBQU9pTCxNQUFNLENBQUNyZCxJQUFQLENBQVlxRixXQUFaLEVBQVAsR0FBaUMsS0FBakMsR0FBdUM0WSxRQUF2QyxHQUFnRCwyQkFBaEQsR0FBNEVaLE1BQU0sQ0FBQzhFLElBQW5GLEdBQXdGLHFGQUY1RixFQUdJO0FBQ0l1ZiwyQkFBVyxFQUFFLGlCQURqQjtBQUVJcnZCLDBCQUFVLEVBQUUsU0FGaEI7QUFHSXN2QixzQkFBTSxFQUFFLElBSFo7QUFJSUMsd0JBQVEsRUFBRSxNQUFNLENBQUUsQ0FKdEI7QUFLSUMseUJBQVMsRUFBRSxNQUFNO0FBQ2JwbUIsc0VBQUEsQ0FBcUJDLFFBQXJCLENBQThCLHlCQUE5QixFQUF5RG5DLEtBQUssQ0FBQ2dOLElBQS9EO0FBQ0g7QUFQTCxlQUhKO0FBYUgsYUFqQkQ7QUFrQkgsV0FuQkQsTUFtQk0sSUFBRyxDQUFDLEtBQUQsRUFBUWpoQixRQUFSLENBQWlCaVUsS0FBSyxDQUFDbVosT0FBTixDQUFjcnRCLFdBQWQsRUFBakIsQ0FBSCxFQUFpRDtBQUNuRG84QixvQkFBUSxDQUFDbG9CLEtBQUQsQ0FBUjtBQUNIO0FBQ0o7QUFDSixPQXpCRDs7QUEwQkFrb0IsY0FBUSxDQUFDM3pCLEdBQUcsQ0FBQ3lrQixVQUFMLENBQVI7QUFDSCxLQWpDRCxDQWlDQyxPQUFNdnJCLENBQU4sRUFBUTtBQUNMNkQsYUFBTyxDQUFDbU0sS0FBUixDQUFjaFEsQ0FBZDtBQUNIOztBQUNEdEUsK0NBQUksQ0FBQytxQixRQUFMLENBQWN0aEIsTUFBZCxDQUFxQnpKLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJrK0IsdURBQXpCLEVBQXNDO0FBQUN4NEIsVUFBSSxFQUFFK1QsTUFBTSxDQUFDcmQsSUFBUCxHQUFZLEdBQVosR0FBZ0JxZCxNQUFNLENBQUM3VCxJQUF2QixHQUE0QjtBQUFuQyxLQUF0QyxFQUNqQjlHLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFdTlCLGdCQUFnQixDQUFDQyxtQkFBN0I7QUFBa0R6eUIsV0FBSyxFQUFFO0FBQUN3ZSxhQUFLLEVBQUUsTUFBUjtBQUFnQitMLGNBQU0sRUFBRTtBQUF4QjtBQUF6RCxLQUFoQyxFQUNJejJCLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFa0QsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNtbUIsR0FBckIsRUFBMEIsQ0FBMUIsRUFBNkJBLEdBQXpDO0FBQThDLHFCQUFjLE9BQTVEO0FBQW9FQyxXQUFLLEVBQUMsTUFBMUU7QUFBaUYrTCxZQUFNLEVBQUMsTUFBeEY7QUFBK0Y0SSxhQUFPLEVBQUM7QUFBdkcsS0FBaEMsRUFDSXIvQiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQzdCbytCLE9BQUMsRUFBQyxHQUQyQjtBQUU3QkMsT0FBQyxFQUFDLEdBRjJCO0FBRzdCN1UsV0FBSyxFQUFDLElBSHVCO0FBSTdCK0wsWUFBTSxFQUFDLElBSnNCO0FBSzdCK0ksVUFBSSxFQUFDLHVDQUx3QjtBQU03QkMsVUFBSSxFQUFDLFNBTndCO0FBTzdCRCxVQUFJLEVBQUMsMkJBUHdCO0FBUTdCcitCLGVBQVMsRUFBQ2tELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbzdCLGFBQXJCLEVBQW9DLENBQXBDLEVBQXVDQTtBQVJwQixLQUFqQyxDQURKLENBREosQ0FEaUIsQ0FBckIsRUFlR3QwQixHQWZIO0FBZ0JILEdBckRELE1BcURNLElBQUcsQ0FBQ3VQLE1BQU0sQ0FBQ2dsQixRQUFYLEVBQW9CO0FBQ3RCdjBCLE9BQUcsQ0FBQ3lrQixVQUFKLENBQWUzakIsS0FBZixDQUFxQjR5QixXQUFyQixHQUFtQyxTQUFuQztBQUNBLFFBQUljLElBQUksR0FBRzUvQiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUNnTCxXQUFLLEVBQUU7QUFBQ2EsZUFBTyxFQUFFO0FBQVY7QUFBUixLQUFqQyxFQUFnRSxDQUN2RS9NLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJrK0IsdURBQXpCLEVBQXNDO0FBQUN4NEIsVUFBSSxFQUFFK1QsTUFBTSxDQUFDcmQsSUFBUCxHQUFZLEdBQVosR0FBZ0JxZCxNQUFNLENBQUM3VCxJQUF2QixHQUE0QjtBQUFuQyxLQUF0QyxFQUNJOUcsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUV1OUIsZ0JBQWdCLENBQUNDLG1CQUE3QjtBQUFrRHp5QixXQUFLLEVBQUU7QUFBQ3dlLGFBQUssRUFBRSxNQUFSO0FBQWdCK0wsY0FBTSxFQUFFLE1BQXhCO0FBQWdDb0osYUFBSyxFQUFFO0FBQXZDO0FBQXpELEtBQWhDLEVBQ0k3L0IsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUV1OUIsZ0JBQWdCLENBQUNvQixVQUE3QjtBQUF5QyxxQkFBYyxPQUF2RDtBQUErRHBWLFdBQUssRUFBQyxNQUFyRTtBQUE0RStMLFlBQU0sRUFBQyxNQUFuRjtBQUEwRjRJLGFBQU8sRUFBQztBQUFsRyxLQUFoQyxFQUNJci9CLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ3UrQixVQUFJLEVBQUMsU0FBTjtBQUFpQixtQkFBWSxTQUE3QjtBQUF1Q3BELE9BQUMsRUFBQztBQUF6QyxLQUFqQyxDQURKLENBREosRUFJSXI4QiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRXk5QixXQUFXLENBQUNDO0FBQXhCLEtBQWhDLEVBQ0k3K0IsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDLHFCQUFjLE9BQWY7QUFBdUJ3cEIsV0FBSyxFQUFDLE1BQTdCO0FBQW9DK0wsWUFBTSxFQUFDLE1BQTNDO0FBQWtENEksYUFBTyxFQUFDO0FBQTFELEtBQWhDLEVBQ0lyL0IsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDdStCLFVBQUksRUFBQyxTQUFOO0FBQWdCcEQsT0FBQyxFQUFDO0FBQWxCLEtBQWpDLENBREosQ0FESixDQUpKLENBREosQ0FEdUUsRUFhdkVyOEIsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QmsrQix1REFBekIsRUFBc0M7QUFBQ3g0QixVQUFJLEVBQUUsa0JBQWdCK1QsTUFBTSxDQUFDcmQsSUFBUCxDQUFZcUYsV0FBWixFQUFoQixHQUEwQztBQUFqRCxLQUF0QyxFQUNJM0MsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUV1OUIsZ0JBQWdCLENBQUNDLG1CQUE3QjtBQUFrRHp5QixXQUFLLEVBQUU7QUFBQ3dlLGFBQUssRUFBRSxNQUFSO0FBQWdCK0wsY0FBTSxFQUFFO0FBQXhCLE9BQXpEOztBQUEwRjZGLGFBQU8sR0FBRTtBQUMvSDM4QixzREFBSyxDQUFDK1AscUJBQU4sQ0FDSSw0Q0FBMENpTCxNQUFNLENBQUNyZCxJQUFQLENBQVlxRixXQUFaLEVBQTFDLEdBQW9FLElBRHhFLEVBRUksMERBQXdEZ1ksTUFBTSxDQUFDcmQsSUFBUCxDQUFZcUYsV0FBWixFQUF4RCxHQUFrRixrQ0FGdEYsRUFHSTtBQUNJcThCLHFCQUFXLEVBQUUsc0JBRGpCO0FBRUlydkIsb0JBQVUsRUFBRSxzQkFGaEI7QUFHSXN2QixnQkFBTSxFQUFFLEtBSFo7QUFJSUMsa0JBQVEsRUFBRSxNQUFNLENBQUUsQ0FKdEI7QUFLSUMsbUJBQVMsRUFBRSxNQUFNO0FBQ2IsZ0JBQUluWSxJQUFJLEdBQUcrWSxhQUFhLENBQUM1QyxNQUFELENBQWIsQ0FBc0IvekIsSUFBdEIsQ0FBMkI5RSxDQUFDLElBQUlBLENBQUMsQ0FBQyxDQUFELENBQUQsS0FBU3FXLE1BQU0sQ0FBQ0QsSUFBaEQsRUFBc0QsQ0FBdEQsQ0FBWDtBQUNBdlMsbUJBQU8sQ0FBQ0MsR0FBUixDQUFZNGUsSUFBWjtBQUNBK0ssNkRBQVMsQ0FBQy9LLElBQUQsQ0FBVCxDQUNDM0QsSUFERCxDQUNNLE1BQU0wTixHQUFOLElBQWE7QUFDZixrQkFBR0EsR0FBRyxDQUFDTyxNQUFKLEtBQWUsR0FBbEIsRUFBc0IsTUFBTSxJQUFJN29CLEtBQUosQ0FBVSxvQkFBVixDQUFOO0FBQ3RCLGtCQUFJcEMsT0FBTyxHQUFHLE1BQU0wcUIsR0FBRyxDQUFDaVAsTUFBSixFQUFwQjtBQUNBLGtCQUFJQyxXQUFXLEdBQUdqMkIsaURBQUksQ0FBQzJRLE1BQU0sQ0FBQ3JkLElBQVAsS0FBZ0IsUUFBaEIsR0FBMkJra0IsdURBQWMsQ0FBQzNILGNBQTFDLEdBQTJEMkgsdURBQWMsQ0FBQ3ZILGFBQTNFLEVBQTBGVSxNQUFNLENBQUNZLFFBQWpHLENBQXRCO0FBQ0FwVCxxQkFBTyxDQUFDQyxHQUFSLENBQVk2M0IsV0FBWjtBQUNBL1Qsc0VBQWEsQ0FBQytULFdBQUQsRUFBYzU1QixPQUFkLENBQWI7QUFDQTFHLDREQUFLLENBQUNxRyxTQUFOLENBQWdCMlUsTUFBTSxDQUFDcmQsSUFBUCxHQUFZLHlCQUE1QjtBQUNILGFBUkQsRUFRR3EwQixLQVJILENBUVMvVixHQUFHLElBQUk7QUFDWkEsaUJBQUcsR0FBR0EsR0FBRyxZQUFZblQsS0FBZixHQUF1Qm1ULEdBQXZCLEdBQTZCLElBQUluVCxLQUFKLENBQVVtVCxHQUFWLENBQW5DO0FBQ0FqYyw0REFBSyxDQUFDcUcsU0FBTixDQUFnQjRWLEdBQUcsQ0FBQ25XLE9BQXBCLEVBQTZCO0FBQ3pCbkksb0JBQUksRUFBRTtBQURtQixlQUE3QjtBQUdILGFBYkQ7QUFjSDtBQXRCTCxTQUhKO0FBNEJIOztBQTdCK0IsS0FBaEMsRUE4QkkwQywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRXU5QixnQkFBZ0IsQ0FBQ29CLFVBQTdCO0FBQXlDLHFCQUFjLE9BQXZEO0FBQStEcFYsV0FBSyxFQUFDLE1BQXJFO0FBQTRFK0wsWUFBTSxFQUFDLE1BQW5GO0FBQTBGNEksYUFBTyxFQUFDLFdBQWxHO0FBQThHbnpCLFdBQUssRUFBQztBQUNoSmdNLGFBQUssRUFBRSxtQkFEeUk7QUFFaEpnb0IsY0FBTSxFQUFFO0FBRndJO0FBQXBILEtBQWhDLGVBSUk7QUFBRyxVQUFJLEVBQUMsTUFBUjtBQUFlLG1CQUFVO0FBQXpCLG9CQUNJO0FBQU0sT0FBQyxFQUFDO0FBQVIsTUFESixlQUVJO0FBQU0sV0FBSyxFQUFDLE1BQVo7QUFBbUIsVUFBSSxFQUFDLGNBQXhCO0FBQXVDLE9BQUMsRUFBQztBQUF6QyxNQUZKLENBSkosQ0E5QkosQ0FESixDQWJ1RSxDQUFoRSxDQUFYO0FBd0RBbGdDLCtDQUFJLENBQUMrcUIsUUFBTCxDQUFjdGhCLE1BQWQsQ0FBcUJtMkIsSUFBckIsRUFBMkJ4MEIsR0FBM0I7QUFDSCxHQTNESyxNQTJERDtBQUNEQSxPQUFHLENBQUN5a0IsVUFBSixDQUFlM2pCLEtBQWYsQ0FBcUI0eUIsV0FBckIsR0FBbUMsU0FBbkM7QUFDQSxRQUFJYyxJQUFJLEdBQUc1L0IsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDZ0wsV0FBSyxFQUFFO0FBQUNhLGVBQU8sRUFBRTtBQUFWO0FBQVIsS0FBakMsRUFBZ0UsQ0FDdkUvTSwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCaytCLHVEQUF6QixFQUFzQztBQUFDeDRCLFVBQUksRUFBRStULE1BQU0sQ0FBQ3JkLElBQVAsR0FBWSxHQUFaLEdBQWdCcWQsTUFBTSxDQUFDN1QsSUFBdkIsR0FBNEIsMkNBQW5DO0FBQWdGb0YsV0FBSyxFQUFDO0FBQXRGLEtBQXRDLEVBQ0lsTSwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRXU5QixnQkFBZ0IsQ0FBQ0MsbUJBQTdCO0FBQWtEenlCLFdBQUssRUFBRTtBQUFDd2UsYUFBSyxFQUFFLE1BQVI7QUFBZ0IrTCxjQUFNLEVBQUUsTUFBeEI7QUFBZ0NvSixhQUFLLEVBQUU7QUFBdkM7QUFBekQsS0FBaEMsRUFDSTcvQiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRXU5QixnQkFBZ0IsQ0FBQ29CLFVBQTdCO0FBQXlDLHFCQUFjLE9BQXZEO0FBQStEcFYsV0FBSyxFQUFDLE1BQXJFO0FBQTRFK0wsWUFBTSxFQUFDLE1BQW5GO0FBQTBGNEksYUFBTyxFQUFDLGFBQWxHO0FBQWdIYyxZQUFNLEVBQUMsU0FBdkg7QUFBaUlqMEIsV0FBSyxFQUFDO0FBQUNnTSxhQUFLLEVBQUM7QUFBUDtBQUF2SSxLQUFoQyxFQUNJbFksMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDdStCLFVBQUksRUFBQyxjQUFOO0FBQXNCLG1CQUFZLFNBQWxDO0FBQTRDcEQsT0FBQyxFQUFDO0FBQTlDLEtBQWpDLENBREosQ0FESixFQUlJcjhCLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFeTlCLFdBQVcsQ0FBQ0M7QUFBeEIsS0FBaEMsRUFDSTcrQiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUMscUJBQWMsT0FBZjtBQUF1QndwQixXQUFLLEVBQUMsTUFBN0I7QUFBb0MrTCxZQUFNLEVBQUMsTUFBM0M7QUFBa0Q0SSxhQUFPLEVBQUM7QUFBMUQsS0FBaEMsRUFDSXIvQiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUN1K0IsVUFBSSxFQUFDLFNBQU47QUFBZ0JwRCxPQUFDLEVBQUM7QUFBbEIsS0FBakMsQ0FESixDQURKLENBSkosQ0FESixDQUR1RSxFQWF2RXI4QiwyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCaytCLHVEQUF6QixFQUFzQztBQUFDeDRCLFVBQUksRUFBRSxrQkFBZ0IrVCxNQUFNLENBQUNyZCxJQUFQLENBQVlxRixXQUFaLEVBQWhCLEdBQTBDO0FBQWpELEtBQXRDLEVBQ0kzQywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRXU5QixnQkFBZ0IsQ0FBQ0MsbUJBQTdCO0FBQWtEenlCLFdBQUssRUFBRTtBQUFDd2UsYUFBSyxFQUFFLE1BQVI7QUFBZ0IrTCxjQUFNLEVBQUU7QUFBeEIsT0FBekQ7O0FBQTBGNkYsYUFBTyxHQUFFO0FBQy9IMzhCLHNEQUFLLENBQUMrUCxxQkFBTixDQUNJLDRDQUEwQ2lMLE1BQU0sQ0FBQ3JkLElBQVAsQ0FBWXFGLFdBQVosRUFBMUMsR0FBb0UsSUFEeEUsRUFFSSx5REFBdURnWSxNQUFNLENBQUNyZCxJQUFQLENBQVlxRixXQUFaLEVBQXZELEdBQWlGLHVDQUZyRixFQUdJO0FBQ0lxOEIscUJBQVcsRUFBRSxzQkFEakI7QUFFSXJ2QixvQkFBVSxFQUFFLHNCQUZoQjtBQUdJc3ZCLGdCQUFNLEVBQUUsS0FIWjtBQUlJQyxrQkFBUSxFQUFFLE1BQU0sQ0FBRSxDQUp0QjtBQUtJQyxtQkFBUyxFQUFFLE1BQU07QUFDYixnQkFBSW5ZLElBQUksR0FBRytZLGFBQWEsQ0FBQzVDLE1BQUQsQ0FBYixDQUFzQi96QixJQUF0QixDQUEyQjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxLQUFTcVcsTUFBTSxDQUFDRCxJQUFoRCxFQUFzRCxDQUF0RCxDQUFYO0FBRUFxWCw2REFBUyxDQUFDL0ssSUFBRCxDQUFULENBQ0MzRCxJQURELENBQ00sTUFBTTBOLEdBQU4sSUFBYTtBQUNmLGtCQUFHQSxHQUFHLENBQUNPLE1BQUosS0FBZSxHQUFsQixFQUFzQixNQUFNLElBQUk3b0IsS0FBSixDQUFVLG9CQUFWLENBQU47QUFDdEIsa0JBQUlwQyxPQUFPLEdBQUcsTUFBTTBxQixHQUFHLENBQUNpUCxNQUFKLEVBQXBCO0FBQ0Esa0JBQUlDLFdBQVcsR0FBR2oyQixpREFBSSxDQUFDMlEsTUFBTSxDQUFDcmQsSUFBUCxLQUFnQixRQUFoQixHQUEyQmtrQix1REFBYyxDQUFDM0gsY0FBMUMsR0FBMkQySCx1REFBYyxDQUFDdkgsYUFBM0UsRUFBMEZVLE1BQU0sQ0FBQ1ksUUFBakcsQ0FBdEI7QUFFQTJRLHNFQUFhLENBQUMrVCxXQUFELEVBQWM1NUIsT0FBZCxDQUFiO0FBQ0ExRyw0REFBSyxDQUFDcUcsU0FBTixDQUFnQjJVLE1BQU0sQ0FBQ3JkLElBQVAsR0FBWSx5QkFBNUI7QUFDSCxhQVJELEVBUUdxMEIsS0FSSCxDQVFTL1YsR0FBRyxJQUFJO0FBQ1pBLGlCQUFHLEdBQUdBLEdBQUcsWUFBWW5ULEtBQWYsR0FBdUJtVCxHQUF2QixHQUE2QixJQUFJblQsS0FBSixDQUFVbVQsR0FBVixDQUFuQztBQUNBamMsNERBQUssQ0FBQ3FHLFNBQU4sQ0FBZ0I0VixHQUFHLENBQUNuVyxPQUFwQixFQUE2QjtBQUN6Qm5JLG9CQUFJLEVBQUU7QUFEbUIsZUFBN0I7QUFHSCxhQWJEO0FBY0g7QUF0QkwsU0FISjtBQTRCSDs7QUE3QitCLEtBQWhDLEVBOEJJMEMsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUV1OUIsZ0JBQWdCLENBQUNvQixVQUE3QjtBQUF5QyxxQkFBYyxPQUF2RDtBQUErRHBWLFdBQUssRUFBQyxNQUFyRTtBQUE0RStMLFlBQU0sRUFBQyxNQUFuRjtBQUEwRjRJLGFBQU8sRUFBQyxXQUFsRztBQUE4R256QixXQUFLLEVBQUM7QUFDaEpnTSxhQUFLLEVBQUUsbUJBRHlJO0FBRWhKZ29CLGNBQU0sRUFBRTtBQUZ3STtBQUFwSCxLQUFoQyxlQUlJO0FBQUcsVUFBSSxFQUFDLE1BQVI7QUFBZSxtQkFBVTtBQUF6QixvQkFDSTtBQUFNLE9BQUMsRUFBQztBQUFSLE1BREosZUFFSTtBQUFNLFdBQUssRUFBQyxNQUFaO0FBQW1CLFVBQUksRUFBQyxjQUF4QjtBQUF1QyxPQUFDLEVBQUM7QUFBekMsTUFGSixDQUpKLENBOUJKLENBREosQ0FidUUsQ0FBaEUsQ0FBWDtBQXdEQWxnQywrQ0FBSSxDQUFDK3FCLFFBQUwsQ0FBY3RoQixNQUFkLENBQXFCbTJCLElBQXJCLEVBQTJCeDBCLEdBQTNCO0FBQ0g7QUFDSjs7QUFFRCxTQUFTMjBCLGFBQVQsQ0FBdUJoK0IsR0FBdkIsRUFBMkI7QUFDdkIsTUFBSTg1QixHQUFHLEdBQUcsRUFBVjtBQUNBaDlCLFFBQU0sQ0FBQ2lCLElBQVAsQ0FBWWlDLEdBQVosRUFBaUJrSSxPQUFqQixDQUF5QjZJLENBQUMsSUFBSTtBQUMxQitvQixPQUFHLENBQUM5eEIsSUFBSixDQUFTLENBQUMrSSxDQUFELEVBQUkvUSxHQUFHLENBQUMrUSxDQUFELENBQVAsQ0FBVDtBQUNILEdBRkQ7QUFHQSxTQUFPK29CLEdBQVA7QUFDSDs7QUFFRCxJQUFJdDhCLEdBQUcsR0FBRyxJQUFWO0FBQ0EsSUFBSTZnQyxJQUFJLEdBQUcsSUFBWDtBQUVBeGpDLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQjZaLGNBQXJCLENBQW9DcmMsQ0FBQyxJQUFFQSxDQUFDLENBQUNzNUIsYUFBekMsRUFDQ2hkLElBREQsQ0FDTWlkLGtCQUFrQixJQUFJO0FBQ3hCLE1BQUlDLFlBQVksR0FBR0Qsa0JBQWtCLENBQUNFLElBQXRDOztBQUNBSixNQUFJLEdBQUcsWUFBVTtBQUNiRyxnQkFBWSxDQUFDbDRCLEdBQWIsQ0FBaUIsZ0NBQWpCLEVBQW1EbzRCLElBQUksQ0FBQ2xtQixJQUFJLENBQUNPLFNBQUwsQ0FBZXZiLEdBQWYsQ0FBRCxDQUF2RDtBQUNILEdBRkQ7O0FBR0FtaEMsYUFBVyxDQUFDLE1BQU07QUFDZE4sUUFBSTtBQUNQLEdBRlUsRUFFUixNQUZRLENBQVg7O0FBR0EsTUFBRztBQUNDLFFBQUlsK0IsR0FBRyxHQUFHeStCLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDTCxZQUFZLENBQUM3Z0MsR0FBYixDQUFpQixnQ0FBakIsQ0FBRCxDQUFMLENBQXZCOztBQUNBLFFBQUd3QyxHQUFHLFlBQVl1RyxLQUFmLElBQXdCLENBQUNnTixLQUFLLENBQUNDLE9BQU4sQ0FBY3hULEdBQWQsQ0FBekIsSUFBK0NBLEdBQUcsQ0FBQ3FCLE1BQUosS0FBZSxDQUE5RCxJQUFtRXJCLEdBQUcsQ0FBQ2tILElBQUosQ0FBUzlFLENBQUMsSUFBSSxPQUFPQSxDQUFQLEtBQWEsUUFBM0IsQ0FBbkUsSUFBMkdtZCxNQUFNLENBQUNDLElBQVAsQ0FBWXhmLEdBQUcsQ0FBQyxDQUFELENBQWYsRUFBb0IsUUFBcEIsRUFBOEJxQixNQUE5QixLQUF5QyxFQUFwSixJQUEwSmtlLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZeGYsR0FBRyxDQUFDLENBQUQsQ0FBZixFQUFvQixRQUFwQixFQUE4QnFCLE1BQTlCLEtBQXlDLEVBQXRNLEVBQXlNO0FBQ3JNczlCLGlCQUFXO0FBQ1hULFVBQUk7QUFDSjtBQUNIOztBQUNEN2dDLE9BQUcsR0FBRzJDLEdBQU47QUFDSCxHQVJELENBUUMsT0FBTW9DLENBQU4sRUFBUTtBQUNMdThCLGVBQVc7QUFDWFQsUUFBSTtBQUNQO0FBQ0osQ0FyQkQ7O0FBdUJBLFNBQVNTLFdBQVQsR0FBc0I7QUFDbEJ0aEMsS0FBRyxHQUFHLENBQUMyK0Isa0RBQUEsQ0FBbUIsRUFBbkIsRUFBdUJ2YyxRQUF2QixDQUFnQyxRQUFoQyxDQUFELEVBQTRDdWMsa0RBQUEsQ0FBbUIsRUFBbkIsRUFBdUJ2YyxRQUF2QixDQUFnQyxRQUFoQyxDQUE1QyxDQUFOO0FBQ0g7O0FBRUQsU0FBU2dmLGFBQVQsQ0FBdUJuUCxJQUF2QixFQUE0QjtBQUN4QixNQUFHO0FBQ0MsV0FBT2pYLElBQUksQ0FBQ0MsS0FBTCxDQUFXZ1gsSUFBWCxDQUFQO0FBQ0gsR0FGRCxDQUVDLE9BQU1sdEIsQ0FBTixFQUFRO0FBQ0wsV0FBT0EsQ0FBQyxZQUFZbUUsS0FBYixHQUFxQixJQUFJQSxLQUFKLENBQVVuRSxDQUFWLENBQXJCLEdBQW9DQSxDQUEzQztBQUNIO0FBQ0o7O0FBRU0sU0FBU21XLG9CQUFULENBQThCdFgsSUFBOUIsRUFBbUM7QUFDdEMsTUFBRztBQUNDLFFBQUkyOUIsUUFBUSxHQUFHNUMsdURBQUEsQ0FBd0IsYUFBeEIsRUFBdUN6YyxNQUFNLENBQUNDLElBQVAsQ0FBWW5pQixHQUFHLENBQUMsQ0FBRCxDQUFmLEVBQW9CLFFBQXBCLENBQXZDLEVBQXNFa2lCLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbmlCLEdBQUcsQ0FBQyxDQUFELENBQWYsRUFBb0IsUUFBcEIsQ0FBdEUsQ0FBZjtBQUNBLFFBQUl3aEMsU0FBUyxHQUFHRCxRQUFRLENBQUNuTyxNQUFULENBQWdCbFIsTUFBTSxDQUFDQyxJQUFQLENBQVl2ZSxJQUFaLEVBQWtCLFFBQWxCLENBQWhCLENBQWhCO0FBQ0E0OUIsYUFBUyxHQUFHdGYsTUFBTSxDQUFDNmMsTUFBUCxDQUFjLENBQUN5QyxTQUFELEVBQVlELFFBQVEsQ0FBQ0UsS0FBVCxFQUFaLENBQWQsQ0FBWjtBQUNBLFdBQU9ELFNBQVMsQ0FBQ3BmLFFBQVYsQ0FBbUIsTUFBbkIsQ0FBUDtBQUNILEdBTEQsQ0FLQyxPQUFNcmQsQ0FBTixFQUFRO0FBQ0wsV0FBTyxJQUFQO0FBQ0g7QUFDSjtBQUNNLFNBQVNnVyxvQkFBVCxDQUE4Qm5YLElBQTlCLEVBQW1DO0FBQ3RDLE1BQUlrUSxJQUFJLEdBQUcsQ0FBQ29PLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbmlCLEdBQUcsQ0FBQyxDQUFELENBQWYsRUFBb0IsUUFBcEIsQ0FBRCxFQUFnQ2tpQixNQUFNLENBQUNDLElBQVAsQ0FBWW5pQixHQUFHLENBQUMsQ0FBRCxDQUFmLEVBQW9CLFFBQXBCLENBQWhDLENBQVg7QUFFQSxNQUFJMGhDLE1BQU0sR0FBRy9DLHFEQUFBLENBQXNCLGFBQXRCLEVBQXFDLEdBQUc3cUIsSUFBeEMsQ0FBYjtBQUNBLE1BQUk2dEIsU0FBUyxHQUFHRCxNQUFNLENBQUN0TyxNQUFQLENBQWNsUixNQUFNLENBQUNDLElBQVAsQ0FBWXZlLElBQVosRUFBa0IsTUFBbEIsQ0FBZCxDQUFoQjtBQUNBKzlCLFdBQVMsR0FBR3pmLE1BQU0sQ0FBQzZjLE1BQVAsQ0FBYyxDQUFDNEMsU0FBRCxFQUFZRCxNQUFNLENBQUNELEtBQVAsRUFBWixDQUFkLENBQVo7QUFDQSxTQUFPRSxTQUFTLENBQUN2ZixRQUFWLENBQW1CLFFBQW5CLENBQVA7QUFDSCxDOzs7Ozs7Ozs7Ozs7QUNsY0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNd2YsWUFBTixDQUFtQjtBQUNmeGdDLGFBQVcsR0FBRTtBQUNUL0QsVUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBFLGFBQWpCLENBQStCdTRCLFlBQS9CLEdBQThDLElBQTlDO0FBQ0g7O0FBQ0QsTUFBSTF1QixNQUFKLEdBQWE7QUFBQyxXQUFPblMsdURBQWMsQ0FBQ3NaLGFBQXRCO0FBQXFDOztBQUpwQzs7QUFPbkJ1bkIsWUFBWSxDQUFDMS9CLFNBQWIsQ0FBdUJrZixXQUF2QixHQUFxQyxrQkFBa0I7QUFDbkQsT0FBS3lnQixjQUFMO0FBQ0ExaUMsMERBQWMsQ0FBQzhMLE1BQWYsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekIsRUFBNEIsSUFBSSxNQUFNbEssdURBQWMsQ0FBQ3FnQixXQUFmLEVBQVYsQ0FBNUI7QUFDQSxRQUFNc0IsT0FBTyxHQUFHcGpCLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWIsbURBQVosQ0FBaEI7O0FBQ0EsT0FBSyxJQUFJaVgsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRytMLE9BQU8sQ0FBQzFlLE1BQTVCLEVBQW9DMlMsQ0FBQyxFQUFyQyxFQUF5QztBQUNyQyxRQUFJNUcsTUFBSixFQUFZeEksSUFBWjs7QUFFQSxRQUFJO0FBQ0F3SSxZQUFNLEdBQUdyUSxtREFBUyxDQUFDZ2pCLE9BQU8sQ0FBQy9MLENBQUQsQ0FBUixDQUFULENBQXNCNUcsTUFBL0I7QUFDQXhJLFVBQUksR0FBR3dJLE1BQU0sQ0FBQzBQLE9BQVAsRUFBUDtBQUNBLFVBQUkxUCxNQUFNLENBQUMreEIsSUFBUCxJQUFlLE9BQU8veEIsTUFBTSxDQUFDK3hCLElBQWQsSUFBdUIsVUFBMUMsRUFBc0QveEIsTUFBTSxDQUFDK3hCLElBQVA7QUFDekQsS0FKRCxDQUlFLE9BQU96bEIsR0FBUCxFQUFZO0FBQ1YxYyw0REFBWSxDQUFDNEgsSUFBRCxDQUFaLEdBQXFCLEtBQXJCO0FBQ0FuSCxvREFBSyxDQUFDaWMsR0FBTixDQUFVLFNBQVYsRUFBcUI5VSxJQUFJLEdBQUcsdUJBQTVCLEVBQXFEOFUsR0FBckQ7QUFDQWxkLDhEQUFjLENBQUNxTCxJQUFmLENBQW9CO0FBQUNqRCxZQUFJLEVBQUVBLElBQVA7QUFBYTBZLFlBQUksRUFBRXZnQixtREFBUyxDQUFDZ2pCLE9BQU8sQ0FBQy9MLENBQUQsQ0FBUixDQUFULENBQXNCcUYsUUFBekM7QUFBbUQ5VixlQUFPLEVBQUUsNEJBQTVEO0FBQTBGNk8sYUFBSyxFQUFFO0FBQUM3TyxpQkFBTyxFQUFFbVcsR0FBRyxDQUFDblcsT0FBZDtBQUF1QmthLGVBQUssRUFBRS9ELEdBQUcsQ0FBQytEO0FBQWxDO0FBQWpHLE9BQXBCO0FBQ0E7QUFDSDs7QUFFRCxRQUFJLENBQUN6Z0Isc0RBQVksQ0FBQzRILElBQUQsQ0FBakIsRUFBeUI1SCxzREFBWSxDQUFDNEgsSUFBRCxDQUFaLEdBQXFCLEtBQXJCOztBQUV6QixRQUFJNUgsc0RBQVksQ0FBQzRILElBQUQsQ0FBaEIsRUFBd0I7QUFDcEIsVUFBSTtBQUNBd0ksY0FBTSxDQUFDMUgsS0FBUDtBQUNBLFlBQUl6Six3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUN3Qiw4Q0FBSyxDQUFDcUcsU0FBTixDQUFpQixHQUFFc0osTUFBTSxDQUFDMFAsT0FBUCxFQUFpQixLQUFJMVAsTUFBTSxDQUFDdlMsVUFBUCxFQUFvQixlQUE1RDtBQUNwQyxPQUhELENBR0UsT0FBTzZlLEdBQVAsRUFBWTtBQUNWMWMsOERBQVksQ0FBQzRILElBQUQsQ0FBWixHQUFxQixLQUFyQjtBQUNBbkgsc0RBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxTQUFWLEVBQXFCOVUsSUFBSSxHQUFHLHdCQUE1QixFQUFzRDhVLEdBQXREO0FBQ0FsZCxnRUFBYyxDQUFDcUwsSUFBZixDQUFvQjtBQUFDakQsY0FBSSxFQUFFQSxJQUFQO0FBQWEwWSxjQUFJLEVBQUV2Z0IsbURBQVMsQ0FBQ2dqQixPQUFPLENBQUMvTCxDQUFELENBQVIsQ0FBVCxDQUFzQnFGLFFBQXpDO0FBQW1EOVYsaUJBQU8sRUFBRSw2QkFBNUQ7QUFBMkY2TyxlQUFLLEVBQUU7QUFBQzdPLG1CQUFPLEVBQUVtVyxHQUFHLENBQUNuVyxPQUFkO0FBQXVCa2EsaUJBQUssRUFBRS9ELEdBQUcsQ0FBQytEO0FBQWxDO0FBQWxHLFNBQXBCO0FBQ0g7QUFDSjs7QUFFRCxVQUFNLElBQUluRSxPQUFKLENBQWExQyxPQUFELElBQWE0QyxVQUFVLENBQUM1QyxPQUFELEVBQVUsRUFBVixDQUFuQyxDQUFOO0FBQ0g7O0FBQ0QsT0FBS3dvQixjQUFMOztBQUVBbnVCLHFCQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQm91QixNQUFwQixDQUEyQkMscUJBQTNCLEdBQW1EckssRUFBbkQsQ0FBc0Qsc0JBQXRELEVBQThFLEtBQUtzSyxhQUFMLENBQW1CdC9CLElBQW5CLENBQXdCLElBQXhCLENBQTlFLEVBbkNtRCxDQW9DbkQ7O0FBQ0gsQ0FyQ0Q7O0FBdUNBZy9CLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCaWdDLFdBQXZCLEdBQXFDLFVBQVNweUIsTUFBVCxFQUFpQnNELE1BQU0sR0FBRyxLQUExQixFQUFpQztBQUNsRSxNQUFJO0FBQ0EzVCx1REFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QjFILEtBQXpCO0FBQ0EsUUFBSXpKLHdEQUFjLENBQUMsV0FBRCxDQUFkLElBQStCLENBQUN5VSxNQUFwQyxFQUE0Q2pULDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUUvRyxtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QjBQLE9BQXpCLEVBQW1DLEtBQUkvZixtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QnZTLFVBQXpCLEVBQXNDLGVBQWhHO0FBQy9DLEdBSEQsQ0FJQSxPQUFPNmUsR0FBUCxFQUFZO0FBQ1IsUUFBSXpkLHdEQUFjLENBQUMsV0FBRCxDQUFkLElBQStCLENBQUN5VSxNQUFwQyxFQUE0Q2pULDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUUvRyxtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QjBQLE9BQXpCLEVBQW1DLEtBQUkvZixtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QnZTLFVBQXpCLEVBQXNDLHdCQUFoRyxFQUF5SDtBQUFDTyxVQUFJLEVBQUU7QUFBUCxLQUF6SDtBQUM1QzRCLDBEQUFZLENBQUNvUSxNQUFELENBQVosR0FBdUIsS0FBdkI7QUFDQSxTQUFLZ3lCLGNBQUw7QUFDQTNoQyxrREFBSyxDQUFDaWMsR0FBTixDQUFVLFNBQVYsRUFBcUJ0TSxNQUFNLEdBQUcsd0JBQTlCLEVBQXdEc00sR0FBeEQ7QUFDSDtBQUNKLENBWEQ7O0FBYUF1bEIsWUFBWSxDQUFDMS9CLFNBQWIsQ0FBdUJrZ0MsVUFBdkIsR0FBb0MsVUFBU3J5QixNQUFULEVBQWlCc0QsTUFBTSxHQUFHLEtBQTFCLEVBQWlDO0FBQ2pFLE1BQUk7QUFDQTNULHVEQUFTLENBQUNxUSxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCb0YsSUFBekI7QUFDQSxRQUFJdlcsd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3lVLE1BQXBDLEVBQTRDalQsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRS9HLG1EQUFTLENBQUNxUSxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCMFAsT0FBekIsRUFBbUMsS0FBSS9mLG1EQUFTLENBQUNxUSxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCdlMsVUFBekIsRUFBc0MsZUFBaEc7QUFDL0MsR0FIRCxDQUlBLE9BQU82ZSxHQUFQLEVBQVk7QUFDUixRQUFJemQsd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3lVLE1BQXBDLEVBQTRDalQsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRS9HLG1EQUFTLENBQUNxUSxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCMFAsT0FBekIsRUFBbUMsS0FBSS9mLG1EQUFTLENBQUNxUSxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCdlMsVUFBekIsRUFBc0Msd0JBQWhHLEVBQXlIO0FBQUNPLFVBQUksRUFBRTtBQUFQLEtBQXpIO0FBQzVDcUMsa0RBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxTQUFWLEVBQXFCM2MsbURBQVMsQ0FBQ3FRLE1BQUQsQ0FBVCxDQUFrQkEsTUFBbEIsQ0FBeUIwUCxPQUF6QixLQUFxQyx3QkFBMUQsRUFBb0ZwRCxHQUFwRjtBQUNIO0FBQ0osQ0FURDs7QUFXQXVsQixZQUFZLENBQUMxL0IsU0FBYixDQUF1Qm1nQyxZQUF2QixHQUFzQyxVQUFVdHlCLE1BQVYsRUFBa0JzRCxNQUFNLEdBQUcsS0FBM0IsRUFBa0M7QUFDcEUsTUFBSTFULHNEQUFZLENBQUNvUSxNQUFELENBQWhCLEVBQTBCO0FBQzFCcFEsd0RBQVksQ0FBQ29RLE1BQUQsQ0FBWixHQUF1QixJQUF2QjtBQUNBLE9BQUtneUIsY0FBTDtBQUNBLE9BQUtJLFdBQUwsQ0FBaUJweUIsTUFBakIsRUFBeUJzRCxNQUF6QjtBQUNILENBTEQ7O0FBT0F1dUIsWUFBWSxDQUFDMS9CLFNBQWIsQ0FBdUIyRCxNQUF2QixHQUFnQyxVQUFVa0ssTUFBVixFQUFrQnNELE1BQU0sR0FBRyxLQUEzQixFQUFrQztBQUM5RCxTQUFPLEtBQUtndkIsWUFBTCxDQUFrQnR5QixNQUFsQixFQUEwQnNELE1BQTFCLENBQVA7QUFDSCxDQUZEOztBQUlBdXVCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCb2dDLGFBQXZCLEdBQXVDLFVBQVV2eUIsTUFBVixFQUFrQnNELE1BQU0sR0FBRyxLQUEzQixFQUFrQztBQUNyRSxNQUFJLENBQUMxVCxzREFBWSxDQUFDb1EsTUFBRCxDQUFqQixFQUEyQjtBQUMzQnBRLHdEQUFZLENBQUNvUSxNQUFELENBQVosR0FBdUIsS0FBdkI7QUFDQSxPQUFLZ3lCLGNBQUw7QUFDQSxPQUFLSyxVQUFMLENBQWdCcnlCLE1BQWhCLEVBQXdCc0QsTUFBeEI7QUFDSCxDQUxEOztBQU9BdXVCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCNkQsT0FBdkIsR0FBaUMsVUFBVWdLLE1BQVYsRUFBa0JzRCxNQUFNLEdBQUcsS0FBM0IsRUFBa0M7QUFDL0QsU0FBTyxLQUFLaXZCLGFBQUwsQ0FBbUJ2eUIsTUFBbkIsRUFBMkJzRCxNQUEzQixDQUFQO0FBQ0gsQ0FGRDs7QUFJQXV1QixZQUFZLENBQUMxL0IsU0FBYixDQUF1QnFnQyxZQUF2QixHQUFzQyxVQUFVeHlCLE1BQVYsRUFBa0I7QUFDcEQsTUFBSXBRLHNEQUFZLENBQUNvUSxNQUFELENBQWhCLEVBQTBCLEtBQUt1eUIsYUFBTCxDQUFtQnZ5QixNQUFuQixFQUExQixLQUNLLEtBQUtzeUIsWUFBTCxDQUFrQnR5QixNQUFsQjtBQUNSLENBSEQ7O0FBS0E2eEIsWUFBWSxDQUFDMS9CLFNBQWIsQ0FBdUJrUixNQUF2QixHQUFnQyxVQUFVckQsTUFBVixFQUFrQnNELE1BQU0sR0FBRyxLQUEzQixFQUFrQztBQUM5RCxTQUFPLEtBQUtrdkIsWUFBTCxDQUFrQnh5QixNQUFsQixFQUEwQnNELE1BQTFCLENBQVA7QUFDSCxDQUZEOztBQUlBdXVCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCMmEsVUFBdkIsR0FBb0MsZ0JBQWViLFFBQWYsRUFBeUI7QUFDekQsUUFBTWpILEtBQUssR0FBRyxNQUFNaFUsdURBQWMsQ0FBQytlLFdBQWYsQ0FBMkI5RCxRQUEzQixFQUFxQyxRQUFyQyxDQUFwQjs7QUFDQSxNQUFJakgsS0FBSixFQUFXO0FBQ1AsUUFBSW5XLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3dCLDhDQUFLLENBQUNxaUIsaUJBQU4sQ0FBd0I7QUFBQ0MsYUFBTyxFQUFFLENBQUMzTixLQUFEO0FBQVYsS0FBeEI7QUFDakMsUUFBSW5XLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3dCLDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUV1VixRQUFTLHVCQUE1QixFQUFvRDtBQUFDamUsVUFBSSxFQUFFO0FBQVAsS0FBcEQ7QUFDakMsV0FBT3FDLDhDQUFLLENBQUNpYyxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRUwsUUFBUyx1QkFBeEMsRUFBZ0VqSCxLQUFoRSxDQUFQO0FBQ0g7O0FBQ0QsUUFBTWhGLE1BQU0sR0FBR3pRLE1BQU0sQ0FBQ3loQixNQUFQLENBQWNyaEIsbURBQWQsRUFBeUJtSyxJQUF6QixDQUE4QjI0QixDQUFDLElBQUs1NUIsT0FBTyxDQUFDQyxHQUFSLENBQVkyNUIsQ0FBQyxDQUFDeG1CLFFBQWQsRUFBd0JBLFFBQXhCLENBQUQsSUFBdUN3bUIsQ0FBQyxDQUFDeG1CLFFBQUYsSUFBY0EsUUFBeEYsRUFBa0dqTSxNQUFqSDs7QUFDQSxNQUFJO0FBQUUsUUFBSUEsTUFBTSxDQUFDK3hCLElBQVAsSUFBZSxPQUFPL3hCLE1BQU0sQ0FBQyt4QixJQUFkLElBQXVCLFVBQTFDLEVBQXNEL3hCLE1BQU0sQ0FBQyt4QixJQUFQO0FBQWUsR0FBM0UsQ0FDQSxPQUFPemxCLEdBQVAsRUFBWTtBQUFDLFFBQUl6ZCx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUN3Qiw4Q0FBSyxDQUFDcWlCLGlCQUFOLENBQXdCO0FBQUNDLGFBQU8sRUFBRSxDQUFDckcsR0FBRDtBQUFWLEtBQXhCO0FBQTJDOztBQUN6RmpjLGdEQUFLLENBQUN5SSxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRWtILE1BQU0sQ0FBQzBQLE9BQVAsRUFBaUIsS0FBSTFQLE1BQU0sQ0FBQ3ZTLFVBQVAsRUFBb0IsY0FBeEU7QUFDQSxNQUFJb0Isd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXNKLE1BQU0sQ0FBQzBQLE9BQVAsRUFBaUIsS0FBSTFQLE1BQU0sQ0FBQ3ZTLFVBQVAsRUFBb0IsY0FBNUQsRUFBMkU7QUFBQ08sUUFBSSxFQUFFO0FBQVAsR0FBM0U7QUFDakM2QyxtREFBUSxDQUFDOEcsUUFBVCxDQUFrQixlQUFsQixFQUFtQ3FJLE1BQU0sQ0FBQzBQLE9BQVAsRUFBbkM7QUFDSCxDQWJEOztBQWVBbWlCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCcWEsWUFBdkIsR0FBc0MsVUFBU2ttQixjQUFULEVBQXlCO0FBQzNELFFBQU1DLFFBQVEsR0FBR3BqQyxNQUFNLENBQUN5aEIsTUFBUCxDQUFjcmhCLG1EQUFkLEVBQXlCbUssSUFBekIsQ0FBOEIyNEIsQ0FBQyxJQUFJQSxDQUFDLENBQUN4bUIsUUFBRixJQUFjeW1CLGNBQWpELEtBQW9FL2lDLG1EQUFTLENBQUMraUMsY0FBRCxDQUE5RjtBQUNBLE1BQUksQ0FBQ0MsUUFBTCxFQUFlO0FBQ2YsUUFBTTN5QixNQUFNLEdBQUcyeUIsUUFBUSxDQUFDM3lCLE1BQVQsQ0FBZ0IwUCxPQUFoQixFQUFmO0FBQ0EsTUFBSTlmLHNEQUFZLENBQUNvUSxNQUFELENBQWhCLEVBQTBCLEtBQUt1eUIsYUFBTCxDQUFtQnZ5QixNQUFuQixFQUEyQixJQUEzQjtBQUMxQixRQUFNZ0YsS0FBSyxHQUFHaFUsdURBQWMsQ0FBQ3NmLGFBQWYsQ0FBNkIzZ0IsbURBQVMsQ0FBQ3FRLE1BQUQsQ0FBVCxDQUFrQmlNLFFBQS9DLEVBQXlELFFBQXpELENBQWQ7QUFDQSxTQUFPdGMsbURBQVMsQ0FBQ3FRLE1BQUQsQ0FBaEI7O0FBQ0EsTUFBSWdGLEtBQUosRUFBVztBQUNQLFFBQUluVyx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUN3Qiw4Q0FBSyxDQUFDcWlCLGlCQUFOLENBQXdCO0FBQUNDLGFBQU8sRUFBRSxDQUFDM04sS0FBRDtBQUFWLEtBQXhCO0FBQ2pDLFFBQUluVyx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUN3Qiw4Q0FBSyxDQUFDcUcsU0FBTixDQUFpQixHQUFFc0osTUFBTywwREFBMUIsRUFBcUY7QUFBQ2hTLFVBQUksRUFBRTtBQUFQLEtBQXJGO0FBQ2pDLFdBQU9xQyw4Q0FBSyxDQUFDaWMsR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUV0TSxNQUFPLDBEQUF0QyxFQUFpR2dGLEtBQWpHLENBQVA7QUFDSDs7QUFDRDNVLGdEQUFLLENBQUN5SSxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRWtILE1BQU8sZ0JBQXRDO0FBQ0EsTUFBSW5SLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3dCLDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUVzSixNQUFPLGdCQUExQixFQUEyQztBQUFDaFMsUUFBSSxFQUFFO0FBQVAsR0FBM0M7QUFDakM2QyxtREFBUSxDQUFDOEcsUUFBVCxDQUFrQixpQkFBbEIsRUFBcUNxSSxNQUFyQztBQUNILENBZkQ7O0FBaUJBNnhCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCeWdDLE1BQXZCLEdBQWdDLFVBQVNGLGNBQVQsRUFBeUI7QUFDckQsUUFBTUMsUUFBUSxHQUFHcGpDLE1BQU0sQ0FBQ3loQixNQUFQLENBQWNyaEIsbURBQWQsRUFBeUJtSyxJQUF6QixDQUE4QjI0QixDQUFDLElBQUlBLENBQUMsQ0FBQ3htQixRQUFGLElBQWN5bUIsY0FBakQsS0FBb0UvaUMsbURBQVMsQ0FBQytpQyxjQUFELENBQTlGO0FBQ0EsTUFBSSxDQUFDQyxRQUFMLEVBQWU7QUFDZixPQUFLbm1CLFlBQUwsQ0FBa0JtbUIsUUFBUSxDQUFDMW1CLFFBQTNCOztBQUNBLFFBQU1tVSxRQUFRLEdBQUd2YyxtQkFBTyxDQUFDLGtCQUFELENBQVAsQ0FBZ0IyRixPQUFoQixDQUF3QnhZLHVEQUFjLENBQUNzWixhQUF2QyxFQUFzRHFvQixRQUFRLENBQUMxbUIsUUFBL0QsQ0FBakI7O0FBQ0FwSSxxQkFBTyxDQUFDLGNBQUQsQ0FBUCxDQUFjaVosVUFBZCxDQUF5QnNELFFBQXpCO0FBQ0gsQ0FORDs7QUFRQXlSLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCNmEsWUFBdkIsR0FBc0MsZ0JBQWUwbEIsY0FBZixFQUErQjtBQUNqRSxRQUFNQyxRQUFRLEdBQUdwakMsTUFBTSxDQUFDeWhCLE1BQVAsQ0FBY3JoQixtREFBZCxFQUF5Qm1LLElBQXpCLENBQThCMjRCLENBQUMsSUFBSUEsQ0FBQyxDQUFDeG1CLFFBQUYsSUFBY3ltQixjQUFqRCxLQUFvRS9pQyxtREFBUyxDQUFDK2lDLGNBQUQsQ0FBOUY7QUFDQSxNQUFJLENBQUNDLFFBQUwsRUFBZSxPQUFPLEtBQUs3bEIsVUFBTCxDQUFnQjRsQixjQUFoQixDQUFQO0FBQ2YsUUFBTTF5QixNQUFNLEdBQUcyeUIsUUFBUSxDQUFDM3lCLE1BQVQsQ0FBZ0IwUCxPQUFoQixFQUFmO0FBQ0EsUUFBTTdaLE9BQU8sR0FBR2pHLHNEQUFZLENBQUNvUSxNQUFELENBQTVCO0FBQ0EsTUFBSW5LLE9BQUosRUFBYSxLQUFLdzhCLFVBQUwsQ0FBZ0JyeUIsTUFBaEIsRUFBd0IsSUFBeEI7QUFDYixRQUFNZ0YsS0FBSyxHQUFHLE1BQU1oVSx1REFBYyxDQUFDeWYsYUFBZixDQUE2QjlnQixtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCaU0sUUFBL0MsRUFBeUQsUUFBekQsQ0FBcEI7O0FBQ0EsTUFBSWpILEtBQUosRUFBVztBQUNQLFFBQUluVyx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUN3Qiw4Q0FBSyxDQUFDcWlCLGlCQUFOLENBQXdCO0FBQUNDLGFBQU8sRUFBRSxDQUFDM04sS0FBRDtBQUFWLEtBQXhCO0FBQ2pDLFFBQUluVyx3REFBYyxDQUFDLFdBQUQsQ0FBbEIsRUFBaUN3Qiw4Q0FBSyxDQUFDcUcsU0FBTixDQUFpQixHQUFFc0osTUFBTyx5QkFBMUIsRUFBb0Q7QUFBQ2hTLFVBQUksRUFBRTtBQUFQLEtBQXBEO0FBQ2pDLFdBQU9xQyw4Q0FBSyxDQUFDaWMsR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUV0TSxNQUFPLHlCQUF0QyxFQUFnRWdGLEtBQWhFLENBQVA7QUFDSDs7QUFDRCxNQUFJclYsbURBQVMsQ0FBQ3FRLE1BQUQsQ0FBVCxDQUFrQkEsTUFBbEIsQ0FBeUIreEIsSUFBekIsSUFBaUMsT0FBT3BpQyxtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5Qit4QixJQUFoQyxJQUF5QyxVQUE5RSxFQUEwRnBpQyxtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5Qit4QixJQUF6QjtBQUMxRixNQUFJbDhCLE9BQUosRUFBYSxLQUFLdThCLFdBQUwsQ0FBaUJweUIsTUFBakIsRUFBeUIsSUFBekI7QUFDYjNQLGdEQUFLLENBQUN5SSxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRWtILE1BQU8sS0FBSXJRLG1EQUFTLENBQUNxUSxNQUFELENBQVQsQ0FBa0JBLE1BQWxCLENBQXlCdlMsVUFBekIsRUFBc0MsZ0JBQWhGO0FBQ0EsTUFBSW9CLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3dCLDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUVzSixNQUFPLEtBQUlyUSxtREFBUyxDQUFDcVEsTUFBRCxDQUFULENBQWtCQSxNQUFsQixDQUF5QnZTLFVBQXpCLEVBQXNDLGdCQUFwRSxFQUFxRjtBQUFDTyxRQUFJLEVBQUU7QUFBUCxHQUFyRjtBQUNqQzZDLG1EQUFRLENBQUM4RyxRQUFULENBQWtCLGlCQUFsQixFQUFxQ3FJLE1BQXJDO0FBQ0gsQ0FqQkQ7O0FBbUJBNnhCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCbVIsTUFBdkIsR0FBZ0MsVUFBUzlMLElBQVQsRUFBZTtBQUMzQyxTQUFPLEtBQUt3VixZQUFMLENBQWtCeFYsSUFBbEIsQ0FBUDtBQUNILENBRkQ7O0FBSUFxNkIsWUFBWSxDQUFDMS9CLFNBQWIsQ0FBdUIwZ0MsSUFBdkIsR0FBOEIsVUFBU0gsY0FBVCxFQUF5QjtBQUNuRDc1QixTQUFPLENBQUNDLEdBQVIsQ0FBWSxVQUFVNDVCLGNBQXRCO0FBQ0EsUUFBTUMsUUFBUSxHQUFHcGpDLE1BQU0sQ0FBQ3loQixNQUFQLENBQWNyaEIsbURBQWQsRUFBeUJtSyxJQUF6QixDQUE4QjI0QixDQUFDLElBQUlBLENBQUMsQ0FBQ3htQixRQUFGLElBQWN5bUIsY0FBakQsS0FBb0UvaUMsbURBQVMsQ0FBQytpQyxjQUFELENBQTlGO0FBQ0EsTUFBSSxDQUFDQyxRQUFMLEVBQWU7O0FBQ2YsUUFBTXZTLFFBQVEsR0FBR3ZjLG1CQUFPLENBQUMsa0JBQUQsQ0FBUCxDQUFnQjJGLE9BQWhCLENBQXdCeFksdURBQWMsQ0FBQ3NaLGFBQXZDLEVBQXNEcW9CLFFBQVEsQ0FBQzFtQixRQUEvRCxDQUFqQjs7QUFDQXBULFNBQU8sQ0FBQ0MsR0FBUixDQUFZLFVBQVVzbkIsUUFBdEI7O0FBQ0F2YyxxQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JpdkIsS0FBcEIsQ0FBMEJDLFFBQTFCLENBQW9DLEdBQUUzUyxRQUFTLEVBQS9DO0FBQ0gsQ0FQRDs7QUFTQXlSLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCNmdDLGdCQUF2QixHQUEwQyxZQUFXO0FBQ2pELFFBQU1qSSxPQUFPLEdBQUcvNUIsdURBQWMsQ0FBQzJmLGNBQWYsQ0FBOEIsUUFBOUIsQ0FBaEI7O0FBQ0EsT0FBSyxNQUFNMUUsUUFBWCxJQUF1QjhlLE9BQU8sQ0FBQy9iLEtBQS9CLEVBQXNDLEtBQUtsQyxVQUFMLENBQWdCYixRQUFoQjs7QUFDdEMsT0FBSyxNQUFNelUsSUFBWCxJQUFtQnV6QixPQUFPLENBQUM5WixPQUEzQixFQUFvQyxLQUFLekUsWUFBTCxDQUFrQmhWLElBQWxCO0FBQ3ZDLENBSkQ7O0FBTUFxNkIsWUFBWSxDQUFDMS9CLFNBQWIsQ0FBdUIyL0IsY0FBdkIsR0FBd0MsWUFBWTtBQUNoRCxRQUFNbUIsS0FBSyxHQUFHbGlDLGtEQUFTLENBQUMrWixlQUFWLENBQTBCLFNBQTFCLENBQWQ7O0FBQ0EsTUFBSW1vQixLQUFKLEVBQVc7QUFDUDFqQyxVQUFNLENBQUNzWixNQUFQLENBQWNqWixzREFBZCxFQUE0QnFqQyxLQUE1QjtBQUNIO0FBQ0osQ0FMRDs7QUFPQXBCLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCNi9CLGNBQXZCLEdBQXdDLFlBQVk7QUFDaERqaEMsb0RBQVMsQ0FBQ2dhLGVBQVYsQ0FBMEIsU0FBMUIsRUFBcUNuYixzREFBckM7QUFDSCxDQUZEOztBQUlBaWlDLFlBQVksQ0FBQzEvQixTQUFiLENBQXVCK2dDLFVBQXZCLEdBQW9DLFlBQVk7QUFDNUMsUUFBTXZnQixPQUFPLEdBQUdwakIsTUFBTSxDQUFDaUIsSUFBUCxDQUFZYixtREFBWixDQUFoQjs7QUFDQSxPQUFLLElBQUlpWCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHK0wsT0FBTyxDQUFDMWUsTUFBNUIsRUFBb0MyUyxDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFVBQU01RyxNQUFNLEdBQUdyUSxtREFBUyxDQUFDZ2pCLE9BQU8sQ0FBQy9MLENBQUQsQ0FBUixDQUFULENBQXNCNUcsTUFBckM7QUFDQSxRQUFJLENBQUNwUSxzREFBWSxDQUFDb1EsTUFBTSxDQUFDMFAsT0FBUCxFQUFELENBQWpCLEVBQXFDOztBQUNyQyxRQUFJLE9BQU8xUCxNQUFNLENBQUNtekIsU0FBZCxLQUE0QixVQUFoQyxFQUE0QztBQUN4QyxVQUFJO0FBQUVuekIsY0FBTSxDQUFDbXpCLFNBQVA7QUFBcUIsT0FBM0IsQ0FDQSxPQUFPN21CLEdBQVAsRUFBWTtBQUFFamMsc0RBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLGtDQUFrQ3RNLE1BQU0sQ0FBQzBQLE9BQVAsRUFBbEMsR0FBcUQsR0FBMUUsRUFBK0VwRCxHQUEvRTtBQUFzRjtBQUN2RztBQUNKO0FBQ0osQ0FWRDs7QUFZQXVsQixZQUFZLENBQUMxL0IsU0FBYixDQUF1QmdnQyxhQUF2QixHQUF1QyxZQUFZO0FBQy9DLFFBQU14ZixPQUFPLEdBQUdwakIsTUFBTSxDQUFDaUIsSUFBUCxDQUFZYixtREFBWixDQUFoQjs7QUFDQSxPQUFLLElBQUlpWCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHK0wsT0FBTyxDQUFDMWUsTUFBNUIsRUFBb0MyUyxDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFVBQU01RyxNQUFNLEdBQUdyUSxtREFBUyxDQUFDZ2pCLE9BQU8sQ0FBQy9MLENBQUQsQ0FBUixDQUFULENBQXNCNUcsTUFBckM7QUFDQSxRQUFJLENBQUNwUSxzREFBWSxDQUFDb1EsTUFBTSxDQUFDMFAsT0FBUCxFQUFELENBQWpCLEVBQXFDOztBQUNyQyxRQUFJLE9BQU8xUCxNQUFNLENBQUNvekIsUUFBZCxLQUEyQixVQUEvQixFQUEyQztBQUN2QyxVQUFJO0FBQUVwekIsY0FBTSxDQUFDb3pCLFFBQVA7QUFBb0IsT0FBMUIsQ0FDQSxPQUFPOW1CLEdBQVAsRUFBWTtBQUFFamMsc0RBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLGlDQUFpQ3RNLE1BQU0sQ0FBQzBQLE9BQVAsRUFBakMsR0FBb0QsR0FBekUsRUFBOEVwRCxHQUE5RTtBQUFxRjtBQUN0RztBQUNKO0FBQ0osQ0FWRDs7QUFZQXVsQixZQUFZLENBQUMxL0IsU0FBYixDQUF1Qm9rQixXQUF2QixHQUFxQyxVQUFTdmhCLENBQVQsRUFBWTtBQUM3QyxRQUFNMmQsT0FBTyxHQUFHcGpCLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWIsbURBQVosQ0FBaEI7O0FBQ0EsT0FBSyxJQUFJaVgsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRytMLE9BQU8sQ0FBQzFlLE1BQTVCLEVBQW9DMlMsQ0FBQyxFQUFyQyxFQUF5QztBQUNyQyxVQUFNNUcsTUFBTSxHQUFHclEsbURBQVMsQ0FBQ2dqQixPQUFPLENBQUMvTCxDQUFELENBQVIsQ0FBVCxDQUFzQjVHLE1BQXJDO0FBQ0EsUUFBSSxDQUFDcFEsc0RBQVksQ0FBQ29RLE1BQU0sQ0FBQzBQLE9BQVAsRUFBRCxDQUFqQixFQUFxQzs7QUFDckMsUUFBSSxPQUFPMVAsTUFBTSxDQUFDNm9CLFFBQWQsS0FBMkIsVUFBL0IsRUFBMkM7QUFDdkMsVUFBSTtBQUFFN29CLGNBQU0sQ0FBQzZvQixRQUFQLENBQWdCN3pCLENBQWhCO0FBQXFCLE9BQTNCLENBQ0EsT0FBT3NYLEdBQVAsRUFBWTtBQUFFamMsc0RBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxTQUFWLEVBQXFCLGlDQUFpQ3RNLE1BQU0sQ0FBQzBQLE9BQVAsRUFBakMsR0FBb0QsR0FBekUsRUFBOEVwRCxHQUE5RTtBQUFxRjtBQUN0RztBQUNKO0FBQ0osQ0FWRDs7QUFZZSxtRUFBSXVsQixZQUFKLEVBQWYsRTs7Ozs7Ozs7Ozs7O0FDeE9BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTXdCLFlBQU4sQ0FBbUI7QUFDbENoaUMsYUFBVyxHQUFFO0FBQ1Q7OztBQUdBLFNBQUtpaUMsT0FBTCxHQUFlLElBQUlDLEdBQUosRUFBZjtBQUNBLFNBQUsxOUIsT0FBTCxHQUFlLEtBQWY7QUFDQSxTQUFLcEUsSUFBTDtBQUNIOztBQUVELFFBQU1BLElBQU4sR0FBWTtBQUNSLFFBQUkraEMsWUFBWSxHQUFHLE1BQU1sbUMsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCNlosY0FBckIsQ0FBb0M5ZSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVXcrQixTQUFoRSxDQUF6QjtBQUNBbm1DLFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDRixVQUFoQyxDQUEyQ29CLFNBQTNDLENBQXFELG9CQUFyRCxFQUE0RUcsRUFBRCxJQUFRO0FBQy9FdzlCLGtCQUFZLENBQUMsTUFBTTtBQUNmOzs7QUFHQSxjQUFNcG1DLE1BQU0sR0FBR2ttQyxZQUFZLENBQUN2K0IsT0FBYixDQUFxQncrQixTQUFyQixDQUErQnY5QixFQUFFLENBQUNqRyxHQUFsQyxDQUFmO0FBQ0EsYUFBS3FqQyxPQUFMLENBQWF2NkIsR0FBYixDQUFpQjdDLEVBQUUsQ0FBQ2pHLEdBQXBCLEVBQXlCM0MsTUFBekI7QUFFQSxZQUFJK00sU0FBUyxHQUFHL00sTUFBTSxDQUFDcUUsUUFBUCxDQUFnQkcsSUFBaEIsQ0FBcUJ1SSxTQUFyQztBQUNBQSxpQkFBUyxDQUFDaU4sR0FBVixDQUFjLGVBQWQ7QUFDQWpOLGlCQUFTLENBQUNpTixHQUFWLENBQWMsV0FBZDtBQUNBak4saUJBQVMsQ0FBQ2lOLEdBQVYsQ0FBYyxXQUFkO0FBRUEsYUFBSytiLE1BQUwsQ0FBWW50QixFQUFFLENBQUNqRyxHQUFmO0FBQ0gsT0FiVyxDQUFaO0FBY0gsS0FmRDtBQWdCQTNDLFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDRixVQUFoQyxDQUEyQ29CLFNBQTNDLENBQXFELHFCQUFyRCxFQUE2RUcsRUFBRCxJQUFRO0FBQ2hGdzlCLGtCQUFZLENBQUMsTUFBTTtBQUNmLGFBQUtKLE9BQUwsQ0FBYVYsTUFBYixDQUFvQjE4QixFQUFFLENBQUNqRyxHQUF2QjtBQUNILE9BRlcsQ0FBWjtBQUdILEtBSkQ7QUFLQTBqQyxxREFBUSxDQUFDOUwsRUFBVCxDQUFZLGVBQVosRUFBNkIsTUFBTTtBQUMvQixXQUFLeEUsTUFBTDtBQUNILEtBRkQ7QUFHQXNRLHFEQUFRLENBQUM5TCxFQUFULENBQVksZ0JBQVosRUFBOEIsTUFBTTtBQUNoQyxXQUFLeEUsTUFBTDtBQUNILEtBRkQ7QUFHQXNRLHFEQUFRLENBQUM5TCxFQUFULENBQVksZ0JBQVosRUFBOEIsTUFBTTtBQUNoQyxXQUFLeEUsTUFBTDtBQUNILEtBRkQ7QUFHQXNRLHFEQUFRLENBQUM5TCxFQUFULENBQVksZ0JBQVosRUFBOEIsTUFBTTtBQUNoQyxXQUFLeEUsTUFBTDtBQUNILEtBRkQ7QUFHQXNRLHFEQUFRLENBQUM5TCxFQUFULENBQVksY0FBWixFQUE0QixNQUFNO0FBQzlCLFdBQUt4RSxNQUFMO0FBQ0gsS0FGRDtBQUdIOztBQUVEdnRCLFFBQU0sR0FBRTtBQUNKLFNBQUtELE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS3d0QixNQUFMO0FBQ0g7O0FBRURydEIsU0FBTyxHQUFFO0FBQ0wsU0FBS0gsT0FBTCxHQUFlLEtBQWY7QUFDQSxTQUFLd3RCLE1BQUw7QUFDSDs7QUFFREEsUUFBTSxDQUFDcHpCLEdBQUQsRUFBSztBQUNQLFFBQUcsQ0FBQyxLQUFLcWpDLE9BQUwsQ0FBYWxrQixJQUFqQixFQUFzQjs7QUFDdEIsUUFBRyxDQUFDLEtBQUt2WixPQUFULEVBQWlCO0FBQ2IsYUFBTyxLQUFLKzlCLFlBQUwsQ0FBa0IzakMsR0FBbEIsQ0FBUDtBQUNILEtBRkQsTUFFSztBQUNELGFBQU8sS0FBSzRqQyxXQUFMLENBQWlCNWpDLEdBQWpCLENBQVA7QUFDSDtBQUNKOztBQUVEMmpDLGNBQVksQ0FBQzNqQyxHQUFELEVBQUs7QUFDYixRQUFHLEtBQUs0RixPQUFSLEVBQWdCOztBQUNoQixRQUFHNUYsR0FBSCxFQUFPO0FBQ0gsVUFBSTNDLE1BQU0sR0FBRyxLQUFLZ21DLE9BQUwsQ0FBYWxqQyxHQUFiLENBQWlCSCxHQUFqQixDQUFiO0FBQ0EsVUFBRyxDQUFDM0MsTUFBSixFQUFXO0FBQ1gsVUFBSXFFLFFBQVEsR0FBR3JFLE1BQU0sQ0FBQ3FFLFFBQXRCOztBQUVBLFdBQUksSUFBSWlMLEtBQVIsSUFBaUJqTCxRQUFRLENBQUNzWCxnQkFBVCxDQUEwQixrQ0FBMUIsQ0FBakIsRUFBK0U7QUFDM0VyTSxhQUFLLENBQUN6QixNQUFOO0FBQ0g7QUFDSixLQVJELE1BUUs7QUFDRCxXQUFJLElBQUlsTCxHQUFSLElBQWUsS0FBS3FqQyxPQUFMLENBQWE5aUMsSUFBYixFQUFmLEVBQW1DO0FBQy9CLGFBQUtvakMsWUFBTCxDQUFrQjNqQyxHQUFsQjtBQUNIO0FBQ0o7QUFDSjs7QUFFRDRqQyxhQUFXLENBQUM1akMsR0FBRCxFQUFLO0FBQ1osUUFBRyxDQUFDLEtBQUs0RixPQUFULEVBQWlCOztBQUNqQixRQUFHNUYsR0FBSCxFQUFPO0FBQ0gsVUFBSTNDLE1BQU0sR0FBRyxLQUFLZ21DLE9BQUwsQ0FBYWxqQyxHQUFiLENBQWlCSCxHQUFqQixDQUFiO0FBQ0EsVUFBRyxDQUFDM0MsTUFBSixFQUFXO0FBQ1gsVUFBSXFFLFFBQVEsR0FBR3JFLE1BQU0sQ0FBQ3FFLFFBQXRCOztBQUVBLFdBQUksSUFBSWlMLEtBQVIsSUFBaUJqTCxRQUFRLENBQUNzWCxnQkFBVCxDQUEwQixrQ0FBMUIsQ0FBakIsRUFBK0U7QUFDM0VyTSxhQUFLLENBQUNtYSxZQUFOLENBQW1CLGFBQW5CLEVBQWtDLE1BQWxDO0FBQ0g7O0FBRUR4bkIsWUFBTSxDQUFDaUIsSUFBUCxDQUFZZCxRQUFaLEVBQ0NpTCxPQURELENBQ1NtNUIsU0FBUyxJQUFJO0FBQ2xCLFlBQUcsQ0FBQ2prQyxxREFBVyxDQUFDaWtDLFNBQUQsQ0FBZixFQUEyQixPQURULENBQ2dCOztBQUNsQyxjQUFNQyxLQUFLLEdBQUdya0MsUUFBUSxDQUFDb2tDLFNBQUQsQ0FBdEI7QUFDQSxZQUFHLENBQUNDLEtBQUosRUFBVSxPQUhRLENBR0Q7O0FBRWpCLFlBQUlDLFFBQVEsR0FBR3JpQyxRQUFRLENBQUM2SCxhQUFULENBQXVCLHNDQUFvQzZGLGlEQUFHLENBQUNFLFFBQUosQ0FBYXcwQixLQUFLLENBQUM1bEMsRUFBbkIsQ0FBM0QsQ0FBZjs7QUFDQSxZQUFHNmxDLFFBQUgsRUFBWTtBQUNSQSxrQkFBUSxDQUFDdGdCLFNBQVQsR0FBcUJ1Z0IsUUFBUSxDQUFDRixLQUFLLENBQUM3MkIsR0FBUCxDQUE3QjtBQUNBODJCLGtCQUFRLENBQUNFLGVBQVQsQ0FBeUIsYUFBekI7QUFDSCxTQUhELE1BR0s7QUFDRCxnQkFBTXQzQixLQUFLLEdBQUdqTCxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBZDtBQUNBZ0wsZUFBSyxDQUFDek8sRUFBTixHQUFXa1IsaURBQUcsQ0FBQ0UsUUFBSixDQUFhdzBCLEtBQUssQ0FBQzVsQyxFQUFuQixDQUFYO0FBQ0F5TyxlQUFLLENBQUM4VyxTQUFOLEdBQWtCdWdCLFFBQVEsQ0FBQ0YsS0FBSyxDQUFDNzJCLEdBQVAsQ0FBMUI7QUFDQU4sZUFBSyxDQUFDbWEsWUFBTixDQUFtQixzQkFBbkIsRUFBMkMsTUFBM0M7QUFDQXBsQixrQkFBUSxDQUFDb3hCLElBQVQsQ0FBY2xFLE1BQWQsQ0FBcUJqaUIsS0FBckI7QUFDSDtBQUNKLE9BakJEOztBQW1CQSxXQUFJLElBQUlBLEtBQVIsSUFBaUJqTCxRQUFRLENBQUNzWCxnQkFBVCxDQUEwQix5QkFBMUIsQ0FBakIsRUFBc0U7QUFDbEVyTSxhQUFLLENBQUN6QixNQUFOO0FBQ0g7QUFDSixLQS9CRCxNQStCSztBQUNELFdBQUksSUFBSWxMLEdBQVIsSUFBZSxLQUFLcWpDLE9BQUwsQ0FBYTlpQyxJQUFiLEVBQWYsRUFBbUM7QUFDL0IsYUFBS3FqQyxXQUFMLENBQWlCNWpDLEdBQWpCO0FBQ0g7QUFDSjtBQUNKOztBQTVIaUMsQ0FBdkIsRUFBZixFOzs7Ozs7Ozs7Ozs7QUNKQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNa2tDLGdCQUFOLENBQXVCO0FBRXRDOWlDLGFBQVcsR0FBRztBQUNWLFNBQUsraUMsYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1CdmhDLElBQW5CLENBQXdCLElBQXhCLENBQXJCO0FBQ0F2RixVQUFNLENBQUNzSCxTQUFQLENBQWlCMEUsYUFBakIsQ0FBK0I2NkIsZ0JBQS9CLEdBQWtELElBQWxEO0FBQ0g7O0FBRURoNkIsUUFBTSxHQUFHO0FBQ0xmLG1EQUFNLENBQUN5QixXQUFQLENBQW9Cc1MsS0FBRCxJQUFXO0FBQzFCLGFBQU96YywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCeWlDLHVFQUF6QixFQUE0QztBQUFDQyxjQUFNLEVBQUUsZUFBVDtBQUEwQm5uQjtBQUExQixPQUE1QyxDQUFQO0FBQ0gsS0FGRDtBQUdIOztBQUVELE1BQUlvbkIsTUFBSixHQUFhO0FBQ1QsVUFBTUMsR0FBRyxHQUFHbjFCLGlEQUFHLENBQUN6TixhQUFKLENBQW1CLDhCQUE2QmxCLDJDQUFJLENBQUNva0IsWUFBTCxDQUFrQkUsUUFBUyxJQUEzRSxDQUFaO0FBQ0EsUUFBSSxDQUFDbm1CLHdEQUFjLENBQUMsVUFBRCxDQUFuQixFQUFpQzJsQyxHQUFHLENBQUM1M0IsS0FBSixDQUFVYSxPQUFWLEdBQW9CLE1BQXBCO0FBQ2pDLFVBQU1taUIsS0FBSyxHQUFHdmdCLGlEQUFHLENBQUN6TixhQUFKLENBQW1CLGtDQUFpQyxvQkFBb0JsQiwyQ0FBSSxDQUFDb2tCLFlBQUwsQ0FBa0IyZixnQkFBaUIsZ0JBQTNHLENBQWQ7QUFDQTdVLFNBQUssQ0FBQzFqQixnQkFBTixDQUF1QixPQUF2QixFQUFnQyxNQUFNO0FBQUMsV0FBSy9CLE1BQUw7QUFBZSxLQUF0RDtBQUNBcTZCLE9BQUcsQ0FBQzNWLE1BQUosQ0FBV2UsS0FBWDtBQUNBLFdBQU80VSxHQUFQO0FBQ0g7O0FBRURKLGVBQWEsR0FBRztBQUNaLFFBQUksQ0FDQU0sMEJBREEsSUFFQSxDQUNBcmtDLDhDQUFLLENBQUNzSixRQUFOLENBQWU1RSxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzIvQixnQkFBRixJQUFzQjMvQixDQUFDLENBQUM0L0IsaUJBQTNDLEVBQThELENBQTlELEVBQWlFQSxpQkFBaEYsQ0FEQSxDQUZKO0FBS0EsUUFBSXYxQixpREFBRyxDQUFDa2YsS0FBSixDQUFVLFlBQVYsQ0FBSixFQUE2QjtBQUM3QixVQUFNNUYsTUFBTSxHQUFHdFosaURBQUcsQ0FBQ2tmLEtBQUosQ0FBVyxPQUFNbVcsMEJBQTJCLFFBQTVDLENBQWY7QUFDQXIxQixxREFBRyxDQUFDN0ssS0FBSixDQUFVbWtCLE1BQVYsRUFBa0IsS0FBSzRiLE1BQXZCO0FBQ0g7O0FBRURNLFdBQVMsR0FBRztBQUNSLFFBQUksS0FBS0MsVUFBVCxFQUFxQjtBQUNyQixVQUFNQyxTQUFTLEdBQUdDLHVEQUFjLENBQUNsN0IsSUFBZixDQUFvQnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDeEMsT0FBRixJQUFhd0MsQ0FBQyxDQUFDeEMsT0FBRixDQUFVc1QsV0FBVixJQUF5QixpQkFBL0QsQ0FBbEI7QUFDQSxVQUFNMHNCLFlBQVksR0FBR0QsdURBQWMsQ0FBQ2gwQixpQkFBZixDQUFpQyxRQUFqQyxDQUFyQjtBQUNBLFFBQUksQ0FBQyt6QixTQUFELElBQWMsQ0FBQ0UsWUFBbkIsRUFBaUM1a0MsOENBQUssQ0FBQ0MsSUFBTixDQUFXLGNBQVgsRUFBMkIsZ0NBQTNCO0FBQ2pDLFNBQUt3a0MsVUFBTCxHQUFrQnprQyw4Q0FBSyxDQUFDaUUsV0FBTixDQUFrQnlnQyxTQUFTLEdBQUdBLFNBQUgsR0FBZUUsWUFBWSxDQUFDOWlDLFNBQXZELEVBQWtFNGlDLFNBQVMsR0FBRyxTQUFILEdBQWUsUUFBMUYsRUFBb0c7QUFBQ3ZnQyxXQUFLLEVBQUUsS0FBSzQvQjtBQUFiLEtBQXBHLENBQWxCOztBQUNBLFNBQUtBLGFBQUw7QUFDSDs7QUFFRGMsY0FBWSxHQUFHO0FBQ1gsU0FBS0osVUFBTDtBQUNBLFdBQU8sS0FBS0EsVUFBWjtBQUNBLFVBQU1QLE1BQU0sR0FBR2wxQixpREFBRyxDQUFDa2YsS0FBSixDQUFVLFlBQVYsQ0FBZjtBQUNBLFFBQUlnVyxNQUFKLEVBQVlBLE1BQU0sQ0FBQ3A1QixNQUFQO0FBQ2Y7O0FBL0NxQyxDQUEzQixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ1RBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1nNkIsZUFBTixTQUE4Qjc1QixLQUFLLENBQUM4NUIsYUFBcEMsQ0FBa0Q7QUFDOUNqN0IsUUFBTSxHQUFFO0FBQ0osUUFBSWs3QixpQkFBaUIsR0FBR0wsd0RBQWMsQ0FBQ2w3QixJQUFmLENBQW9COUUsQ0FBQyxJQUFJQSxDQUFDLENBQUNtbEIsU0FBRixJQUFlbmxCLENBQUMsQ0FBQ3NnQyxNQUFqQixJQUEyQnRnQyxDQUFDLENBQUN1Z0MsSUFBdEQsQ0FBeEI7QUFFQSxVQUFNQyxlQUFlLEdBQUdsNkIsS0FBSyxDQUFDMUosYUFBTixDQUFvQmsrQix3REFBcEIsRUFBaUM7QUFBQ2xuQixXQUFLLEVBQUUsT0FBUjtBQUFpQjBMLFVBQUksRUFBRSxLQUF2QjtBQUE4QmhkLFVBQUksRUFBRTtBQUFwQyxLQUFqQyxFQUNwQmdFLEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0IsTUFBcEIsRUFBNEI7QUFBQ2dMLFdBQUssRUFBRTtBQUFDMnpCLGFBQUssRUFBRSxPQUFSO0FBQWlCSyxjQUFNLEVBQUU7QUFBekIsT0FBUjtBQUE2Qy8rQixlQUFTLEVBQUUscUJBQXhEO0FBQStFbTdCLGFBQU8sRUFBRSxNQUFNO0FBQUMzOEIsc0RBQUssQ0FBQ3lpQixrQkFBTixDQUF5QmxsQixZQUF6QjtBQUF3QztBQUF2SSxLQUE1QixFQUNJME4sS0FBSyxDQUFDMUosYUFBTixDQUFvQjZqQywwREFBcEIsRUFBNkI7QUFBQzVqQyxlQUFTLEVBQUUsU0FBWjtBQUF1QnVkLFVBQUksRUFBRTtBQUE3QixLQUE3QixDQURKLENBRG9CLENBQXhCO0FBS0EsUUFBSXNtQixRQUFRLEdBQUcsSUFBSUwsaUJBQWlCLENBQUNDLE1BQXRCLENBQTZCO0FBQ3hDLzZCLGNBQVEsRUFBRWUsS0FBSyxDQUFDMUosYUFBTixDQUFvQixNQUFwQixFQUE0QixJQUE1QixFQUFrQyxhQUFsQyxFQUFpRDRqQyxlQUFqRCxDQUQ4QjtBQUV4QzNqQyxlQUFTLEVBQUU7QUFGNkIsS0FBN0IsQ0FBZjtBQUlBLFdBQU82akMsUUFBUDtBQUNIOztBQWQ2Qzs7QUFpQmxELElBQUlDLGVBQWUsR0FBRyxLQUF0QjtBQUVlLG1FQUFJLE1BQU1DLGdCQUFOLENBQXVCO0FBRXRDdmtDLGFBQVcsR0FBRztBQUNWLFNBQUtvUixRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBYzVQLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLZ2pDLGNBQUwsR0FBc0IsS0FBS0EsY0FBTCxDQUFvQmhqQyxJQUFwQixDQUF5QixJQUF6QixDQUF0QjtBQUNBLFNBQUtpakMsT0FBTCxHQUFlLElBQUlDLDZEQUFKLEVBQWY7QUFFQSxTQUFLQyxrQkFBTDtBQUNIOztBQUVEQSxvQkFBa0IsR0FBRTtBQUNoQjtBQUNBLFNBQUtGLE9BQUwsQ0FBYUcsUUFBYixDQUFzQixXQUF0QixFQUFtQ0MsYUFBYSxDQUFDLEtBQUtDLGtCQUFMLENBQXdCdGpDLElBQXhCLENBQTZCLElBQTdCLENBQUQsQ0FBaEQ7QUFDQSxTQUFLaWpDLE9BQUwsQ0FBYUcsUUFBYixDQUFzQixRQUF0QixFQUFnQ0MsYUFBYSxDQUFDLEtBQUtFLGlCQUFMLENBQXVCdmpDLElBQXZCLENBQTRCLElBQTVCLENBQUQsQ0FBN0M7QUFDQSxTQUFLaWpDLE9BQUwsQ0FBYUcsUUFBYixDQUFzQixhQUF0QixFQUFxQ0MsYUFBYSxDQUFDLEtBQUtHLHFCQUFMLENBQTJCeGpDLElBQTNCLENBQWdDLElBQWhDLENBQUQsQ0FBbEQ7QUFDQSxTQUFLaWpDLE9BQUwsQ0FBYUcsUUFBYixDQUFzQixjQUF0QixFQUFzQ0MsYUFBYSxDQUFDLEtBQUtJLG1CQUFMLENBQXlCempDLElBQXpCLENBQThCLElBQTlCLENBQUQsQ0FBbkQ7QUFFQTs7QUFDQSxTQUFLaWpDLE9BQUwsQ0FBYUcsUUFBYixDQUFzQixrQkFBdEIsRUFBMENDLGFBQWEsQ0FBQyxNQUFNO0FBQzFELGFBQU8sSUFBSWYsZUFBSixHQUFzQmg3QixNQUF0QixFQUFQO0FBQ0gsS0FGc0QsQ0FBdkQ7QUFHQSxTQUFLMjdCLE9BQUwsQ0FBYUcsUUFBYixDQUFzQixNQUF0QixFQUE4QkMsYUFBYSxDQUFDLEtBQUtLLGFBQUwsQ0FBbUIxakMsSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBRCxDQUEzQztBQUNBLFNBQUtpakMsT0FBTCxDQUFhRyxRQUFiLENBQXNCLFdBQXRCLEVBQW1DQyxhQUFhLENBQUMsS0FBS00sa0JBQUwsQ0FBd0IzakMsSUFBeEIsQ0FBNkIsSUFBN0IsQ0FBRCxDQUFoRDtBQUNBLFNBQUtpakMsT0FBTCxDQUFhRyxRQUFiLENBQXNCLFNBQXRCLEVBQWlDQyxhQUFhLENBQUMsS0FBS08sZUFBTCxDQUFxQixTQUFyQixDQUFELENBQTlDO0FBQ0EsU0FBS1gsT0FBTCxDQUFhRyxRQUFiLENBQXNCLFFBQXRCLEVBQWdDQyxhQUFhLENBQUMsS0FBS08sZUFBTCxDQUFxQixRQUFyQixDQUFELENBQTdDO0FBQ0g7O0FBRUQsTUFBSUMsWUFBSixHQUFtQjtBQUNmLFVBQU14b0MsUUFBUSxHQUFHLEtBQUt5b0MsV0FBTCxDQUFpQixNQUFqQixDQUFqQjtBQUNBLFVBQU1DLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSUMsR0FBSixDQUFRM29DLFFBQVEsQ0FBQ2lKLEdBQVQsQ0FBYXdQLENBQUMsSUFBSUEsQ0FBQyxDQUFDblksUUFBcEIsQ0FBUixDQUFKLENBQW5CO0FBQ0EsVUFBTXNvQyxRQUFRLEdBQUdGLFVBQVUsQ0FBQ3ovQixHQUFYLENBQWVnUSxDQUFDLElBQUk7QUFBQyxhQUFPO0FBQUNwWixhQUFLLEVBQUVvWixDQUFSO0FBQVdqWixnQkFBUSxFQUFFQSxRQUFRLENBQUMrUCxNQUFULENBQWdCMEksQ0FBQyxJQUFJQSxDQUFDLENBQUNuWSxRQUFGLElBQWMyWSxDQUFuQztBQUFyQixPQUFQO0FBQW9FLEtBQXpGLENBQWpCO0FBQ0EsV0FBTzJ2QixRQUFQO0FBQ0g7O0FBRUQsTUFBSTVuQyxpQkFBSixHQUF3QjtBQUNwQixVQUFNaEIsUUFBUSxHQUFHLEtBQUt5b0MsV0FBTCxDQUFpQixXQUFqQixDQUFqQjtBQUNBLFVBQU1DLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSUMsR0FBSixDQUFRM29DLFFBQVEsQ0FBQ2lKLEdBQVQsQ0FBYXdQLENBQUMsSUFBSUEsQ0FBQyxDQUFDblksUUFBcEIsQ0FBUixDQUFKLENBQW5CO0FBQ0EsVUFBTXNvQyxRQUFRLEdBQUdGLFVBQVUsQ0FBQ3ovQixHQUFYLENBQWVnUSxDQUFDLElBQUk7QUFBQyxhQUFPO0FBQUNwWixhQUFLLEVBQUVvWixDQUFSO0FBQVdqWixnQkFBUSxFQUFFQSxRQUFRLENBQUMrUCxNQUFULENBQWdCMEksQ0FBQyxJQUFJQSxDQUFDLENBQUNuWSxRQUFGLElBQWMyWSxDQUFuQztBQUFyQixPQUFQO0FBQW9FLEtBQXpGLENBQWpCO0FBQ0EsV0FBTzJ2QixRQUFQO0FBQ0g7O0FBRUQsTUFBSUMsZ0JBQUosR0FBdUI7QUFDbkIsV0FBTyxLQUFLSixXQUFMLENBQWlCLFFBQWpCLENBQVA7QUFDSDs7QUFFREEsYUFBVyxDQUFDbm9DLFFBQUQsRUFBVztBQUNsQixXQUFPZSxNQUFNLENBQUNpQixJQUFQLENBQVl0QyxrREFBWixFQUFzQncrQixNQUF0QixDQUE2QixDQUFDSCxHQUFELEVBQU10OEIsR0FBTixLQUFjO0FBQzlDLFlBQU11bEIsT0FBTyxHQUFHdG5CLGtEQUFRLENBQUMrQixHQUFELENBQXhCOztBQUNBLFVBQUl1bEIsT0FBTyxDQUFDam5CLEdBQVIsS0FBZ0JDLFFBQWhCLElBQTRCZ25CLE9BQU8sQ0FBQ25uQixXQUFwQyxJQUFtRCxDQUFDbW5CLE9BQU8sQ0FBQ2xuQixNQUFoRSxFQUF3RTtBQUNwRWtuQixlQUFPLENBQUNsZSxJQUFSLEdBQWVySCxHQUFmO0FBQ0FzOEIsV0FBRyxDQUFDOXhCLElBQUosQ0FBUythLE9BQVQ7QUFDSDs7QUFDRCxhQUFPK1csR0FBUDtBQUNILEtBUE0sRUFPSixFQVBJLENBQVA7QUFRSDs7QUFHRDlwQixVQUFRLENBQUN0VSxFQUFELEVBQUs2b0MsT0FBTCxFQUFjbEIsT0FBZCxFQUF1QjtBQUMzQixTQUFLRCxjQUFMLENBQW9CMW5DLEVBQXBCLEVBQXdCNm9DLE9BQXhCLEVBQWlDbEIsT0FBakM7QUFDSDs7QUFFREQsZ0JBQWMsQ0FBQzFuQyxFQUFELEVBQUswSCxPQUFMLEVBQWNpZ0MsT0FBZCxFQUF1QjtBQUNqQyxRQUFHLENBQUMsQ0FBQyxhQUFELEVBQWdCLGlCQUFoQixFQUFtQyxrQkFBbkMsRUFBdUQsY0FBdkQsRUFBdUV4aUMsUUFBdkUsQ0FBZ0ZuRixFQUFoRixDQUFKLEVBQXdGVSx3REFBYyxDQUFDVixFQUFELENBQWQsR0FBcUIwSCxPQUFyQjs7QUFFeEYsUUFBSTFILEVBQUUsSUFBSSxVQUFWLEVBQXNCO0FBQ2xCLFVBQUkwSCxPQUFKLEVBQWF3SixpREFBRyxDQUFDdWxCLFFBQUosQ0FBYWp6QixRQUFRLENBQUNHLElBQXRCLEVBQTRCLFlBQTVCLEVBQWIsS0FDS3VOLGlEQUFHLENBQUN3bEIsV0FBSixDQUFnQmx6QixRQUFRLENBQUNHLElBQXpCLEVBQStCLFlBQS9CO0FBQ1I7O0FBRUQsUUFBSTNELEVBQUUsSUFBSSxVQUFWLEVBQXNCO0FBQ2xCLFVBQUkwSCxPQUFKLEVBQWF3SixpREFBRyxDQUFDdWxCLFFBQUosQ0FBYWp6QixRQUFRLENBQUNHLElBQXRCLEVBQTRCLGlCQUE1QixFQUFiLEtBQ0t1TixpREFBRyxDQUFDd2xCLFdBQUosQ0FBZ0JsekIsUUFBUSxDQUFDRyxJQUF6QixFQUErQixpQkFBL0I7QUFDUjs7QUFFRCxRQUFJM0QsRUFBRSxJQUFJLFVBQVYsRUFBc0I7QUFDbEIsVUFBSTBILE9BQUosRUFBYW9oQyxzREFBbUIsQ0FBQ3BDLFNBQXBCLEdBQWIsS0FDS29DLHNEQUFtQixDQUFDL0IsWUFBcEI7QUFDUjs7QUFFRCxRQUFJL21DLEVBQUUsSUFBSSxVQUFWLEVBQXNCO0FBQ2xCLFVBQUkwSCxPQUFKLEVBQWFxaEMsbURBQVMsQ0FBQzUrQixLQUFWLEdBQWIsS0FDSzQrQixtREFBUyxDQUFDOXhCLElBQVY7QUFDUjs7QUFFRCxRQUFJalgsRUFBRSxJQUFJLFVBQVYsRUFBc0I7QUFDbEIsVUFBSTBILE9BQUosRUFBYXdKLGlEQUFHLENBQUN1bEIsUUFBSixDQUFhdmxCLGlEQUFHLENBQUNrZixLQUFKLENBQVUsWUFBVixDQUFiLEVBQXNDLFVBQXRDLEVBQWIsS0FDS2xmLGlEQUFHLENBQUN3bEIsV0FBSixDQUFnQnhsQixpREFBRyxDQUFDa2YsS0FBSixDQUFVLFlBQVYsQ0FBaEIsRUFBeUMsVUFBekM7QUFDUjs7QUFFRCxRQUFJMW9CLE9BQU8sSUFBSTFILEVBQUUsSUFBSSxVQUFyQixFQUFpQ2dwQywrQ0FBTSxDQUFDM2pDLFlBQVA7O0FBRWpDLFFBQUlyRixFQUFFLElBQUksVUFBVixFQUFzQjtBQUNsQixVQUFJMEgsT0FBSixFQUFhdWhDLG9EQUFXLENBQUNwdkIsaUJBQVosR0FBYixLQUNLb3ZCLG9EQUFXLENBQUN0dUIsaUJBQVo7QUFDUjs7QUFFRCxRQUFJM2EsRUFBRSxJQUFJLFdBQVYsRUFBdUI7QUFDbkIsVUFBSTBILE9BQUosRUFBYTVFLHlEQUFlLENBQUNxSCxLQUFoQixHQUFiLEtBQ0tySCx5REFBZSxDQUFDbVUsSUFBaEI7QUFDUjs7QUFFRCxRQUFJalgsRUFBRSxJQUFJLFdBQVYsRUFBdUI7QUFDbkIsVUFBSTBILE9BQUosRUFBYTtBQUNUN0UsK0RBQWMsQ0FBQ3lhLFlBQWYsQ0FBNEIsUUFBNUI7QUFDQXphLCtEQUFjLENBQUN5YSxZQUFmLENBQTRCLE9BQTVCO0FBQ0gsT0FIRCxNQUlLO0FBQ0R6YSwrREFBYyxDQUFDa2MsY0FBZixDQUE4QixRQUE5QjtBQUNBbGMsK0RBQWMsQ0FBQ2tjLGNBQWYsQ0FBOEIsT0FBOUI7QUFDSDtBQUNKOztBQUVELFFBQUkvZSxFQUFFLElBQUksV0FBVixFQUF1QjtBQUNuQmtDLG9EQUFLLENBQUM4TyxtQkFBTixDQUEwQixhQUExQixFQUF5Q3RKLE9BQXpDO0FBQ0EsVUFBSUEsT0FBSixFQUFheEYsOENBQUssQ0FBQzhPLG1CQUFOLENBQTBCLGlCQUExQixFQUE2QyxJQUE3QyxFQUFiLEtBQ0s5Tyw4Q0FBSyxDQUFDOE8sbUJBQU4sQ0FBMEIsaUJBQTFCLEVBQTZDLFNBQTdDO0FBQ1I7O0FBR0QsUUFBSWhSLEVBQUUsSUFBSSxVQUFWLEVBQXNCO0FBQ2xCLFVBQUkwSCxPQUFKLEVBQWF3aEMsaURBQUssQ0FBQzdaLGtCQUFOLEdBQWIsS0FDSzZaLGlEQUFLLENBQUMzWixpQkFBTjtBQUNSOztBQUVELFFBQUl2dkIsRUFBRSxJQUFJLFdBQVYsRUFBdUI7QUFDbkIsVUFBSTBILE9BQUosRUFBYXdoQyxpREFBSyxDQUFDNVosaUJBQU4sR0FBYixLQUNLNFosaURBQUssQ0FBQzFaLGdCQUFOO0FBQ1I7O0FBRUQsUUFBSXh2QixFQUFFLEtBQUssYUFBWCxFQUEwQjtBQUN0QixVQUFJMEgsT0FBSixFQUFhdkksTUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBpQyxRQUFqQixDQUEwQkMsT0FBMUIsR0FBb0MsSUFBcEMsQ0FBYixLQUNLanFDLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwaUMsUUFBakIsQ0FBMEJDLE9BQTFCLEdBQW9DLEtBQXBDO0FBQ0x6QixhQUFPLENBQUNsN0IsV0FBUjtBQUNIOztBQUNELFFBQUl6TSxFQUFFLEtBQUssYUFBWCxFQUEwQjtBQUN0QixVQUFJMEgsT0FBSixFQUFhdkksTUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBpQyxRQUFqQixDQUEwQkUsZUFBMUIsR0FBNEMsSUFBNUMsQ0FBYixLQUNLbHFDLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwaUMsUUFBakIsQ0FBMEJFLGVBQTFCLEdBQTRDLEtBQTVDO0FBQ1I7O0FBQ0QsUUFBSXJwQyxFQUFFLEtBQUssc0JBQVgsRUFBbUM7QUFDL0IsVUFBSTBILE9BQUosRUFBYTtBQUNUa0Msb0VBQWtCLENBQUNqQyxNQUFuQjtBQUNBLGNBQU0yaEMsYUFBYSxHQUFHMWlDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWEsT0FBT0QsQ0FBQyxDQUFDQyxPQUFULEtBQXFCLFFBQWxDLElBQThDLHFCQUFxQkQsQ0FBQyxDQUFDQyxPQUF4RixFQUFpRyxDQUFqRyxDQUF0Qjs7QUFDQSxZQUFHd2lDLGFBQWEsSUFBSSxDQUFDQSxhQUFhLENBQUN4aUMsT0FBZCxDQUFzQnlpQyxlQUEzQyxFQUEyRDtBQUN2RDNpQyxtQkFBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVUwaUMsb0JBQTFDLEVBQWdFLENBQWhFLEVBQW1FMWlDLE9BQW5FLENBQTJFMGlDLG9CQUEzRSxDQUFnRztBQUM1RkQsMkJBQWUsRUFBRTtBQUQyRSxXQUFoRztBQUdIO0FBQ0osT0FSRCxNQVNLMy9CLDREQUFrQixDQUFDL0IsT0FBbkI7QUFDUjs7QUFDRCxRQUFJN0gsRUFBRSxLQUFLLGFBQVgsRUFBMEI7QUFDdEJ5cEMsMkRBQVcsQ0FBQ2x1QixRQUFaLENBQXFCLDZCQUFyQixFQUFvRDdULE9BQXBEO0FBQ0g7O0FBQ0QsUUFBSTFILEVBQUUsS0FBSyxhQUFYLEVBQTBCO0FBQ3RCLFVBQUcwSCxPQUFILEVBQVc7QUFDUGdpQywwREFBUSxDQUFDL2hDLE1BQVQ7QUFDSCxPQUZELE1BRUs7QUFDRCtoQywwREFBUSxDQUFDN2hDLE9BQVQ7QUFDSDtBQUNKOztBQUNELFFBQUk3SCxFQUFFLEtBQUssYUFBWCxFQUEwQjtBQUN0QixVQUFHMEgsT0FBSCxFQUFXO0FBQ1BpaUMsNkRBQVcsQ0FBQ2hpQyxNQUFaO0FBQ0gsT0FGRCxNQUVLO0FBQ0RnaUMsNkRBQVcsQ0FBQzloQyxPQUFaO0FBQ0g7QUFDSjs7QUFDRCxRQUFJN0gsRUFBRSxLQUFLLGFBQVgsRUFBMEI7QUFDdEIsVUFBRzBILE9BQUgsRUFBVztBQUNQa2lDLCtEQUFhLENBQUNqaUMsTUFBZDtBQUNILE9BRkQsTUFFSztBQUNEaWlDLCtEQUFhLENBQUMvaEMsT0FBZDtBQUNIO0FBQ0o7O0FBQ0QsUUFBSTdILEVBQUUsS0FBSyxhQUFYLEVBQXlCO0FBQ3JCLFVBQUk2cEMsV0FBVyxHQUFHMXFDLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQi9MLFFBQXZDO0FBQ0E4cEMsaUJBQVcsQ0FBQ2ovQixHQUFaLENBQWdCLFFBQWhCLEVBQTBCbEQsT0FBMUI7QUFDQW1pQyxpQkFBVyxDQUFDbEgsSUFBWjtBQUNBdmpDLG1CQUFhLENBQUMwdUIsR0FBZCxDQUFrQmdjLFFBQWxCO0FBQ0g7O0FBQ0QsUUFBSTlwQyxFQUFFLEtBQUssYUFBWCxFQUEwQjtBQUN0QmtsQyw0REFBWSxDQUFDeDlCLE9BQU8sR0FBRyxRQUFILEdBQWMsU0FBdEIsQ0FBWjtBQUNIOztBQUNELFFBQUkxSCxFQUFFLEtBQUssY0FBWCxFQUEwQjtBQUN0QitwQyxvREFBSSxDQUFDNW1DLE9BQUwsQ0FBYTZtQyxvQkFBYixDQUFrQ3RpQyxPQUFsQztBQUNBO0FBQ0g7O0FBQ0QsUUFBSTFILEVBQUUsS0FBSyxpQkFBWCxFQUE2QjtBQUN6QixVQUFJNnBDLFdBQVcsR0FBRzFxQyxNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUIvTCxRQUF2QztBQUNBOHBDLGlCQUFXLENBQUNqL0IsR0FBWixDQUFnQixrQkFBaEIsRUFBb0NsRCxPQUFwQztBQUVBbWlDLGlCQUFXLENBQUNwRixNQUFaLENBQW1CLGNBQW5CO0FBQ0FvRixpQkFBVyxDQUFDcEYsTUFBWixDQUFtQixjQUFuQjtBQUNBb0YsaUJBQVcsQ0FBQ3BGLE1BQVosQ0FBbUIsZUFBbkI7QUFFQW9GLGlCQUFXLENBQUNsSCxJQUFaO0FBQ0F2akMsbUJBQWEsQ0FBQzB1QixHQUFkLENBQWtCZ2MsUUFBbEI7QUFDSDs7QUFDRCxRQUFJOXBDLEVBQUUsS0FBSyxrQkFBWCxFQUE4QjtBQUMxQixVQUFJNnBDLFdBQVcsR0FBRzFxQyxNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUIvTCxRQUF2QztBQUNBOHBDLGlCQUFXLENBQUNqL0IsR0FBWixDQUFnQixXQUFoQixFQUE2QmxELE9BQTdCO0FBQ0FtaUMsaUJBQVcsQ0FBQ2xILElBQVo7QUFDQXZqQyxtQkFBYSxDQUFDMHVCLEdBQWQsQ0FBa0JnYyxRQUFsQjtBQUNIOztBQUVELFNBQUszaUIsWUFBTDtBQUNIOztBQUVELFFBQU1yRCxrQkFBTixHQUEyQjtBQUN2QixRQUFJcGpCLHdEQUFjLENBQUMsVUFBRCxDQUFsQixFQUFnQ3dRLGlEQUFHLENBQUN1bEIsUUFBSixDQUFhanpCLFFBQVEsQ0FBQ0csSUFBdEIsRUFBNEIsWUFBNUI7QUFDaEMsUUFBSWpELHdEQUFjLENBQUMsVUFBRCxDQUFsQixFQUFnQ3dRLGlEQUFHLENBQUN1bEIsUUFBSixDQUFhanpCLFFBQVEsQ0FBQ0csSUFBdEIsRUFBNEIsaUJBQTVCO0FBQ2hDLFFBQUlqRCx3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0Nvb0Msc0RBQW1CLENBQUNwQyxTQUFwQjtBQUNoQyxRQUFJaG1DLHdEQUFjLENBQUMsVUFBRCxDQUFsQixFQUFnQ3FvQyxtREFBUyxDQUFDNStCLEtBQVY7QUFDaEMsUUFBSXpKLHdEQUFjLENBQUMsVUFBRCxDQUFsQixFQUFnQ3dRLGlEQUFHLENBQUN1bEIsUUFBSixDQUFhdmxCLGlEQUFHLENBQUNrZixLQUFKLENBQVUsWUFBVixDQUFiLEVBQXNDLFVBQXRDO0FBQ2hDLFFBQUkxdkIsd0RBQWMsQ0FBQyxVQUFELENBQWxCLEVBQWdDc29DLCtDQUFNLENBQUMzakMsWUFBUDtBQUNoQyxRQUFJM0Usd0RBQWMsQ0FBQyxVQUFELENBQWxCLEVBQWdDdW9DLG9EQUFXLENBQUNwdkIsaUJBQVo7QUFDaEMsUUFBSW5aLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ29DLHlEQUFlLENBQUNxSCxLQUFoQjtBQUNqQyxRQUFJekosd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1DdkIsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBpQyxRQUFqQixDQUEwQkMsT0FBMUIsR0FBb0MsSUFBcEM7QUFDbkMsUUFBSTFvQyx3REFBYyxDQUFDLGFBQUQsQ0FBbEIsRUFBbUN2QixNQUFNLENBQUNzSCxTQUFQLENBQWlCMGlDLFFBQWpCLENBQTBCRSxlQUExQixHQUE0QyxJQUE1QztBQUNuQyxRQUFJM29DLHdEQUFjLENBQUMsc0JBQUQsQ0FBbEIsRUFBNENrSiw0REFBa0IsQ0FBQ2pDLE1BQW5CO0FBQzVDLFFBQUlqSCx3REFBYyxDQUFDLGFBQUQsQ0FBbEIsRUFBbUMrb0MscURBQVcsQ0FBQ2x1QixRQUFaLENBQXFCLDZCQUFyQixFQUFvRCxJQUFwRDtBQUNuQyxRQUFJN2Esd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1DZ3BDLGtEQUFRLENBQUMvaEMsTUFBVDtBQUNuQyxRQUFJakgsd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1DaXBDLHFEQUFXLENBQUNoaUMsTUFBWjtBQUNuQyxRQUFJakgsd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1Da3BDLHVEQUFhLENBQUNqaUMsTUFBZDtBQUNuQyxRQUFJakgsd0RBQWMsQ0FBQyxhQUFELENBQWxCLEVBQW1Dd2tDLHNEQUFZLENBQUN2OUIsTUFBYjs7QUFFbkMsUUFBSWpILHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQztBQUM3Qm1DLDZEQUFjLENBQUN5YSxZQUFmLENBQTRCLFFBQTVCO0FBQ0F6YSw2REFBYyxDQUFDeWEsWUFBZixDQUE0QixPQUE1QjtBQUNIOztBQUVELFFBQUk1Yyx3REFBYyxDQUFDLFVBQUQsQ0FBbEIsRUFBZ0N3b0MsaURBQUssQ0FBQzdaLGtCQUFOO0FBQ2hDLFFBQUkzdUIsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd29DLGlEQUFLLENBQUM1WixpQkFBTjtBQUVqQyxTQUFLbkksWUFBTDtBQUNIOztBQUVEQSxjQUFZLEdBQUc7QUFDWHZrQixzREFBUyxDQUFDZ2EsZUFBVixDQUEwQixVQUExQixFQUFzQ2xjLHdEQUF0QztBQUNBa0Msc0RBQVMsQ0FBQ2dhLGVBQVYsQ0FBMEIsS0FBMUIsRUFBaUNqYyxxREFBakM7QUFDSDs7QUFFRHltQixjQUFZLEdBQUc7QUFDWGhtQixVQUFNLENBQUNzWixNQUFQLENBQWNoYSx3REFBZCxFQUE4QmtDLGtEQUFTLENBQUMrWixlQUFWLENBQTBCLFVBQTFCLENBQTlCO0FBQ0F2YixVQUFNLENBQUNzWixNQUFQLENBQWMvWixxREFBZCxFQUEyQmlDLGtEQUFTLENBQUMrWixlQUFWLENBQTBCLEtBQTFCLENBQTNCO0FBQ0g7O0FBRURnTCxlQUFhLENBQUNnZ0IsT0FBRCxFQUFVO0FBQ25CLFdBQU8sS0FBS0EsT0FBTCxDQUFhMzdCLE1BQWIsQ0FBb0IyN0IsT0FBcEIsQ0FBUDtBQUNIOztBQUVEUyxlQUFhLEdBQUc7QUFDWixXQUFPN2xDLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJ3bUMsbUVBQXpCLEVBQWlEO0FBQUNub0MsU0FBRyxFQUFFLFNBQU47QUFBaUJ3UyxjQUFRLEVBQUUsS0FBS0EsUUFBaEM7QUFBMENxMEIsY0FBUSxFQUFFLEtBQUtKO0FBQXpELEtBQWpELENBQVA7QUFDSDs7QUFFRFAsb0JBQWtCLENBQUNMLE9BQUQsRUFBVWw3QixXQUFWLEVBQXVCO0FBQ3JDLFFBQUlvOUIsV0FBVyxHQUFHMXFDLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQi9MLFFBQXZDO0FBQ0EsV0FBTyxDQUNILEtBQUtnQixpQkFBTCxDQUF1QmlJLEdBQXZCLENBQTJCLENBQUN3ZSxPQUFELEVBQVUvTyxDQUFWLEtBQWdCO0FBQ3ZDLGFBQU8sQ0FDRkEsQ0FBQyxLQUFLLENBQU4sR0FBVSxJQUFWLEdBQWlCbFcsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QnltQyxzREFBekIsQ0FEZixFQUVIM25DLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsSUFBekIsRUFBK0I7QUFBQ0MsaUJBQVMsRUFBRTtBQUFaLE9BQS9CLEVBQThGOGpCLE9BQU8sQ0FBQzVuQixLQUF0RyxDQUZHLEVBR0g0bkIsT0FBTyxDQUFDem5CLFFBQVIsQ0FBaUJpSixHQUFqQixDQUFxQnFlLE9BQU8sSUFBSTtBQUM1QixZQUFJOGlCLFNBQVMsR0FBR3pwQyx3REFBYyxDQUFDMm1CLE9BQU8sQ0FBQ3JuQixFQUFULENBQTlCO0FBQ0EsWUFBR3FuQixPQUFPLENBQUNybkIsRUFBUixLQUFlLGFBQWxCLEVBQWdDbXFDLFNBQVMsR0FBR04sV0FBVyxDQUFDNW5DLEdBQVosQ0FBZ0IsUUFBaEIsRUFBMEIsS0FBMUIsQ0FBWjtBQUNoQyxZQUFHb2xCLE9BQU8sQ0FBQ3JuQixFQUFSLEtBQWUsaUJBQWxCLEVBQW9DbXFDLFNBQVMsR0FBR04sV0FBVyxDQUFDNW5DLEdBQVosQ0FBZ0Isa0JBQWhCLEVBQW9DLEtBQXBDLENBQVo7QUFDcEMsWUFBR29sQixPQUFPLENBQUNybkIsRUFBUixLQUFlLGtCQUFsQixFQUFxQ21xQyxTQUFTLEdBQUdOLFdBQVcsQ0FBQzVuQyxHQUFaLENBQWdCLFdBQWhCLEVBQTZCLElBQTdCLENBQVo7QUFDckMsWUFBR29sQixPQUFPLENBQUNybkIsRUFBUixLQUFlLGNBQWxCLEVBQWlDbXFDLFNBQVMsR0FBRyxDQUFDTixXQUFXLENBQUM1bkMsR0FBWixDQUFnQix1QkFBaEIsRUFBeUMsSUFBekMsQ0FBYjtBQUNqQyxZQUFJMkQsV0FBVyxHQUFHckQsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QjJtQyxtREFBekIsRUFBaUM7QUFBQ3BxQyxZQUFFLEVBQUVxbkIsT0FBTyxDQUFDcm5CLEVBQWI7QUFBaUI4QixhQUFHLEVBQUV1bEIsT0FBTyxDQUFDcm5CLEVBQTlCO0FBQWtDMEYsY0FBSSxFQUFFMmhCLE9BQXhDO0FBQWlEd2hCLGlCQUFPLEVBQUVzQixTQUExRDtBQUFxRTcxQixrQkFBUSxFQUFFLENBQUN0VSxFQUFELEVBQUs2b0MsT0FBTCxLQUFpQjtBQUMvSSxpQkFBS3YwQixRQUFMLENBQWN0VSxFQUFkLEVBQWtCNm9DLE9BQWxCLEVBQTJCbEIsT0FBM0I7QUFDSDtBQUZrRCxTQUFqQyxDQUFsQjs7QUFHQSxZQUFHdGdCLE9BQU8sQ0FBQ3JuQixFQUFSLElBQWMsYUFBZCxJQUErQm1xQyxTQUFsQyxFQUE0QztBQUN4QyxpQkFBTyxDQUNIdmtDLFdBREcsRUFFSHVILEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0JnRCxTQUFTLENBQUNxRixHQUFWLENBQWN1K0IsVUFBZCxDQUF5QkMsTUFBekIsQ0FBZ0NDLE1BQXBELEVBQTREO0FBQ3hEOXZCLGlCQUFLLEVBQUUsT0FEaUQ7QUFFeEQrdkIsZ0JBQUksRUFBRSxVQUZrRDtBQUd4RHZwQixnQkFBSSxFQUFFLE9BSGtEO0FBSXhEd3BCLHNCQUFVLEVBQUUsT0FKNEM7QUFLeEQ1TCxtQkFBTyxFQUFFLE1BQU07QUFDWHovQiwyQkFBYSxDQUFDc3JDLEdBQWQsQ0FBa0JDLElBQWxCLENBQXVCLFNBQXZCO0FBQ0gsYUFQdUQ7QUFReERqa0IsbUJBQU8sRUFBRSxLQVIrQztBQVN4RG1NLG9CQUFRLEVBQUU7QUFUOEMsV0FBNUQsRUFVRyxnQkFWSCxDQUZHLENBQVA7QUFjSDs7QUFDRCxZQUFHeEwsT0FBTyxDQUFDcm5CLEVBQVIsS0FBZSxrQkFBZixJQUFxQ21xQyxTQUF4QyxFQUFrRDtBQUM5QyxjQUFHNXBDLE9BQU8sQ0FBQ0MsUUFBUixLQUFxQixPQUF4QixFQUFnQztBQUM1QixnQkFBSW9xQyxPQUFPLEdBQUcsRUFBZDtBQUNBLGdCQUFJQyxNQUFNLEdBQUcsSUFBYjs7QUFDQSxnQkFBR3RxQyxPQUFPLENBQUNDLFFBQVIsS0FBcUIsT0FBeEIsRUFBZ0M7QUFDNUJvcUMscUJBQU8sQ0FBQ3QrQixJQUFSLENBQWEsWUFBYixFQUEyQixTQUEzQixFQUFzQyxhQUF0QztBQUNBdStCLG9CQUFNLEdBQUdoQixXQUFXLENBQUM1bkMsR0FBWixDQUFnQixnQkFBaEIsRUFBa0MsWUFBbEMsQ0FBVDtBQUNILGFBSEQsTUFHTSxJQUFHMUIsT0FBTyxDQUFDQyxRQUFSLEtBQXFCLFFBQXhCLEVBQWlDO0FBQ25Db3FDLHFCQUFPLENBQUN0K0IsSUFBUixDQUFhLFVBQWIsRUFDSSxXQURKLEVBRUksTUFGSixFQUdJLFNBSEosRUFJSSxTQUpKLEVBS0ksUUFMSixFQU1JLE9BTkosRUFPSSxRQVBKLEVBUUksS0FSSixFQVNJLGVBVEosRUFVSSxTQVZKLEVBV0ksU0FYSixFQVlJLGNBWkosRUFhSSxZQWJKLEVBY0ksTUFkSjtBQWdCQXUrQixvQkFBTSxHQUFHaEIsV0FBVyxDQUFDNW5DLEdBQVosQ0FBZ0Isb0JBQWhCLEVBQXNDLGVBQXRDLENBQVQ7QUFDSDs7QUFDRCxtQkFBTyxDQUNIMkQsV0FERyxFQUVIdUgsS0FBSyxDQUFDMUosYUFBTixDQUFvQmdELFNBQVMsQ0FBQ3FGLEdBQVYsQ0FBY3UrQixVQUFkLENBQXlCUyxPQUF6QixDQUFpQ0MsZUFBckQsRUFBc0UsRUFBdEUsRUFBMEUsZ0JBQTFFLENBRkcsRUFHSDU5QixLQUFLLENBQUMxSixhQUFOLENBQW9CZ0QsU0FBUyxDQUFDcUYsR0FBVixDQUFjdStCLFVBQWQsQ0FBeUJDLE1BQXpCLENBQWdDVSxRQUFwRCxFQUE4RDtBQUMxRDc0QixxQkFBTyxFQUFFeTRCLE9BQU8sQ0FBQzVoQyxHQUFSLENBQVluQyxDQUFDLElBQUk7QUFDdEIsdUJBQU87QUFDSDlFLHVCQUFLLEVBQUU4RSxDQURKO0FBRUg0cUIsdUJBQUssRUFBRTVxQjtBQUZKLGlCQUFQO0FBSUgsZUFMUSxDQURpRDtBQU8xRDlFLG1CQUFLLEVBQUU4b0MsTUFQbUQ7QUFRMURoWSxzQkFBUSxFQUFFLEtBUmdEO0FBUzFEb1ksd0JBQVUsRUFBRSxJQVQ4QztBQVUxREMsdUJBQVMsRUFBRSxLQVYrQztBQVcxRDUyQixzQkFBUSxFQUFHdlMsS0FBRCxJQUFXO0FBQ2pCLG9CQUFHeEIsT0FBTyxDQUFDQyxRQUFSLEtBQXFCLE9BQXhCLEVBQWdDO0FBQzVCaXBDLHVFQUFXLENBQUMwQixNQUFaLENBQW1CLHlCQUFuQixFQUE4Q3BwQyxLQUE5QztBQUNILGlCQUZELE1BRUs7QUFDRDBuQyx1RUFBVyxDQUFDMEIsTUFBWixDQUFtQix3QkFBbkIsRUFBNkNwcEMsS0FBN0M7QUFDSDtBQUNKO0FBakJ5RCxhQUE5RCxFQWtCRyxJQWxCSCxDQUhHLENBQVA7QUF1Qkg7QUFDSjs7QUFDRCxlQUFPNkQsV0FBUDtBQUNILE9BN0VELENBSEcsQ0FBUDtBQWtGSCxLQW5GRCxDQURHLEVBcUZIckQsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QnRFLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQnUrQixVQUFyQixDQUFnQ0MsTUFBaEMsQ0FBdUNDLE1BQWhFLEVBQXdFO0FBQ3BFOXZCLFdBQUssRUFBRSxRQUQ2RDtBQUVwRSt2QixVQUFJLEVBQUUsT0FGOEQ7QUFHcEV2cEIsVUFBSSxFQUFFLFFBSDhEO0FBSXBFd3BCLGdCQUFVLEVBQUUsS0FKd0Q7O0FBS3BFNUwsYUFBTyxHQUFFO0FBQ0w0Syw2REFBVyxDQUFDbHVCLFFBQVosQ0FBcUIsd0JBQXJCLEVBQStDO0FBQzNDM0YsY0FBSSxFQUFFa3VCLGdEQUFNLENBQUN2akMsT0FBUCxDQUFlNnFDLElBQWYsQ0FBb0J6eUIsS0FBcEIsQ0FBMEIsQ0FBMUIsRUFBNkJrb0IsTUFBN0IsQ0FBb0MsQ0FBQyx5QkFBRCxDQUFwQztBQURxQyxTQUEvQztBQUdILE9BVG1FOztBQVVwRW5hLGFBQU8sRUFBRTtBQVYyRCxLQUF4RSxFQVdHLGdDQVhILENBckZHLEVBaUdIdlosS0FBSyxDQUFDMUosYUFBTixDQUFvQmdELFNBQVMsQ0FBQ3FGLEdBQVYsQ0FBY3UrQixVQUFkLENBQXlCQyxNQUF6QixDQUFnQ0MsTUFBcEQsRUFBNEQ7QUFDeEQ5dkIsV0FBSyxFQUFFLFFBRGlEO0FBRXhEK3ZCLFVBQUksRUFBRSxPQUZrRDtBQUd4RHZwQixVQUFJLEVBQUUsUUFIa0Q7QUFJeER3cEIsZ0JBQVUsRUFBRSxLQUo0QztBQUt4RDVMLGFBQU8sRUFBRSxNQUFNO0FBQ1gsWUFBRzJJLGVBQUgsRUFBbUI7QUFDbkJBLHVCQUFlLEdBQUcsSUFBbEI7QUFDQXRsQyxzREFBSyxDQUFDcUcsU0FBTixDQUFnQixtQkFBaEIsRUFBcUM7QUFDakMxSSxjQUFJLEVBQUU7QUFEMkIsU0FBckM7QUFHQTRNLG1CQUFXO0FBQ1hxM0Isd0RBQU0sQ0FBQ0MscUJBQVAsR0FBK0JzSCxPQUEvQixDQUF1Q0MsVUFBdkMsR0FDQzFsQixJQURELENBQ00sTUFBTTtBQUNSMWpCLHdEQUFLLENBQUNxRyxTQUFOLENBQWdCLG9CQUFoQixFQUFzQztBQUNsQzFJLGdCQUFJLEVBQUU7QUFENEIsV0FBdEM7QUFHQTJuQyx5QkFBZSxHQUFHLEtBQWxCO0FBQ0EvNkIscUJBQVc7QUFDZCxTQVBELEVBT0d5bkIsS0FQSCxDQU9TL1YsR0FBRyxJQUFJO0FBQ1p6VCxpQkFBTyxDQUFDbU0sS0FBUixDQUFjc0gsR0FBZDtBQUNBamMsd0RBQUssQ0FBQ3FHLFNBQU4sQ0FBZ0Isd0RBQWhCLEVBQTBFO0FBQ3RFMUksZ0JBQUksRUFBRTtBQURnRSxXQUExRTtBQUdBMm5DLHlCQUFlLEdBQUcsS0FBbEI7QUFDQS82QixxQkFBVztBQUNkLFNBZEQ7QUFlSCxPQTNCdUQ7QUE0QnhEaWEsYUFBTyxFQUFFLElBNUIrQztBQTZCeERtTSxjQUFRLEVBQUUyVTtBQTdCOEMsS0FBNUQsRUE4QkcsYUE5QkgsQ0FqR0csQ0FBUDtBQWlJSDs7QUFFRFMsbUJBQWlCLEdBQUc7QUFDaEIsV0FBTzFsQywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCOG5DLDZEQUF6QixFQUErQztBQUNsRHpwQyxTQUFHLEVBQUUsVUFENkM7QUFFbER3UyxjQUFRLEVBQUUsS0FBS0EsUUFGbUM7QUFHbER2VSxjQUFRLEVBQUUsS0FBSzZvQztBQUhtQyxLQUEvQyxDQUFQO0FBS0g7O0FBRURWLHVCQUFxQixHQUFHO0FBQ3BCLFdBQU8zbEMsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QituQyx5REFBekIsRUFBMkM7QUFDOUMxcEMsU0FBRyxFQUFFO0FBRHlDLEtBQTNDLENBQVA7QUFHSDs7QUFFRHFtQyxxQkFBbUIsR0FBRztBQUNsQixXQUFPNWxDLDJDQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJnb0MsdURBQXpCLEVBQXFDO0FBQ3hDM3BDLFNBQUcsRUFBRTtBQURtQyxLQUFyQyxDQUFQO0FBR0g7O0FBRUR1bUMsb0JBQWtCLEdBQUc7QUFDakIsV0FBTzlsQywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCaW9DLHNEQUF6QixFQUFvQztBQUFDNXBDLFNBQUcsRUFBRTtBQUFOLEtBQXBDLENBQVA7QUFDSDs7QUFFRHdtQyxpQkFBZSxDQUFDem9DLElBQUQsRUFBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQU04ckMsV0FBTixTQUEwQnBwQywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBVzdjLFNBQXJDLENBQStDO0FBQzNDbEssaUJBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNmLGNBQU1BLEtBQU47QUFDQSxhQUFLNnlCLE1BQUwsR0FBYyxLQUFLN3lCLEtBQUwsQ0FBV3RNLElBQVgsQ0FBZ0JrRyxPQUFoQixDQUF3QixHQUF4QixFQUE2QixFQUE3QixDQUFkO0FBQ0g7O0FBRUR1TyxjQUFRLEdBQUc7QUFDUCxhQUFLbkksS0FBTCxDQUFXbUksUUFBWCxDQUFvQixLQUFLbkksS0FBTCxDQUFXdE0sSUFBL0I7QUFDSDs7QUFFRG1NLFlBQU0sR0FBRztBQUFDLGVBQU8sS0FBS0csS0FBTCxDQUFXQyxRQUFsQjtBQUE0Qjs7QUFWSzs7QUFZL0MsVUFBTXcvQixjQUFjLEdBQUdELFdBQVcsQ0FBQzNuQyxTQUFaLENBQXNCZ0ksTUFBN0M7QUFDQTVLLFVBQU0sQ0FBQ1ksY0FBUCxDQUFzQjJwQyxXQUFXLENBQUMzbkMsU0FBbEMsRUFBNkMsUUFBN0MsRUFBdUQ7QUFDbkQ2bkMsZ0JBQVUsRUFBRSxLQUR1QztBQUVuRGpuQyxrQkFBWSxFQUFFLEtBRnFDO0FBR25EZ0csU0FBRyxFQUFFLFlBQVc7QUFBQ0YsZUFBTyxDQUFDdkksSUFBUixDQUFhLHFHQUFiO0FBQXFILE9BSG5GO0FBSW5ERixTQUFHLEVBQUUsTUFBTTJwQztBQUp3QyxLQUF2RDtBQU1BLFdBQU8sWUFBVTtBQUNiLGFBQU9ycEMsMkNBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QmtvQyxXQUF6QixFQUFzQztBQUFDOXJDO0FBQUQsT0FBdEMsRUFBOEMwQywyQ0FBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCcW9DLHNEQUF6QixFQUFtQztBQUFDanNDO0FBQUQsT0FBbkMsQ0FBOUMsQ0FBUDtBQUNILEtBRkQ7QUFHSDs7QUF2YnFDLENBQTNCLEVBQWY7QUEwYkE7Ozs7QUFJQSxTQUFTa29DLGFBQVQsQ0FBdUIzN0IsUUFBdkIsRUFBZ0M7QUFDNUIsUUFBTTIvQixnQkFBTixTQUErQjUrQixLQUFLLENBQUNDLFNBQXJDLENBQStDO0FBQzNDcEIsVUFBTSxHQUFFO0FBQ0osYUFBT0ksUUFBUSxDQUFDdTdCLE9BQUQsRUFBVSxNQUFNLEtBQUtsN0IsV0FBTCxFQUFoQixDQUFmO0FBQ0g7O0FBSDBDOztBQUsvQyxNQUFJazdCLE9BQUo7QUFDQSxTQUFRbnZCLENBQUQsSUFBTztBQUNWbXZCLFdBQU8sR0FBR252QixDQUFWO0FBQ0EsV0FBT3V6QixnQkFBUDtBQUNILEdBSEQ7QUFJSCxDOzs7Ozs7Ozs7Ozs7QUM5ZkQ7QUFBQTtBQUFlLE1BQU1uRSx3QkFBTixDQUErQjtBQUUxQzFrQyxhQUFXLEdBQUc7QUFDVixTQUFLOG9DLE1BQUwsR0FBYyxFQUFkO0FBQ0g7O0FBRURsRSxVQUFRLENBQUNtRSxLQUFELEVBQVE3ZSxTQUFSLEVBQWtCO0FBQ3RCLFNBQUs0ZSxNQUFMLENBQVlDLEtBQVosSUFBcUI3ZSxTQUFyQjtBQUNIOztBQUVEOGUsY0FBWSxDQUFDRCxLQUFELEVBQVF0RSxPQUFSLEVBQWdCO0FBQ3hCLFdBQU8sS0FBS3FFLE1BQUwsQ0FBWUMsS0FBWixFQUFtQnRFLE9BQW5CLENBQVA7QUFDSDs7QUFFRCxNQUFJN25DLEtBQUosR0FBWTtBQUNSLFdBQU8sQ0FBQztBQUNKcUosVUFBSSxFQUFFLHdCQURGO0FBRUpuSixRQUFFLEVBQUU7QUFGQSxLQUFELEVBR0o7QUFDQ21KLFVBQUksRUFBRSxTQURQO0FBRUNuSixRQUFFLEVBQUU7QUFGTCxLQUhJLEVBTUo7QUFDQ21KLFVBQUksRUFBRSxRQURQO0FBRUNuSixRQUFFLEVBQUU7QUFGTCxLQU5JLEVBU0o7QUFDQ21KLFVBQUksRUFBRSxZQURQO0FBRUNuSixRQUFFLEVBQUU7QUFGTCxLQVRJLENBQVA7QUFhSDs7QUFFRCxNQUFJbXNDLE9BQUosR0FBYTtBQUNULFFBQUlyc0MsS0FBSyxHQUFHLENBQ1I7QUFDSXFKLFVBQUksRUFBRSxvQkFEVjtBQUVJbkosUUFBRSxFQUFFO0FBRlIsS0FEUSxFQUlMO0FBQ0NtSixVQUFJLEVBQUUsY0FEUDtBQUVDbkosUUFBRSxFQUFFO0FBRkwsS0FKSyxFQU9MO0FBQ0NtSixVQUFJLEVBQUUsY0FEUDtBQUVDbkosUUFBRSxFQUFFO0FBRkwsS0FQSyxDQUFaO0FBWUEsV0FBT0YsS0FBUDtBQUNIOztBQUVELE1BQUlzc0MsVUFBSixHQUFnQjtBQUNaLFFBQUl0c0MsS0FBSyxHQUFHLEVBQVo7QUFDQSxRQUFHLENBQUNYLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwaUMsUUFBakIsQ0FBMEJDLE9BQTlCLEVBQXNDLE9BQU90cEMsS0FBUDtBQUN0Q0EsU0FBSyxDQUFDd00sSUFBTixDQUFXLEdBQUcsQ0FDVjtBQUNJa2IsYUFBTyxFQUFFO0FBRGIsS0FEVSxFQUlWO0FBQ0lBLGFBQU8sRUFBRSxRQURiO0FBRUlpSyxXQUFLLEVBQUU7QUFGWCxLQUpVLEVBUVY7QUFDSXRvQixVQUFJLEVBQUUsb0JBRFY7QUFFSW5KLFFBQUUsRUFBRTtBQUZSLEtBUlUsQ0FBZDtBQWFBLFdBQU9GLEtBQVA7QUFDSDs7QUFFRGtNLFFBQU0sQ0FBQzI3QixPQUFELEVBQVU7QUFDWixXQUFPLENBQ0g7QUFDSW5nQixhQUFPLEVBQUUsUUFEYjtBQUVJaUssV0FBSyxFQUFFO0FBRlgsS0FERyxFQUtILEdBQUcsS0FBSzBhLE9BQUwsQ0FBYW5qQyxHQUFiLENBQWlCbkMsQ0FBQyxJQUFJO0FBQ3JCLGFBQU87QUFDSDJnQixlQUFPLEVBQUUzZ0IsQ0FBQyxDQUFDN0csRUFEUjtBQUVIeXhCLGFBQUssRUFBRTVxQixDQUFDLENBQUNzQyxJQUZOO0FBR0gyUCxlQUFPLEVBQUUsS0FBS296QixZQUFMLENBQWtCcmxDLENBQUMsQ0FBQzdHLEVBQXBCLEVBQXdCMm5DLE9BQXhCO0FBSE4sT0FBUDtBQUtILEtBTkUsQ0FMQSxFQVlILEdBQUcsS0FBS3lFLFVBQUwsQ0FBZ0JwakMsR0FBaEIsQ0FBb0JuQyxDQUFDLElBQUk7QUFDeEIsVUFBR0EsQ0FBQyxDQUFDMmdCLE9BQUwsRUFBYSxPQUFPM2dCLENBQVA7QUFDYixhQUFPO0FBQ0gyZ0IsZUFBTyxFQUFFM2dCLENBQUMsQ0FBQzdHLEVBRFI7QUFFSHl4QixhQUFLLEVBQUU1cUIsQ0FBQyxDQUFDc0MsSUFGTjtBQUdIMlAsZUFBTyxFQUFFLEtBQUtvekIsWUFBTCxDQUFrQnJsQyxDQUFDLENBQUM3RyxFQUFwQixFQUF3QjJuQyxPQUF4QjtBQUhOLE9BQVA7QUFLSCxLQVBFLENBWkEsRUFvQkg7QUFDSW5nQixhQUFPLEVBQUU7QUFEYixLQXBCRyxFQXVCSDtBQUNJQSxhQUFPLEVBQUUsUUFEYjtBQUVJMU8sYUFBTyxFQUFFLEtBQUtvekIsWUFBTCxDQUFrQixrQkFBbEI7QUFGYixLQXZCRyxFQTJCSCxHQUFHLEtBQUtwc0MsS0FBTCxDQUFXa0osR0FBWCxDQUFlbkMsQ0FBQyxJQUFJO0FBQ25CLGFBQU87QUFDSDJnQixlQUFPLEVBQUUzZ0IsQ0FBQyxDQUFDN0csRUFEUjtBQUVIeXhCLGFBQUssRUFBRTVxQixDQUFDLENBQUNzQyxJQUZOO0FBR0gyUCxlQUFPLEVBQUUsS0FBS296QixZQUFMLENBQWtCcmxDLENBQUMsQ0FBQzdHLEVBQXBCLEVBQXdCMm5DLE9BQXhCO0FBSE4sT0FBUDtBQUtILEtBTkUsQ0EzQkEsRUFrQ0g7QUFDSW5nQixhQUFPLEVBQUU7QUFEYixLQWxDRyxDQUFQO0FBc0NIOztBQXhHeUM7QUEyRzlDOzs7Ozs7Ozs7Ozs7OztBQzNHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU02a0IsV0FBTixDQUFrQjtBQUNkbnBDLGFBQVcsR0FBRTtBQUNUL0QsVUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBFLGFBQWpCLENBQStCa2hDLFdBQS9CLEdBQTZDLElBQTdDO0FBQ0g7O0FBQ0QsTUFBSXIzQixNQUFKLEdBQWE7QUFBQyxXQUFPblMsdURBQWMsQ0FBQzBaLFlBQXRCO0FBQW9DOztBQUpwQzs7QUFPbEI4dkIsV0FBVyxDQUFDcm9DLFNBQVosQ0FBc0JtZixVQUF0QixHQUFtQyxrQkFBa0I7QUFDakQsT0FBS21wQixhQUFMO0FBQ0FwckMseURBQWEsQ0FBQzZMLE1BQWQsQ0FBcUIsQ0FBckIsRUFBd0IsQ0FBeEIsRUFBMkIsSUFBSSxNQUFNbEssdURBQWMsQ0FBQ3NnQixVQUFmLEVBQVYsQ0FBM0I7QUFDQSxRQUFNc0IsTUFBTSxHQUFHcmpCLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWQsa0RBQVosQ0FBZjs7QUFFQSxPQUFLLElBQUlrWCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHZ00sTUFBTSxDQUFDM2UsTUFBM0IsRUFBbUMyUyxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLFVBQU1tdEIsS0FBSyxHQUFHcmtDLGtEQUFRLENBQUNrakIsTUFBTSxDQUFDaE0sQ0FBRCxDQUFQLENBQXRCO0FBQ0EsUUFBSSxDQUFDL1cscURBQVcsQ0FBQ2trQyxLQUFLLENBQUN2OEIsSUFBUCxDQUFoQixFQUE4QjNILHFEQUFXLENBQUNra0MsS0FBSyxDQUFDdjhCLElBQVAsQ0FBWCxHQUEwQixLQUExQjtBQUM5QixRQUFJM0gscURBQVcsQ0FBQ2trQyxLQUFLLENBQUN2OEIsSUFBUCxDQUFmLEVBQTZCNkgsaURBQUcsQ0FBQ0MsUUFBSixDQUFhRCxpREFBRyxDQUFDRSxRQUFKLENBQWF3MEIsS0FBSyxDQUFDNWxDLEVBQW5CLENBQWIsRUFBcUM4bEMsUUFBUSxDQUFDRixLQUFLLENBQUM3MkIsR0FBUCxDQUE3QztBQUU3QixVQUFNLElBQUlnUCxPQUFKLENBQWExQyxPQUFELElBQWE0QyxVQUFVLENBQUM1QyxPQUFELEVBQVUsRUFBVixDQUFuQyxDQUFOO0FBQ0g7O0FBQ0QsT0FBSyxNQUFNdXFCLEtBQVgsSUFBb0Jsa0MscURBQXBCLEVBQWlDO0FBQzdCLFFBQUksQ0FBQ0gsa0RBQVEsQ0FBQ3FrQyxLQUFELENBQWIsRUFBc0IsT0FBT2xrQyxxREFBVyxDQUFDa2tDLEtBQUQsQ0FBbEI7QUFDekI7O0FBQ0QsT0FBSzJHLGFBQUwsR0FmaUQsQ0FnQmpEO0FBQ0gsQ0FqQkQ7O0FBbUJBRixXQUFXLENBQUNyb0MsU0FBWixDQUFzQndvQyxXQUF0QixHQUFvQyxVQUFTbmpDLElBQVQsRUFBZThMLE1BQU0sR0FBRyxLQUF4QixFQUErQjtBQUMvRHpULHVEQUFXLENBQUMySCxJQUFELENBQVgsR0FBb0IsSUFBcEI7QUFDQSxPQUFLa2pDLGFBQUw7QUFDQSxRQUFNM0csS0FBSyxHQUFHcmtDLGtEQUFRLENBQUM4SCxJQUFELENBQXRCO0FBQ0E2SCxtREFBRyxDQUFDQyxRQUFKLENBQWFELGlEQUFHLENBQUNFLFFBQUosQ0FBYXcwQixLQUFLLENBQUM1bEMsRUFBbkIsQ0FBYixFQUFxQzhsQyxRQUFRLENBQUNGLEtBQUssQ0FBQzcyQixHQUFQLENBQTdDO0FBQ0F5MkIsbURBQVEsQ0FBQ2g4QixRQUFULENBQWtCLGVBQWxCO0FBQ0EsTUFBSTlJLHdEQUFjLENBQUMsV0FBRCxDQUFkLElBQStCLENBQUN5VSxNQUFwQyxFQUE0Q2pULDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUVxOUIsS0FBSyxDQUFDdjhCLElBQUssS0FBSXU4QixLQUFLLENBQUNyaUIsT0FBUSxvQkFBaEQ7QUFDL0MsQ0FQRDs7QUFTQThvQixXQUFXLENBQUNyb0MsU0FBWixDQUFzQjJELE1BQXRCLEdBQStCLFVBQVUwQixJQUFWLEVBQWdCOEwsTUFBTSxHQUFHLEtBQXpCLEVBQWdDO0FBQzNELFNBQU8sS0FBS3EzQixXQUFMLENBQWlCbmpDLElBQWpCLEVBQXVCOEwsTUFBdkIsQ0FBUDtBQUNILENBRkQ7O0FBSUFrM0IsV0FBVyxDQUFDcm9DLFNBQVosQ0FBc0J5b0MsWUFBdEIsR0FBcUMsVUFBU3BqQyxJQUFULEVBQWU4TCxNQUFNLEdBQUcsS0FBeEIsRUFBK0I7QUFDaEV6VCx1REFBVyxDQUFDMkgsSUFBRCxDQUFYLEdBQW9CLEtBQXBCO0FBQ0EsT0FBS2tqQyxhQUFMO0FBQ0EsUUFBTTNHLEtBQUssR0FBR3JrQyxrREFBUSxDQUFDOEgsSUFBRCxDQUF0QjtBQUNBNkgsbURBQUcsQ0FBQ0ksV0FBSixDQUFnQkosaURBQUcsQ0FBQ0UsUUFBSixDQUFhdzBCLEtBQUssQ0FBQzVsQyxFQUFuQixDQUFoQjtBQUNBd2xDLG1EQUFRLENBQUNoOEIsUUFBVCxDQUFrQixnQkFBbEI7QUFDQSxNQUFJOUksd0RBQWMsQ0FBQyxXQUFELENBQWQsSUFBK0IsQ0FBQ3lVLE1BQXBDLEVBQTRDalQsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXE5QixLQUFLLENBQUN2OEIsSUFBSyxLQUFJdThCLEtBQUssQ0FBQ3JpQixPQUFRLHFCQUFoRDtBQUMvQyxDQVBEOztBQVNBOG9CLFdBQVcsQ0FBQ3JvQyxTQUFaLENBQXNCNkQsT0FBdEIsR0FBZ0MsVUFBVXdCLElBQVYsRUFBZ0I4TCxNQUFNLEdBQUcsS0FBekIsRUFBZ0M7QUFDNUQsU0FBTyxLQUFLczNCLFlBQUwsQ0FBa0JwakMsSUFBbEIsRUFBd0I4TCxNQUF4QixDQUFQO0FBQ0gsQ0FGRDs7QUFJQWszQixXQUFXLENBQUNyb0MsU0FBWixDQUFzQjBvQyxXQUF0QixHQUFvQyxVQUFTOUcsS0FBVCxFQUFnQjtBQUNoRCxNQUFJbGtDLHFEQUFXLENBQUNra0MsS0FBRCxDQUFmLEVBQXdCLEtBQUs2RyxZQUFMLENBQWtCN0csS0FBbEIsRUFBeEIsS0FDSyxLQUFLNEcsV0FBTCxDQUFpQjVHLEtBQWpCO0FBQ1IsQ0FIRDs7QUFLQXlHLFdBQVcsQ0FBQ3JvQyxTQUFaLENBQXNCa1IsTUFBdEIsR0FBK0IsVUFBVTdMLElBQVYsRUFBZ0I7QUFDM0MsU0FBTyxLQUFLcWpDLFdBQUwsQ0FBaUJyakMsSUFBakIsQ0FBUDtBQUNILENBRkQ7O0FBSUFnakMsV0FBVyxDQUFDcm9DLFNBQVosQ0FBc0I0YSxTQUF0QixHQUFrQyxnQkFBZWQsUUFBZixFQUF5QjtBQUN2RCxRQUFNakgsS0FBSyxHQUFHLE1BQU1oVSx1REFBYyxDQUFDK2UsV0FBZixDQUEyQjlELFFBQTNCLEVBQXFDLE9BQXJDLENBQXBCOztBQUNBLE1BQUlqSCxLQUFKLEVBQVc7QUFDUCxRQUFJblcsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FpQixpQkFBTixDQUF3QjtBQUFDRSxZQUFNLEVBQUUsQ0FBQzVOLEtBQUQ7QUFBVCxLQUF4QjtBQUNqQyxRQUFJblcsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXVWLFFBQVMsb0RBQTVCLEVBQWlGO0FBQUNqZSxVQUFJLEVBQUU7QUFBUCxLQUFqRjtBQUNqQyxXQUFPcUMsOENBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFTCxRQUFTLHVCQUF4QyxFQUFnRWpILEtBQWhFLENBQVA7QUFDSDs7QUFDRCxRQUFNK3VCLEtBQUssR0FBR3hrQyxNQUFNLENBQUN5aEIsTUFBUCxDQUFjdGhCLGtEQUFkLEVBQXdCb0ssSUFBeEIsQ0FBNkIyNEIsQ0FBQyxJQUFJQSxDQUFDLENBQUN4bUIsUUFBRixJQUFjQSxRQUFoRCxDQUFkO0FBQ0E1YixnREFBSyxDQUFDeUksR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUVpN0IsS0FBSyxDQUFDdjhCLElBQUssS0FBSXU4QixLQUFLLENBQUNyaUIsT0FBUSxjQUE1RDtBQUNBLE1BQUk3aUIsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXE5QixLQUFLLENBQUN2OEIsSUFBSyxLQUFJdThCLEtBQUssQ0FBQ3JpQixPQUFRLGNBQWhELEVBQStEO0FBQUMxakIsUUFBSSxFQUFFO0FBQVAsR0FBL0Q7QUFDakM2QyxtREFBUSxDQUFDOEcsUUFBVCxDQUFrQixjQUFsQixFQUFrQ284QixLQUFLLENBQUN2OEIsSUFBeEM7QUFDSCxDQVhEOztBQWFBZ2pDLFdBQVcsQ0FBQ3JvQyxTQUFaLENBQXNCc2EsV0FBdEIsR0FBb0MsVUFBU2ltQixjQUFULEVBQXlCO0FBQ3pELFFBQU1vSSxPQUFPLEdBQUd2ckMsTUFBTSxDQUFDeWhCLE1BQVAsQ0FBY3RoQixrREFBZCxFQUF3Qm9LLElBQXhCLENBQTZCMjRCLENBQUMsSUFBSUEsQ0FBQyxDQUFDeG1CLFFBQUYsSUFBY3ltQixjQUFoRCxLQUFtRWhqQyxrREFBUSxDQUFDZ2pDLGNBQUQsQ0FBM0Y7QUFDQSxNQUFJLENBQUNvSSxPQUFMLEVBQWM7QUFDZCxRQUFNL0csS0FBSyxHQUFHK0csT0FBTyxDQUFDdGpDLElBQXRCO0FBQ0EsTUFBSTNILHFEQUFXLENBQUNra0MsS0FBRCxDQUFmLEVBQXdCLEtBQUs2RyxZQUFMLENBQWtCN0csS0FBbEIsRUFBeUIsSUFBekI7QUFDeEIsUUFBTS91QixLQUFLLEdBQUdoVSx1REFBYyxDQUFDc2YsYUFBZixDQUE2QjVnQixrREFBUSxDQUFDcWtDLEtBQUQsQ0FBUixDQUFnQjluQixRQUE3QyxFQUF1RCxPQUF2RCxDQUFkO0FBQ0EsU0FBT3ZjLGtEQUFRLENBQUNxa0MsS0FBRCxDQUFmOztBQUNBLE1BQUkvdUIsS0FBSixFQUFXO0FBQ1AsUUFBSW5XLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3dCLDhDQUFLLENBQUNxaUIsaUJBQU4sQ0FBd0I7QUFBQ0UsWUFBTSxFQUFFLENBQUM1TixLQUFEO0FBQVQsS0FBeEI7QUFDakMsUUFBSW5XLHdEQUFjLENBQUMsV0FBRCxDQUFsQixFQUFpQ3dCLDhDQUFLLENBQUNxRyxTQUFOLENBQWlCLEdBQUVxOUIsS0FBTSwwREFBekIsRUFBb0Y7QUFBQy9sQyxVQUFJLEVBQUU7QUFBUCxLQUFwRjtBQUNqQyxXQUFPcUMsOENBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFeW5CLEtBQU0sMERBQXJDLEVBQWdHL3VCLEtBQWhHLENBQVA7QUFDSDs7QUFDRDNVLGdEQUFLLENBQUN5SSxHQUFOLENBQVUsZ0JBQVYsRUFBNkIsR0FBRWk3QixLQUFNLGdCQUFyQztBQUNBLE1BQUlsbEMsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXE5QixLQUFNLGdCQUF6QixFQUEwQztBQUFDL2xDLFFBQUksRUFBRTtBQUFQLEdBQTFDO0FBQ2pDNkMsbURBQVEsQ0FBQzhHLFFBQVQsQ0FBa0IsZ0JBQWxCLEVBQW9DbzhCLEtBQXBDO0FBQ0gsQ0FmRDs7QUFpQkF5RyxXQUFXLENBQUNyb0MsU0FBWixDQUFzQnlnQyxNQUF0QixHQUErQixVQUFTRixjQUFULEVBQXlCO0FBQ3BELFFBQU1vSSxPQUFPLEdBQUd2ckMsTUFBTSxDQUFDeWhCLE1BQVAsQ0FBY3RoQixrREFBZCxFQUF3Qm9LLElBQXhCLENBQTZCMjRCLENBQUMsSUFBSUEsQ0FBQyxDQUFDeG1CLFFBQUYsSUFBY3ltQixjQUFoRCxLQUFtRWhqQyxrREFBUSxDQUFDZ2pDLGNBQUQsQ0FBM0Y7QUFDQSxNQUFJLENBQUNvSSxPQUFMLEVBQWM7QUFDZCxPQUFLcnVCLFdBQUwsQ0FBaUJxdUIsT0FBTyxDQUFDN3VCLFFBQXpCOztBQUNBLFFBQU1tVSxRQUFRLEdBQUd2YyxtQkFBTyxDQUFDLGtCQUFELENBQVAsQ0FBZ0IyRixPQUFoQixDQUF3QnhZLHVEQUFjLENBQUMwWixZQUF2QyxFQUFxRG93QixPQUFPLENBQUM3dUIsUUFBN0QsQ0FBakI7O0FBQ0FwSSxxQkFBTyxDQUFDLGNBQUQsQ0FBUCxDQUFjaVosVUFBZCxDQUF5QnNELFFBQXpCO0FBQ0gsQ0FORDs7QUFRQW9hLFdBQVcsQ0FBQ3JvQyxTQUFaLENBQXNCOGEsV0FBdEIsR0FBb0MsZ0JBQWV5bEIsY0FBZixFQUErQjtBQUMvRCxRQUFNb0ksT0FBTyxHQUFHdnJDLE1BQU0sQ0FBQ3loQixNQUFQLENBQWN0aEIsa0RBQWQsRUFBd0JvSyxJQUF4QixDQUE2QjI0QixDQUFDLElBQUlBLENBQUMsQ0FBQ3htQixRQUFGLElBQWN5bUIsY0FBaEQsS0FBbUVoakMsa0RBQVEsQ0FBQ2dqQyxjQUFELENBQTNGO0FBQ0EsTUFBSSxDQUFDb0ksT0FBTCxFQUFjLE9BQU8sS0FBSy90QixTQUFMLENBQWUybEIsY0FBZixDQUFQO0FBQ2QsUUFBTXFCLEtBQUssR0FBRytHLE9BQU8sQ0FBQ3RqQyxJQUF0QjtBQUNBLFFBQU13TixLQUFLLEdBQUcsTUFBTWhVLHVEQUFjLENBQUN5ZixhQUFmLENBQTZCL2dCLGtEQUFRLENBQUNxa0MsS0FBRCxDQUFSLENBQWdCOW5CLFFBQTdDLEVBQXVELE9BQXZELENBQXBCO0FBQ0EsTUFBSXBjLHFEQUFXLENBQUNra0MsS0FBRCxDQUFmLEVBQXdCLEtBQUs2RyxZQUFMLENBQWtCN0csS0FBbEIsRUFBeUIsSUFBekIsR0FBZ0MsS0FBSzRHLFdBQUwsQ0FBaUI1RyxLQUFqQixFQUF3QixJQUF4QixDQUFoQzs7QUFDeEIsTUFBSS91QixLQUFKLEVBQVc7QUFDUCxRQUFJblcsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FpQixpQkFBTixDQUF3QjtBQUFDRSxZQUFNLEVBQUUsQ0FBQzVOLEtBQUQ7QUFBVCxLQUF4QjtBQUNqQyxRQUFJblcsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXE5QixLQUFNLHlCQUF6QixFQUFtRDtBQUFDL2xDLFVBQUksRUFBRTtBQUFQLEtBQW5EO0FBQ2pDLFdBQU9xQyw4Q0FBSyxDQUFDaWMsR0FBTixDQUFVLGdCQUFWLEVBQTZCLEdBQUV5bkIsS0FBTSx5QkFBckMsRUFBK0QvdUIsS0FBL0QsQ0FBUDtBQUNIOztBQUNEM1UsZ0RBQUssQ0FBQ3lJLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixHQUFFaTdCLEtBQU0sS0FBSXJrQyxrREFBUSxDQUFDcWtDLEtBQUQsQ0FBUixDQUFnQnJpQixPQUFRLGdCQUFqRTtBQUNBLE1BQUk3aUIsd0RBQWMsQ0FBQyxXQUFELENBQWxCLEVBQWlDd0IsOENBQUssQ0FBQ3FHLFNBQU4sQ0FBaUIsR0FBRXE5QixLQUFNLEtBQUlya0Msa0RBQVEsQ0FBQ3FrQyxLQUFELENBQVIsQ0FBZ0JyaUIsT0FBUSxnQkFBckQsRUFBc0U7QUFBQzFqQixRQUFJLEVBQUU7QUFBUCxHQUF0RTtBQUNqQzZDLG1EQUFRLENBQUM4RyxRQUFULENBQWtCLGdCQUFsQixFQUFvQ284QixLQUFwQztBQUNILENBZEQ7O0FBZ0JBeUcsV0FBVyxDQUFDcm9DLFNBQVosQ0FBc0JtUixNQUF0QixHQUErQixVQUFTOUwsSUFBVCxFQUFlO0FBQzFDLFNBQU8sS0FBS3lWLFdBQUwsQ0FBaUJ6VixJQUFqQixDQUFQO0FBQ0gsQ0FGRDs7QUFJQWdqQyxXQUFXLENBQUNyb0MsU0FBWixDQUFzQjBnQyxJQUF0QixHQUE2QixVQUFTSCxjQUFULEVBQXlCO0FBQ2xELFFBQU1DLFFBQVEsR0FBR3BqQyxNQUFNLENBQUN5aEIsTUFBUCxDQUFjdGhCLGtEQUFkLEVBQXdCb0ssSUFBeEIsQ0FBNkIyNEIsQ0FBQyxJQUFJQSxDQUFDLENBQUN4bUIsUUFBRixJQUFjeW1CLGNBQWhELEtBQW1FaGpDLGtEQUFRLENBQUNnakMsY0FBRCxDQUE1RjtBQUNBLE1BQUksQ0FBQ0MsUUFBTCxFQUFlOztBQUNmLFFBQU12UyxRQUFRLEdBQUd2YyxtQkFBTyxDQUFDLGtCQUFELENBQVAsQ0FBZ0IyRixPQUFoQixDQUF3QnhZLHVEQUFjLENBQUMwWixZQUF2QyxFQUFxRGlvQixRQUFRLENBQUMxbUIsUUFBOUQsQ0FBakI7O0FBQ0FwSSxxQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JpdkIsS0FBcEIsQ0FBMEJDLFFBQTFCLENBQW9DLEdBQUUzUyxRQUFTLEVBQS9DO0FBQ0gsQ0FMRDs7QUFPQW9hLFdBQVcsQ0FBQ3JvQyxTQUFaLENBQXNCNG9DLGVBQXRCLEdBQXdDLFlBQVc7QUFDL0MsUUFBTWhRLE9BQU8sR0FBRy81Qix1REFBYyxDQUFDMmYsY0FBZixDQUE4QixPQUE5QixDQUFoQjs7QUFDQSxPQUFLLE1BQU0xRSxRQUFYLElBQXVCOGUsT0FBTyxDQUFDL2IsS0FBL0IsRUFBc0MsS0FBS2pDLFNBQUwsQ0FBZWQsUUFBZjs7QUFDdEMsT0FBSyxNQUFNelUsSUFBWCxJQUFtQnV6QixPQUFPLENBQUM5WixPQUEzQixFQUFvQyxLQUFLeEUsV0FBTCxDQUFpQmpWLElBQWpCO0FBQ3ZDLENBSkQ7O0FBTUFnakMsV0FBVyxDQUFDcm9DLFNBQVosQ0FBc0Jzb0MsYUFBdEIsR0FBc0MsWUFBVztBQUM3QyxRQUFNeEgsS0FBSyxHQUFHbGlDLGtEQUFTLENBQUMrWixlQUFWLENBQTBCLFFBQTFCLENBQWQ7O0FBQ0EsTUFBSW1vQixLQUFKLEVBQVc7QUFDUDFqQyxVQUFNLENBQUNzWixNQUFQLENBQWNoWixxREFBZCxFQUEyQm9qQyxLQUEzQjtBQUNIO0FBQ0osQ0FMRDs7QUFPQXVILFdBQVcsQ0FBQ3JvQyxTQUFaLENBQXNCdW9DLGFBQXRCLEdBQXNDLFlBQVk7QUFDOUMzcEMsb0RBQVMsQ0FBQ2dhLGVBQVYsQ0FBMEIsUUFBMUIsRUFBb0NsYixxREFBcEM7QUFDSCxDQUZEOztBQUllLG1FQUFJMnFDLFdBQUosRUFBZixFOzs7Ozs7Ozs7Ozs7QUN2SkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNbnFDLEtBQU4sQ0FBWTtBQUN2QjtBQUNBLGFBQVdtTyxXQUFYLEdBQXlCO0FBQUUsV0FBT0MsSUFBSSxDQUFDQyxHQUFMLENBQVMvTSxRQUFRLENBQUNnTixlQUFULENBQXlCQyxXQUFsQyxFQUErQ3RSLE1BQU0sQ0FBQ3VSLFVBQVAsSUFBcUIsQ0FBcEUsQ0FBUDtBQUFnRjtBQUMzRzs7O0FBQ0EsYUFBV0MsWUFBWCxHQUEwQjtBQUFFLFdBQU9MLElBQUksQ0FBQ0MsR0FBTCxDQUFTL00sUUFBUSxDQUFDZ04sZUFBVCxDQUF5QkksWUFBbEMsRUFBZ0R6UixNQUFNLENBQUMwUixXQUFQLElBQXNCLENBQXRFLENBQVA7QUFBa0Y7O0FBRTlHLGFBQVdWLGdCQUFYLEdBQThCO0FBQzFCLFdBQU8sS0FBSzA4QixpQkFBTCxHQUF5QixJQUFoQztBQUNIOztBQUVELFNBQU8vN0IsdUJBQVAsR0FBaUM7QUFDN0IsV0FBTztBQUNIZzhCLGlCQUFXLEVBQUUsSUFEVjtBQUVIQyxXQUFLLEVBQUU7QUFGSixLQUFQO0FBSUg7O0FBRUQsU0FBT2g4QixtQkFBUCxDQUEyQmpQLEdBQTNCLEVBQWdDO0FBQzVCLFFBQUlBLEdBQUcsS0FBSyxhQUFaLEVBQTJCLE9BQU8sSUFBUDtBQUMzQixRQUFJQSxHQUFHLEtBQUssT0FBWixFQUFxQixPQUFPLEtBQVA7QUFDckIsV0FBTyxJQUFQO0FBQ0g7O0FBRUQsU0FBT2tQLG1CQUFQLENBQTJCbFAsR0FBM0IsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQ25DLFFBQUlELEdBQUcsS0FBSyxhQUFaLEVBQTJCLE9BQU8sSUFBUDtBQUMzQixRQUFJQSxHQUFHLEtBQUssT0FBWixFQUFxQixPQUFPLEtBQVA7QUFDckIsV0FBTyxJQUFQO0FBQ0g7O0FBRUQsU0FBTzhlLFFBQVAsQ0FBZ0JoWSxPQUFoQixFQUF5QjtBQUNyQixRQUFJQSxPQUFPLENBQUNva0MsVUFBUixDQUFtQixDQUFuQixNQUEwQixNQUE5QixFQUFzQztBQUNsQ3BrQyxhQUFPLEdBQUdBLE9BQU8sQ0FBQytQLEtBQVIsQ0FBYyxDQUFkLENBQVY7QUFDSDs7QUFDRCxXQUFPL1AsT0FBUDtBQUNIOztBQUVELFNBQU9xa0MsV0FBUCxHQUFxQjtBQUNqQixXQUFPLzdCLGlEQUFHLENBQUNrZixLQUFKLENBQVUsTUFBSTVrQixRQUFRLENBQUM1RSxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3FtQyxlQUFGLElBQXFCcm1DLENBQUMsQ0FBQ3NtQyxZQUExQyxFQUF3RCxDQUF4RCxFQUEyREQsZUFBNUQsQ0FBWixHQUF5RixXQUFuRyxDQUFQO0FBQ0g7O0FBRUQsU0FBT0UsVUFBUCxDQUFrQkMsUUFBbEIsRUFBNEJsa0MsSUFBNUIsRUFBa0M7QUFDOUJra0MsWUFBUSxDQUFDQyxLQUFUO0FBQ0FELFlBQVEsQ0FBQ0UsY0FBVCxHQUEwQixDQUExQjtBQUNBRixZQUFRLENBQUNHLFlBQVQsR0FBd0JILFFBQVEsQ0FBQ3RyQyxLQUFULENBQWUrRCxNQUF2QztBQUNBdEMsWUFBUSxDQUFDaXFDLFdBQVQsQ0FBcUIsWUFBckIsRUFBbUMsS0FBbkMsRUFBMEN0a0MsSUFBMUM7QUFDSDs7QUFFRCxTQUFPaUksUUFBUCxDQUFnQnBSLEVBQWhCLEVBQW9CO0FBQ2hCLFdBQU9BLEVBQUUsQ0FBQytGLE9BQUgsQ0FBVyxvQkFBWCxFQUFpQyxHQUFqQyxDQUFQO0FBQ0g7O0FBRUQsU0FBTzRFLEdBQVAsQ0FBVytpQyxVQUFYLEVBQXVCMWxDLE9BQXZCLEVBQWdDO0FBQzVCMEMsV0FBTyxDQUFDQyxHQUFSLENBQWEscUJBQW9CK2lDLFVBQVcsT0FBTTFsQyxPQUFRLEVBQTFELEVBQTZELG1DQUE3RCxFQUFrRyxpQkFBbEcsRUFBcUgsRUFBckg7QUFDSDs7QUFFRCxTQUFPN0YsSUFBUCxDQUFZdXJDLFVBQVosRUFBd0IxbEMsT0FBeEIsRUFBaUM7QUFDN0IwQyxXQUFPLENBQUN2SSxJQUFSLENBQWMscUJBQW9CdXJDLFVBQVcsT0FBTTFsQyxPQUFRLEVBQTNELEVBQThELG1DQUE5RCxFQUFtRyxpQkFBbkcsRUFBc0gsRUFBdEg7QUFDSDs7QUFFRCxTQUFPbVcsR0FBUCxDQUFXdXZCLFVBQVgsRUFBdUIxbEMsT0FBdkIsRUFBZ0M2TyxLQUFoQyxFQUF1QztBQUNuQ25NLFdBQU8sQ0FBQ0MsR0FBUixDQUFhLHFCQUFvQitpQyxVQUFXLE9BQU0xbEMsT0FBUSxFQUExRCxFQUE2RCwrQkFBN0QsRUFBOEYsYUFBOUYsRUFBNkcsRUFBN0c7O0FBQ0EsUUFBSTZPLEtBQUosRUFBVztBQUNQbk0sYUFBTyxDQUFDaWpDLGNBQVIsQ0FBdUIsY0FBYzkyQixLQUFLLENBQUM3TyxPQUEzQyxFQUFvRCxhQUFwRDtBQUNBMEMsYUFBTyxDQUFDbU0sS0FBUixDQUFjQSxLQUFLLENBQUNxTCxLQUFwQjtBQUNBeFgsYUFBTyxDQUFDa2pDLFFBQVI7QUFDSDtBQUNKO0FBRUQ7Ozs7Ozs7Ozs7QUFRQSxTQUFPQyxZQUFQLENBQW9CQyxNQUFwQixFQUE0QmpyQixNQUE1QixFQUFvQztBQUNoQyxTQUFLLE1BQU1wZSxHQUFYLElBQWtCb2UsTUFBbEIsRUFBMEI7QUFDdEIsVUFBSWtyQixXQUFXLEdBQUdsckIsTUFBTSxDQUFDcGUsR0FBRCxDQUF4QjtBQUNBLFVBQUl1VCxLQUFLLENBQUNDLE9BQU4sQ0FBYzgxQixXQUFkLENBQUosRUFBZ0NBLFdBQVcsR0FBR2p4QixJQUFJLENBQUNPLFNBQUwsQ0FBZTB3QixXQUFmLENBQWQ7QUFDaEMsVUFBSSxPQUFPQSxXQUFQLEtBQXdCLFFBQXhCLElBQW9DQSxXQUFXLEtBQUssSUFBeEQsRUFBOERBLFdBQVcsR0FBR0EsV0FBVyxDQUFDN3BCLFFBQVosRUFBZDtBQUM5RDRwQixZQUFNLEdBQUdBLE1BQU0sQ0FBQy9uQyxPQUFQLENBQWUsSUFBSVAsTUFBSixDQUFZLEtBQUlmLEdBQUksSUFBcEIsRUFBeUIsR0FBekIsQ0FBZixFQUE4Q3NwQyxXQUE5QyxDQUFUO0FBQ0g7O0FBQ0QsV0FBT0QsTUFBUDtBQUNIOztBQUVELFNBQU9FLE1BQVAsQ0FBY3gxQixDQUFkLEVBQWlCO0FBQ2IsV0FBT0EsQ0FBQyxDQUFDelMsT0FBRixDQUFVLHVCQUFWLEVBQW1DLE1BQW5DLENBQVA7QUFDSDs7QUFFRCxTQUFPa08sUUFBUCxDQUFnQnZPLElBQWhCLEVBQXNCO0FBQ2xCLFFBQUk7QUFDQSxhQUFPb1gsSUFBSSxDQUFDQyxLQUFMLENBQVdyWCxJQUFYLENBQVA7QUFDSCxLQUZELENBR0EsT0FBT3lZLEdBQVAsRUFBWTtBQUNSLGFBQU8sS0FBUDtBQUNIO0FBQ0o7O0FBRUQsU0FBT2lELE9BQVAsQ0FBZTljLEdBQWYsRUFBb0I7QUFDaEIsUUFBSUEsR0FBRyxJQUFJLElBQVAsSUFBZUEsR0FBRyxJQUFJRSxTQUF0QixJQUFtQ0YsR0FBRyxJQUFJLEVBQTlDLEVBQWtELE9BQU8sSUFBUDtBQUNsRCxRQUFJLE9BQU9BLEdBQVAsS0FBZ0IsUUFBcEIsRUFBOEIsT0FBTyxLQUFQO0FBQzlCLFFBQUkwVCxLQUFLLENBQUNDLE9BQU4sQ0FBYzNULEdBQWQsQ0FBSixFQUF3QixPQUFPQSxHQUFHLENBQUN3QixNQUFKLElBQWMsQ0FBckI7O0FBQ3hCLFNBQUssTUFBTWhFLEdBQVgsSUFBa0J3QyxHQUFsQixFQUF1QjtBQUNuQixVQUFJQSxHQUFHLENBQUNzTixjQUFKLENBQW1COVAsR0FBbkIsQ0FBSixFQUE2QixPQUFPLEtBQVA7QUFDaEM7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBRUQsU0FBT2lTLGNBQVAsQ0FBc0JDLE1BQXRCLEVBQThCaE0sT0FBOUIsRUFBdUM7QUFDbkMsV0FBTyxDQUFDLEdBQUdpbUMsTUFBSixLQUFlO0FBQ2xCLFVBQUk7QUFBRSxlQUFPajZCLE1BQU0sQ0FBQyxHQUFHaTZCLE1BQUosQ0FBYjtBQUEyQixPQUFqQyxDQUNBLE9BQU9wbkMsQ0FBUCxFQUFVO0FBQUUsYUFBS3NYLEdBQUwsQ0FBUyxpQkFBVCxFQUE0Qix1QkFBdUJuVyxPQUFuRCxFQUE0RG5CLENBQTVEO0FBQWlFO0FBQ2hGLEtBSEQ7QUFJSDs7QUFFRCxTQUFPVixXQUFQLENBQW1Cd04sSUFBbkIsRUFBeUJDLFVBQXpCLEVBQXFDekIsT0FBckMsRUFBOEM7QUFDMUMsVUFBTTtBQUFDNkgsWUFBRDtBQUFTM1QsV0FBVDtBQUFnQjZuQyxhQUFoQjtBQUF5QmhVLFVBQUksR0FBRyxLQUFoQztBQUF1Q2lVLFlBQU0sR0FBRyxLQUFoRDtBQUF1REMsV0FBSyxHQUFHO0FBQS9ELFFBQXdFajhCLE9BQTlFO0FBQ0EsVUFBTWlJLFdBQVcsR0FBR2pJLE9BQU8sQ0FBQ2lJLFdBQVIsSUFBdUJ6RyxJQUFJLENBQUN5RyxXQUE1QixJQUEyQ3pHLElBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCd0csV0FBNUQsSUFBMkV6RyxJQUFJLENBQUN0SyxJQUFoRixJQUF3RnNLLElBQUksQ0FBQ3pRLFdBQUwsQ0FBaUJrWCxXQUF6RyxJQUF3SHpHLElBQUksQ0FBQ3pRLFdBQUwsQ0FBaUJtRyxJQUE3SjtBQUNBLFFBQUksQ0FBQzhrQyxNQUFMLEVBQWF6akMsT0FBTyxDQUFDQyxHQUFSLENBQVksT0FBWixFQUFxQmlKLFVBQXJCLEVBQWlDLElBQWpDLEVBQXVDd0csV0FBdkMsRUFINkIsQ0FHd0I7O0FBQ2xFLFFBQUksQ0FBQ3pHLElBQUksQ0FBQ0MsVUFBRCxDQUFULEVBQXVCO0FBQ25CLFVBQUl3NkIsS0FBSixFQUFXejZCLElBQUksQ0FBQ0MsVUFBRCxDQUFKLEdBQW1CLFlBQVcsQ0FBRSxDQUFoQyxDQUFYLEtBQ0ssT0FBT2xKLE9BQU8sQ0FBQ21NLEtBQVIsQ0FBY2pELFVBQWQsRUFBMEIsb0JBQTFCLEVBQWdEd0csV0FBaEQsQ0FBUCxDQUZjLENBRXVEO0FBQzdFOztBQUNELFVBQU1pMEIsVUFBVSxHQUFHMTZCLElBQUksQ0FBQ0MsVUFBRCxDQUF2QjtBQUNBLFFBQUkwNkIsUUFBUSxHQUFHLEtBQWY7O0FBQ0EsVUFBTXRVLE1BQU0sR0FBRyxNQUFNO0FBQ2pCLFVBQUksQ0FBQ21VLE1BQUwsRUFBYXpqQyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxTQUFaLEVBQXVCaUosVUFBdkIsRUFBbUMsSUFBbkMsRUFBeUN3RyxXQUF6QyxFQURJLENBQ21EO0FBQ3BFOztBQUNBazBCLGNBQVEsR0FBRyxJQUFYLENBSGlCLENBR0Q7QUFDbkIsS0FKRDs7QUFLQTM2QixRQUFJLENBQUNDLFVBQUQsQ0FBSixHQUFtQixZQUFXO0FBQzFCLFVBQUcwNkIsUUFBSCxFQUFZO0FBQ1IsZUFBT0QsVUFBVSxDQUFDcGlDLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0IsR0FBRzdILFNBQXpCLENBQVA7QUFDSDs7QUFDRCxZQUFNc0IsSUFBSSxHQUFHO0FBQ1R1bEIsa0JBQVUsRUFBRSxJQURIO0FBRVRoUix1QkFBZSxFQUFFN1YsU0FGUjtBQUdUbXFDLG1CQUFXLEVBQUV2VSxNQUhKO0FBSVR3VSxzQkFBYyxFQUFFSCxVQUpQO0FBS1RJLDBCQUFrQixFQUFFLE1BQU0vb0MsSUFBSSxDQUFDRSxXQUFMLEdBQW1CRixJQUFJLENBQUM4b0MsY0FBTCxDQUFvQnJxQyxLQUFwQixDQUEwQnVCLElBQUksQ0FBQ3VsQixVQUEvQixFQUEyQ3ZsQixJQUFJLENBQUN1VSxlQUFoRDtBQUxwQyxPQUFiOztBQU9BLFVBQUlpMEIsT0FBSixFQUFhO0FBQ1QsY0FBTVEsT0FBTyxHQUFHeHNDLEtBQUssQ0FBQzZSLGNBQU4sQ0FBcUJtNkIsT0FBckIsRUFBOEIsMkJBQTJCdjZCLElBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCd0csV0FBMUUsRUFBdUYxVSxJQUF2RixDQUFoQjtBQUNBLFlBQUlncEMsT0FBTyxLQUFLbHFDLFNBQWhCLEVBQTJCa0IsSUFBSSxDQUFDRSxXQUFMLEdBQW1COG9DLE9BQW5CO0FBQzlCLE9BSEQsTUFJSztBQUNELFlBQUkxMEIsTUFBSixFQUFZOVgsS0FBSyxDQUFDNlIsY0FBTixDQUFxQmlHLE1BQXJCLEVBQTZCLDBCQUEwQnJHLElBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCd0csV0FBeEUsRUFBcUYxVSxJQUFyRjtBQUNaQSxZQUFJLENBQUMrb0Msa0JBQUw7QUFDQSxZQUFJcG9DLEtBQUosRUFBV25FLEtBQUssQ0FBQzZSLGNBQU4sQ0FBcUIxTixLQUFyQixFQUE0Qix5QkFBeUJzTixJQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQndHLFdBQXRFLEVBQW1GMVUsSUFBbkY7QUFDZDs7QUFDRCxVQUFJdzBCLElBQUosRUFBVUYsTUFBTTtBQUNoQixhQUFPdDBCLElBQUksQ0FBQ0UsV0FBWjtBQUNILEtBdEJEOztBQXVCQXhFLFVBQU0sQ0FBQ3NaLE1BQVAsQ0FBYy9HLElBQUksQ0FBQ0MsVUFBRCxDQUFsQixFQUFnQ3k2QixVQUFoQztBQUNBMTZCLFFBQUksQ0FBQ0MsVUFBRCxDQUFKLENBQWlCKzZCLGVBQWpCLEdBQW1DLElBQW5DO0FBQ0FoN0IsUUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUJ3RyxXQUFqQixHQUErQkEsV0FBL0I7O0FBQ0EsUUFBSSxDQUFDekcsSUFBSSxDQUFDQyxVQUFELENBQUosQ0FBaUIwRyxnQkFBdEIsRUFBd0M7QUFDcEMzRyxVQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQjBHLGdCQUFqQixHQUFvQyt6QixVQUFwQzs7QUFDQTE2QixVQUFJLENBQUNDLFVBQUQsQ0FBSixDQUFpQnNRLFFBQWpCLEdBQTRCLFlBQVc7QUFBQyxlQUFPbXFCLFVBQVUsQ0FBQ25xQixRQUFYLEVBQVA7QUFBOEIsT0FBdEU7QUFDSDs7QUFDRCxXQUFPOFYsTUFBUDtBQUNIOztBQUVELFNBQU9ubUIsU0FBUCxDQUFpQmQsSUFBakIsRUFBdUJlLFFBQXZCLEVBQWlDO0FBQzdCLFVBQU00bUIsUUFBUSxHQUFHLElBQUkxUyxnQkFBSixDQUFzQkMsU0FBRCxJQUFlO0FBQ2pELFdBQUssSUFBSTNlLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcyZSxTQUFTLENBQUNuaUIsTUFBOUIsRUFBc0N3RCxDQUFDLEVBQXZDLEVBQTJDO0FBQ3ZDLGNBQU02ZSxRQUFRLEdBQUdGLFNBQVMsQ0FBQzNlLENBQUQsQ0FBMUI7QUFDQSxjQUFNcXhCLEtBQUssR0FBRzNpQixLQUFLLENBQUNpTSxJQUFOLENBQVdrRSxRQUFRLENBQUN5UyxZQUFwQixDQUFkO0FBQ0EsY0FBTUMsV0FBVyxHQUFHRixLQUFLLENBQUNoYixPQUFOLENBQWM1TSxJQUFkLElBQXNCLENBQUMsQ0FBM0M7QUFDQSxjQUFNK25CLFdBQVcsR0FBR0gsS0FBSyxDQUFDL0UsSUFBTixDQUFXMEMsTUFBTSxJQUFJQSxNQUFNLENBQUMvZSxRQUFQLENBQWdCeEcsSUFBaEIsQ0FBckIsQ0FBcEI7O0FBQ0EsWUFBSThuQixXQUFXLElBQUlDLFdBQW5CLEVBQWdDO0FBQzVCSixrQkFBUSxDQUFDa1UsVUFBVDtBQUNBOTZCLGtCQUFRO0FBQ1g7QUFDSjtBQUNKLEtBWGdCLENBQWpCO0FBYUE0bUIsWUFBUSxDQUFDNVIsT0FBVCxDQUFpQnRsQixRQUFRLENBQUNHLElBQTFCLEVBQWdDO0FBQUNxbEIsYUFBTyxFQUFFLElBQVY7QUFBZ0JELGVBQVMsRUFBRTtBQUEzQixLQUFoQztBQUNIOztBQUVELFNBQU9xRCxhQUFQLENBQXFCOW5CLEdBQXJCLEVBQTBCMlcsSUFBMUIsRUFBZ0M7QUFDNUIsV0FBT0EsSUFBSSxDQUFDNU8sS0FBTCxDQUFXLFVBQVgsRUFBdUJreUIsTUFBdkIsQ0FBOEIsVUFBU2o2QixHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDckQsYUFBT0QsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUQsQ0FBakI7QUFDSCxLQUZNLEVBRUpELEdBRkksQ0FBUDtBQUdIO0FBRUQ7Ozs7Ozs7Ozs7O0FBU0EsU0FBT2lFLFNBQVAsQ0FBaUJLLE9BQWpCLEVBQTBCdUosT0FBTyxHQUFHLEVBQXBDLEVBQXdDO0FBQ3BDLFFBQUksQ0FBQzNPLFFBQVEsQ0FBQzZILGFBQVQsQ0FBdUIsWUFBdkIsQ0FBTCxFQUEyQztBQUN2QyxZQUFNZ2xCLFNBQVMsR0FBRzdzQixRQUFRLENBQUM2SCxhQUFULENBQXVCLE1BQUlHLFFBQVEsQ0FBQzVFLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDOGdDLE9BQUYsSUFBYTlnQyxDQUFDLENBQUNnb0MsU0FBbEMsRUFBNkMsQ0FBN0MsRUFBZ0RsSCxPQUFqRCxDQUFaLEdBQXNFLFFBQTdGLEtBQTBHLElBQTVIO0FBQ0EsWUFBTW1ILElBQUksR0FBR3plLFNBQVMsR0FBR0EsU0FBUyxDQUFDaGxCLGFBQVYsQ0FBd0IsTUFBeEIsQ0FBSCxHQUFxQyxJQUEzRDtBQUNBLFlBQU0rRCxNQUFNLEdBQUcwL0IsSUFBSSxHQUFHQSxJQUFJLENBQUN6VixZQUFSLEdBQXVCLEVBQTFDO0FBQ0EsWUFBTTBWLFlBQVksR0FBR3ZyQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBckI7QUFDQXNyQyxrQkFBWSxDQUFDN2lDLFNBQWIsQ0FBdUJpTixHQUF2QixDQUEyQixXQUEzQjtBQUNBNDFCLGtCQUFZLENBQUN0Z0MsS0FBYixDQUFtQnVNLFdBQW5CLENBQStCLFFBQS9CLEVBQXlDNUwsTUFBTSxHQUFDLElBQWhEO0FBQ0E1TCxjQUFRLENBQUM2SCxhQUFULENBQXVCLFlBQXZCLEVBQXFDekgsV0FBckMsQ0FBaURtckMsWUFBakQ7QUFDSDs7QUFDRCxVQUFNQSxZQUFZLEdBQUd2ckMsUUFBUSxDQUFDNkgsYUFBVCxDQUF1QixZQUF2QixDQUFyQjtBQUNBLFVBQU07QUFBQ3hMLFVBQUksR0FBRyxFQUFSO0FBQVltdkMsVUFBSSxHQUFHLElBQW5CO0FBQXlCQyxhQUFPLEdBQUc7QUFBbkMsUUFBMkM5OEIsT0FBakQ7QUFDQSxVQUFNKzhCLFNBQVMsR0FBRzFyQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBbEI7QUFDQXlyQyxhQUFTLENBQUNoakMsU0FBVixDQUFvQmlOLEdBQXBCLENBQXdCLFVBQXhCO0FBQ0EsUUFBSXRaLElBQUosRUFBVXF2QyxTQUFTLENBQUNoakMsU0FBVixDQUFvQmlOLEdBQXBCLENBQXdCLFdBQVd0WixJQUFuQztBQUNWLFFBQUlBLElBQUksSUFBSW12QyxJQUFaLEVBQWtCRSxTQUFTLENBQUNoakMsU0FBVixDQUFvQmlOLEdBQXBCLENBQXdCLE1BQXhCO0FBQ2xCKzFCLGFBQVMsQ0FBQ0MsU0FBVixHQUFzQnZtQyxPQUF0QjtBQUNBbW1DLGdCQUFZLENBQUNuckMsV0FBYixDQUF5QnNyQyxTQUF6QjtBQUNBSCxnQkFBWSxDQUFDdGdDLEtBQWIsQ0FBbUJ1TSxXQUFuQixDQUErQixNQUEvQixFQUF3QyxjQUFhK3pCLFlBQVksQ0FBQzVWLFdBQWIsR0FBMkIsQ0FBRSxLQUFsRjtBQUNBbGIsY0FBVSxDQUFDLE1BQU07QUFDYml4QixlQUFTLENBQUNoakMsU0FBVixDQUFvQmlOLEdBQXBCLENBQXdCLFNBQXhCO0FBQ0E4RSxnQkFBVSxDQUFDLE1BQU07QUFDYml4QixpQkFBUyxDQUFDbGlDLE1BQVY7QUFDQSxZQUFJLENBQUN4SixRQUFRLENBQUNzWCxnQkFBVCxDQUEwQixzQkFBMUIsRUFBa0RoVixNQUF2RCxFQUErRHRDLFFBQVEsQ0FBQzZILGFBQVQsQ0FBdUIsWUFBdkIsRUFBcUMyQixNQUFyQztBQUNsRSxPQUhTLEVBR1AsR0FITyxDQUFWO0FBSUgsS0FOUyxFQU1QaWlDLE9BTk8sQ0FBVjtBQU9IOztBQUVELFNBQU9qOUIsS0FBUCxDQUFhcFMsS0FBYixFQUFvQmdKLE9BQXBCLEVBQTZCO0FBQ3pCLFFBQUl3bUMsV0FBVyxHQUFHeG9DLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMmhCLEtBQUYsSUFBVzNoQixDQUFDLENBQUM0aEIsS0FBYixJQUFzQixDQUFDNWhCLENBQUMsQ0FBQ3dvQyxnQkFBNUMsRUFBOEQsQ0FBOUQsQ0FBbEI7QUFDQSxRQUFJQyxZQUFZLEdBQUcxb0MsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUMwb0MsTUFBRixJQUFZMW9DLENBQUMsQ0FBQzZoQixxQkFBZCxJQUF1QzdoQixDQUFDLENBQUN3b0MsZ0JBQTVELEVBQThFLENBQTlFLENBQW5CO0FBQ0EsUUFBSUcsYUFBYSxHQUFHNW9DLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMG9DLE1BQUYsSUFBWTFvQyxDQUFDLENBQUM2aEIscUJBQWQsSUFBdUM3aEIsQ0FBQyxDQUFDNG9DLFNBQTVELEVBQXVFLENBQXZFLENBQXBCO0FBQ0EsVUFBTWpuQixLQUFLLEdBQUd0WCxpREFBRyxDQUFDek4sYUFBSixDQUFtQjtrREFDU21ELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNm9DLFFBQUYsSUFBYzdvQyxDQUFDLENBQUM4b0MsaUJBQW5DLEVBQXNELENBQXRELEVBQXlERCxRQUFTOytDQUNyRU4sV0FBVyxDQUFDNW1CLEtBQU07eURBQ1I0bUIsV0FBVyxDQUFDM21CLEtBQU07cURBQ3RCNm1CLFlBQVksQ0FBQ0MsTUFBTzt5REFDaEIzdkMsS0FBTTs7Ozs7OENBS2pCZ0osT0FBUTs7OztxREFJRDBtQyxZQUFZLENBQUNwbUMsTUFBTyxJQUFHc21DLGFBQWEsQ0FBQ3RtQyxNQUFPOzs7OzsyQkFkM0UsQ0FBZDtBQW9CQXNmLFNBQUssQ0FBQ25kLGFBQU4sQ0FBb0IsZ0JBQXBCLEVBQXNDMEMsZ0JBQXRDLENBQXVELE9BQXZELEVBQWdFLE1BQU07QUFDbEVtRCx1REFBRyxDQUFDdWxCLFFBQUosQ0FBYWpPLEtBQWIsRUFBb0IsU0FBcEI7QUFDQXZLLGdCQUFVLENBQUMsTUFBTTtBQUNidUssYUFBSyxDQUFDeGIsTUFBTjtBQUNBNGlDLHdCQUFnQixDQUFDcGpDLE9BQWpCLENBQTBCNnRCLFFBQUQsSUFBYztBQUNuQyxjQUFHO0FBQ0NBLG9CQUFRO0FBQ1gsV0FGRCxDQUVDLE9BQU14ekIsQ0FBTixFQUFRO0FBQ0w2RCxtQkFBTyxDQUFDbU0sS0FBUixDQUFjaFEsQ0FBZDtBQUNIO0FBQ0osU0FORDtBQU9ILE9BVFMsRUFTUCxHQVRPLENBQVY7QUFVSCxLQVpEO0FBYUEyaEIsU0FBSyxDQUFDbmQsYUFBTixDQUFvQixjQUFwQixFQUFvQzBDLGdCQUFwQyxDQUFxRCxPQUFyRCxFQUE4RCxNQUFNO0FBQ2hFbUQsdURBQUcsQ0FBQ3VsQixRQUFKLENBQWFqTyxLQUFiLEVBQW9CLFNBQXBCO0FBQ0F2SyxnQkFBVSxDQUFDLE1BQU07QUFDYnVLLGFBQUssQ0FBQ3hiLE1BQU47QUFDQTRpQyx3QkFBZ0IsQ0FBQ3BqQyxPQUFqQixDQUEwQjZ0QixRQUFELElBQWM7QUFDbkMsY0FBRztBQUNDQSxvQkFBUTtBQUNYLFdBRkQsQ0FFQyxPQUFNeHpCLENBQU4sRUFBUTtBQUNMNkQsbUJBQU8sQ0FBQ21NLEtBQVIsQ0FBY2hRLENBQWQ7QUFDSDtBQUNKLFNBTkQ7QUFPSCxPQVRTLEVBU1AsR0FUTyxDQUFWO0FBVUgsS0FaRDtBQWFBcUsscURBQUcsQ0FBQ2tmLEtBQUosQ0FBVSxZQUFWLEVBQXdCTSxNQUF4QixDQUErQmxJLEtBQS9CO0FBQ0EsVUFBTW9uQixnQkFBZ0IsR0FBRyxFQUF6QjtBQUNBLFdBQU87QUFDSDV3QixXQUFLLEVBQUUsTUFBTTtBQUNUOU4seURBQUcsQ0FBQ3VsQixRQUFKLENBQWFqTyxLQUFiLEVBQW9CLFNBQXBCO0FBQ0F2SyxrQkFBVSxDQUFDLE1BQU07QUFDYnVLLGVBQUssQ0FBQ3hiLE1BQU47QUFDQTRpQywwQkFBZ0IsQ0FBQ3BqQyxPQUFqQixDQUEwQjZ0QixRQUFELElBQWM7QUFDbkMsZ0JBQUc7QUFDQ0Esc0JBQVE7QUFDWCxhQUZELENBRUMsT0FBTXh6QixDQUFOLEVBQVE7QUFDTDZELHFCQUFPLENBQUNtTSxLQUFSLENBQWNoUSxDQUFkO0FBQ0g7QUFDSixXQU5EO0FBT0gsU0FUUyxFQVNQLEdBVE8sQ0FBVjtBQVVILE9BYkU7QUFjSHdlLGFBQU8sRUFBR2dWLFFBQUQsSUFBYztBQUNuQnVWLHdCQUFnQixDQUFDdGpDLElBQWpCLENBQXNCK3RCLFFBQXRCO0FBQ0g7QUFoQkUsS0FBUDtBQWtCSDs7QUFFRCxTQUFPOVYsaUJBQVAsQ0FBeUI7QUFBQ0MsV0FBTyxFQUFFcXJCLFlBQVksR0FBRyxFQUF6QjtBQUE2QnByQixVQUFNLEVBQUVxckIsV0FBVyxHQUFHO0FBQW5ELEdBQXpCLEVBQWlGO0FBQzdFLFFBQUksQ0FBQ0QsWUFBRCxJQUFpQixDQUFDQyxXQUF0QixFQUFtQztBQUNuQyxRQUFJLENBQUNELFlBQVksQ0FBQy9wQyxNQUFkLElBQXdCLENBQUNncUMsV0FBVyxDQUFDaHFDLE1BQXpDLEVBQWlEO0FBQ2pELFFBQUlzcEMsV0FBVyxHQUFHeG9DLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMmhCLEtBQUYsSUFBVzNoQixDQUFDLENBQUM0aEIsS0FBYixJQUFzQixDQUFDNWhCLENBQUMsQ0FBQ3dvQyxnQkFBNUMsRUFBOEQsQ0FBOUQsQ0FBbEI7QUFDQSxRQUFJQyxZQUFZLEdBQUcxb0MsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUMwb0MsTUFBRixJQUFZMW9DLENBQUMsQ0FBQzZoQixxQkFBZCxJQUF1QzdoQixDQUFDLENBQUN3b0MsZ0JBQTVELEVBQThFLENBQTlFLENBQW5CO0FBQ0EsUUFBSUcsYUFBYSxHQUFHNW9DLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMG9DLE1BQUYsSUFBWTFvQyxDQUFDLENBQUM2aEIscUJBQWQsSUFBdUM3aEIsQ0FBQyxDQUFDNG9DLFNBQTVELEVBQXVFLENBQXZFLENBQXBCO0FBQ0EsVUFBTWpuQixLQUFLLEdBQUd0WCxpREFBRyxDQUFDek4sYUFBSixDQUFtQjtrREFDU21ELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNm9DLFFBQUYsSUFBYzdvQyxDQUFDLENBQUM4b0MsaUJBQW5DLEVBQXNELENBQXRELEVBQXlERCxRQUFTO2dFQUNwRE4sV0FBVyxDQUFDNW1CLEtBQU07eURBQ3pCNG1CLFdBQVcsQ0FBQzNtQixLQUFNO3FEQUN0QjZtQixZQUFZLENBQUNDLE1BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cURBbUJwQkQsWUFBWSxDQUFDcG1DLE1BQU8sSUFBR3NtQyxhQUFhLENBQUN0bUMsTUFBTzs7Ozs7MkJBdkIzRSxDQUFkOztBQThCQSxhQUFTNm1DLFdBQVQsQ0FBcUI5c0IsTUFBckIsRUFBNkI7QUFDekIsWUFBTW9OLFNBQVMsR0FBR25mLGlEQUFHLENBQUN6TixhQUFKLENBQW1CLHNCQUFuQixDQUFsQjs7QUFDQSxXQUFLLE1BQU0wYSxHQUFYLElBQWtCOEUsTUFBbEIsRUFBMEI7QUFDdEIsY0FBTXBNLEtBQUssR0FBRzNGLGlEQUFHLENBQUN6TixhQUFKLENBQW1COzRFQUMyQjBhLEdBQUcsQ0FBQzlVLElBQUosR0FBVzhVLEdBQUcsQ0FBQzlVLElBQWYsR0FBc0I4VSxHQUFHLENBQUM0RCxJQUFLOytFQUM1QjVELEdBQUcsQ0FBQ25XLE9BQVE7MkdBQ2dCbVcsR0FBRyxDQUFDdEgsS0FBSixHQUFZc0gsR0FBRyxDQUFDdEgsS0FBSixDQUFVN08sT0FBdEIsR0FBZ0MsRUFBRzt1Q0FIaEgsQ0FBZDtBQUtBcW9CLGlCQUFTLENBQUNLLE1BQVYsQ0FBaUI3WixLQUFqQjs7QUFDQSxZQUFJc0gsR0FBRyxDQUFDdEgsS0FBUixFQUFlO0FBQ1hBLGVBQUssQ0FBQ2lFLGdCQUFOLENBQXVCLEdBQXZCLEVBQTRCdE8sT0FBNUIsQ0FBb0MwbEIsRUFBRSxJQUFJQSxFQUFFLENBQUNua0IsZ0JBQUgsQ0FBb0IsT0FBcEIsRUFBOEJsSCxDQUFELElBQU87QUFDMUVBLGFBQUMsQ0FBQzRvQixjQUFGO0FBQ0F2dEIsaUJBQUssQ0FBQ2ljLEdBQU4sQ0FBVSxnQkFBVixFQUE2QixxQkFBb0JBLEdBQUcsQ0FBQzlVLElBQUosR0FBVzhVLEdBQUcsQ0FBQzlVLElBQWYsR0FBc0I4VSxHQUFHLENBQUM0RCxJQUFLLEdBQWhGLEVBQW9GNUQsR0FBRyxDQUFDdEgsS0FBeEY7QUFDSCxXQUh5QyxDQUExQztBQUlIO0FBQ0o7O0FBQ0QsYUFBT3daLFNBQVA7QUFDSDs7QUFFRCxVQUFNMmYsSUFBSSxHQUFHLENBQUNELFdBQVcsQ0FBQ0YsWUFBRCxDQUFaLEVBQTRCRSxXQUFXLENBQUNELFdBQUQsQ0FBdkMsQ0FBYjtBQUVBdG5CLFNBQUssQ0FBQzFOLGdCQUFOLENBQXVCLGVBQXZCLEVBQXdDdE8sT0FBeEMsQ0FBZ0QwbEIsRUFBRSxJQUFJQSxFQUFFLENBQUNua0IsZ0JBQUgsQ0FBb0IsT0FBcEIsRUFBOEJsSCxDQUFELElBQU87QUFDdEZBLE9BQUMsQ0FBQzRvQixjQUFGO0FBQ0EsWUFBTXJFLFFBQVEsR0FBRzVDLEtBQUssQ0FBQ25kLGFBQU4sQ0FBb0Isd0JBQXBCLENBQWpCO0FBQ0EsVUFBSStmLFFBQUosRUFBY2xhLGlEQUFHLENBQUN3bEIsV0FBSixDQUFnQnRMLFFBQWhCLEVBQTBCLFVBQTFCO0FBQ2RsYSx1REFBRyxDQUFDdWxCLFFBQUosQ0FBYTV2QixDQUFDLENBQUN3ZixNQUFmLEVBQXVCLFVBQXZCO0FBQ0EsWUFBTTRLLFFBQVEsR0FBR3pJLEtBQUssQ0FBQ25kLGFBQU4sQ0FBb0IsV0FBcEIsQ0FBakI7QUFDQTRsQixjQUFRLENBQUMxTCxTQUFULEdBQXFCLEVBQXJCO0FBQ0EwTCxjQUFRLENBQUNQLE1BQVQsQ0FBZ0JzZixJQUFJLENBQUM5K0IsaURBQUcsQ0FBQ3JFLEtBQUosQ0FBVWhHLENBQUMsQ0FBQ3dmLE1BQVosQ0FBRCxDQUFwQjtBQUNILEtBUnFELENBQXREO0FBVUFtQyxTQUFLLENBQUNuZCxhQUFOLENBQW9CLGdCQUFwQixFQUFzQzBDLGdCQUF0QyxDQUF1RCxPQUF2RCxFQUFnRSxNQUFNO0FBQ2xFbUQsdURBQUcsQ0FBQ3VsQixRQUFKLENBQWFqTyxLQUFiLEVBQW9CLFNBQXBCO0FBQ0F2SyxnQkFBVSxDQUFDLE1BQU07QUFBRXVLLGFBQUssQ0FBQ3hiLE1BQU47QUFBaUIsT0FBMUIsRUFBNEIsR0FBNUIsQ0FBVjtBQUNILEtBSEQ7QUFJQXdiLFNBQUssQ0FBQ25kLGFBQU4sQ0FBb0IsY0FBcEIsRUFBb0MwQyxnQkFBcEMsQ0FBcUQsT0FBckQsRUFBOEQsTUFBTTtBQUNoRW1ELHVEQUFHLENBQUN1bEIsUUFBSixDQUFhak8sS0FBYixFQUFvQixTQUFwQjtBQUNBdkssZ0JBQVUsQ0FBQyxNQUFNO0FBQUV1SyxhQUFLLENBQUN4YixNQUFOO0FBQWlCLE9BQTFCLEVBQTRCLEdBQTVCLENBQVY7QUFDSCxLQUhEO0FBSUFrRSxxREFBRyxDQUFDa2YsS0FBSixDQUFVLFlBQVYsRUFBd0JNLE1BQXhCLENBQStCbEksS0FBL0I7QUFDQSxRQUFJcW5CLFlBQVksQ0FBQy9wQyxNQUFqQixFQUF5QjBpQixLQUFLLENBQUNuZCxhQUFOLENBQW9CLGVBQXBCLEVBQXFDOFksS0FBckMsR0FBekIsS0FDS3FFLEtBQUssQ0FBQzFOLGdCQUFOLENBQXVCLGVBQXZCLEVBQXdDLENBQXhDLEVBQTJDcUosS0FBM0M7QUFDUjs7QUFFRCxTQUFPUSxrQkFBUCxDQUEwQnhTLE9BQU8sR0FBRyxFQUFwQyxFQUF3QztBQUNwQyxVQUFNODlCLFVBQVUsR0FBR3ZrQyx1REFBYyxDQUFDNmUsV0FBZixDQUEyQixNQUEzQixFQUFtQyxRQUFuQyxFQUE2QyxLQUE3QyxFQUFvRCxZQUFwRCxDQUFuQjtBQUNBLFVBQU0ybEIsZ0JBQWdCLEdBQUd4a0MsdURBQWMsQ0FBQzZlLFdBQWYsQ0FBMkIsT0FBM0IsRUFBb0MsVUFBcEMsQ0FBekI7QUFDQSxVQUFNNGxCLFdBQVcsR0FBR3prQyx1REFBYyxDQUFDbUgsaUJBQWYsQ0FBaUMsTUFBakMsQ0FBcEI7QUFDQSxVQUFNdTlCLFNBQVMsR0FBRzFrQyx1REFBYyxDQUFDNmUsV0FBZixDQUEyQixPQUEzQixDQUFsQjtBQUNBLFVBQU04bEIsTUFBTSxHQUFHM2tDLHVEQUFjLENBQUM2ZSxXQUFmLENBQTJCLE1BQTNCLEVBQW1DLFNBQW5DLENBQWY7QUFDQSxVQUFNK2xCLFNBQVMsR0FBRzVrQyx1REFBYyxDQUFDQyxJQUFmLENBQW9CckMsQ0FBQyxJQUFJQSxDQUFDLENBQUN5RyxZQUFGLElBQWtCekcsQ0FBQyxDQUFDeUcsWUFBRixDQUFld2dDLFVBQWYsSUFBNkIsS0FBeEUsQ0FBbEI7QUFDQSxVQUFNQyxjQUFjLEdBQUc5a0MsdURBQWMsQ0FBQzZlLFdBQWYsQ0FBMkIsY0FBM0IsRUFBMkMsT0FBM0MsQ0FBdkI7QUFDQSxRQUFJLENBQUMrbEIsU0FBRCxJQUFjLENBQUNMLFVBQWYsSUFBNkIsQ0FBQ0MsZ0JBQTlCLElBQWtELENBQUNDLFdBQW5ELElBQWtFLENBQUNDLFNBQW5FLElBQWdGLENBQUNDLE1BQWpGLElBQTJGLENBQUNHLGNBQWhHLEVBQWdIO0FBRWhILFVBQU07QUFDRkMsV0FBSyxHQUFHLGdHQUROO0FBRUYvd0MsaUJBQVcsR0FBRyxFQUZaO0FBR0ZDLGFBQU8sR0FBRyxFQUhSO0FBSUZDLFdBQUssR0FBRyxZQUpOO0FBS0Y4d0MsY0FBUSxHQUFJLElBQUdseEMsb0RBQVcsRUFMeEI7QUFNRjBKO0FBTkUsUUFPRmlKLE9BUEo7QUFRQSxVQUFNdytCLEVBQUUsR0FBR3B1QywyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBdEI7QUFDQSxVQUFNbXRDLGNBQWMsR0FBRyxDQUFDRCxFQUFFLENBQUMsS0FBRCxFQUFRO0FBQUM3YixTQUFHLEVBQUUyYjtBQUFOLEtBQVIsQ0FBSCxDQUF2QjtBQUNBLFFBQUkvd0MsV0FBSixFQUFpQmt4QyxjQUFjLENBQUN0a0MsSUFBZixDQUFvQnFrQyxFQUFFLENBQUMsR0FBRCxFQUFNLElBQU4sRUFBWUgsY0FBYyxDQUFDenpCLEtBQWYsQ0FBcUJyZCxXQUFyQixDQUFaLENBQXRCOztBQUNqQixTQUFLLElBQUlzWixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHclosT0FBTyxDQUFDbUcsTUFBNUIsRUFBb0NrVCxDQUFDLEVBQXJDLEVBQXlDO0FBQ3JDLFlBQU02M0IsS0FBSyxHQUFHbHhDLE9BQU8sQ0FBQ3FaLENBQUQsQ0FBckI7QUFDQSxZQUFNblosSUFBSSxHQUFHcXdDLGdCQUFnQixDQUFDVyxLQUFLLENBQUNoeEMsSUFBUCxDQUFoQixHQUErQnF3QyxnQkFBZ0IsQ0FBQ1csS0FBSyxDQUFDaHhDLElBQVAsQ0FBL0MsR0FBOERxd0MsZ0JBQWdCLENBQUNydkIsS0FBNUY7QUFDQSxZQUFNaXdCLE1BQU0sR0FBRzkzQixDQUFDLElBQUksQ0FBTCxHQUFTazNCLGdCQUFnQixDQUFDbHFCLFNBQTFCLEdBQXNDLEVBQXJEO0FBQ0E0cUIsb0JBQWMsQ0FBQ3RrQyxJQUFmLENBQW9CcWtDLEVBQUUsQ0FBQyxJQUFELEVBQU87QUFBQ2p0QyxpQkFBUyxFQUFHLEdBQUU3RCxJQUFLLElBQUdpeEMsTUFBTztBQUE5QixPQUFQLEVBQTBDRCxLQUFLLENBQUNqeEMsS0FBaEQsQ0FBdEI7QUFDQSxZQUFNaVYsSUFBSSxHQUFHODdCLEVBQUUsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhRSxLQUFLLENBQUMvd0MsS0FBTixDQUFZa0osR0FBWixDQUFnQnlQLENBQUMsSUFBSWs0QixFQUFFLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYUgsY0FBYyxDQUFDenpCLEtBQWYsQ0FBcUJ0RSxDQUFyQixDQUFiLENBQXZCLENBQWIsQ0FBZjtBQUNBbTRCLG9CQUFjLENBQUN0a0MsSUFBZixDQUFvQnVJLElBQXBCO0FBQ0g7O0FBQ0QsVUFBTWs4QixZQUFZLEdBQUcsWUFBVztBQUM1QixhQUFPSixFQUFFLENBQUNQLFNBQVMsQ0FBQ1ksS0FBWCxFQUFrQjtBQUFDQyxZQUFJLEVBQUUsQ0FBUDtBQUFVQyxjQUFNLEVBQUU7QUFBbEIsT0FBbEIsRUFDTFAsRUFBRSxDQUFDTixNQUFNLENBQUN2cEMsT0FBUixFQUFpQjtBQUFDcXFDLFdBQUcsRUFBRWQsTUFBTSxDQUFDZSxJQUFQLENBQVlDO0FBQWxCLE9BQWpCLEVBQXdDenhDLEtBQXhDLENBREcsRUFFTCt3QyxFQUFFLENBQUNSLFdBQUQsRUFBYTtBQUFDbHZCLFlBQUksRUFBRWt2QixXQUFXLENBQUNtQixLQUFaLENBQWtCQyxLQUF6QjtBQUFnQzkyQixhQUFLLEVBQUUwMUIsV0FBVyxDQUFDcUIsTUFBWixDQUFtQkMsUUFBMUQ7QUFBb0UvdEMsaUJBQVMsRUFBRXdzQyxnQkFBZ0IsQ0FBQ3dCO0FBQWhHLE9BQWIsRUFBb0hoQixRQUFwSCxDQUZHLENBQVQ7QUFJSCxLQUxEOztBQU9BLFVBQU1pQixZQUFZLEdBQUcsTUFBTTtBQUN2QixZQUFNanNCLE1BQU0sR0FBR2hhLHVEQUFjLENBQUNDLElBQWYsQ0FBb0JyQyxDQUFDLElBQUlBLENBQUMsQ0FBQzhRLFdBQUYsSUFBaUIsUUFBMUMsQ0FBZjtBQUNBLFlBQU13M0IsYUFBYSxHQUFHbG1DLHVEQUFjLENBQUM2ZSxXQUFmLENBQTJCLHdCQUEzQixLQUF3RDtBQUFDc25CLGNBQU0sRUFBRSxlQUFUO0FBQTBCQyw4QkFBc0IsRUFBRTtBQUFsRCxPQUE5RTs7QUFDQSxZQUFNQyxpQkFBaUIsR0FBSTV0QixLQUFELElBQVc7QUFDakNBLGFBQUssQ0FBQ3NMLGNBQU47QUFDQXRMLGFBQUssQ0FBQ3dMLGVBQU47QUFDQXNnQixrQkFBVSxDQUFDdm9CLEdBQVg7QUFDQW5sQixtREFBSSxDQUFDeXZDLE9BQUw7QUFDSCxPQUxEOztBQU1BLFlBQU1DLFdBQVcsR0FBR3ZzQixNQUFNLEdBQUdpckIsRUFBRSxDQUFDanJCLE1BQUQsRUFBUztBQUFDbVosZUFBTyxFQUFFa1Q7QUFBVixPQUFULEVBQXVDLDBCQUF2QyxDQUFMLEdBQTBFcEIsRUFBRSxDQUFDLEdBQUQsRUFBTTtBQUFDanRDLGlCQUFTLEVBQUcsR0FBRWt1QyxhQUFhLENBQUNDLE1BQU8sSUFBR0QsYUFBYSxDQUFDRSxzQkFBdUIsRUFBNUU7QUFBK0VqVCxlQUFPLEVBQUVrVDtBQUF4RixPQUFOLEVBQWtILDBCQUFsSCxDQUF0RztBQUNBLFlBQU1HLGFBQWEsR0FBR3ZCLEVBQUUsQ0FBQ1IsV0FBRCxFQUFhO0FBQUNsdkIsWUFBSSxFQUFFa3ZCLFdBQVcsQ0FBQ21CLEtBQVosQ0FBa0JDLEtBQXpCO0FBQWdDOTJCLGFBQUssRUFBRTAxQixXQUFXLENBQUNxQixNQUFaLENBQW1CQztBQUExRCxPQUFiLEVBQWtGLGdCQUFsRixFQUFvR1EsV0FBcEcsQ0FBeEI7QUFDQSxhQUFPdEIsRUFBRSxDQUFDUCxTQUFTLENBQUNZLEtBQVgsRUFBa0I7QUFBQ0MsWUFBSSxFQUFFLENBQVA7QUFBVUMsY0FBTSxFQUFFO0FBQWxCLE9BQWxCLEVBQXdDaG9DLE1BQU0sR0FBR0EsTUFBSCxHQUFZZ3BDLGFBQTFELENBQVQ7QUFDSCxLQVpEOztBQWNBLFdBQU9qQyxVQUFVLENBQUMzakMsSUFBWCxDQUFnQixVQUFTSCxLQUFULEVBQWdCO0FBQ25DLGFBQU93a0MsRUFBRSxDQUFDTCxTQUFELEVBQVlsdkMsTUFBTSxDQUFDc1osTUFBUCxDQUFjO0FBQy9CaFgsaUJBQVMsRUFBRXdzQyxnQkFBZ0IsQ0FBQzdmLFNBREc7QUFFL0JrZ0Isa0JBQVUsRUFBRSxJQUZtQjtBQUcvQjRCLGdCQUFRLEVBQUVsZCxDQUFDLElBQUlBLENBSGdCO0FBSS9CNVAsZUFBTyxFQUFFNFAsQ0FBQyxJQUFJQSxDQUppQjtBQUsvQjhiLG9CQUFZLEVBQUVBLFlBTGlCO0FBTS9CWSxvQkFBWSxFQUFFQSxZQU5pQjtBQU8vQnZsQyxnQkFBUSxFQUFFd2tDO0FBUHFCLE9BQWQsRUFRbEJ6a0MsS0FSa0IsQ0FBWixDQUFUO0FBU0gsS0FWTSxDQUFQO0FBV0g7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsU0FBTzhGLHFCQUFQLENBQTZCclMsS0FBN0IsRUFBb0NnSixPQUFwQyxFQUE2Q3VKLE9BQU8sR0FBRyxFQUF2RCxFQUEyRDtBQUN2RCxVQUFNaWdDLFlBQVksR0FBRzFtQyx1REFBYyxDQUFDNmUsV0FBZixDQUEyQixXQUEzQixFQUF3QyxhQUF4QyxDQUFyQjtBQUNBLFVBQU04bkIsUUFBUSxHQUFHM21DLHVEQUFjLENBQUNtSCxpQkFBZixDQUFpQyxVQUFqQyxDQUFqQjtBQUNBLFVBQU15L0IsaUJBQWlCLEdBQUc1bUMsdURBQWMsQ0FBQ21ILGlCQUFmLENBQWlDLGNBQWpDLENBQTFCO0FBQ0EsUUFBSSxDQUFDdS9CLFlBQUQsSUFBaUIsQ0FBQ0UsaUJBQWxCLElBQXVDLENBQUNELFFBQTVDLEVBQXNELE9BQU9ud0MsS0FBSyxDQUFDOFAsS0FBTixDQUFZcFMsS0FBWixFQUFtQmdKLE9BQW5CLENBQVA7O0FBRXRELFVBQU0ycEMsYUFBYSxHQUFHLE1BQU0sQ0FBRSxDQUE5Qjs7QUFDQSxVQUFNO0FBQUM3USxlQUFTLEdBQUc2USxhQUFiO0FBQTRCOVEsY0FBUSxHQUFHOFEsYUFBdkM7QUFBc0RoUixpQkFBVyxHQUFHLE1BQXBFO0FBQTRFcnZCLGdCQUFVLEdBQUcsUUFBekY7QUFBbUdzdkIsWUFBTSxHQUFHLEtBQTVHO0FBQW1IMS9CLFNBQUcsR0FBRzBDO0FBQXpILFFBQXNJMk4sT0FBNUk7QUFFQSxRQUFJLENBQUM2RixLQUFLLENBQUNDLE9BQU4sQ0FBY3JQLE9BQWQsQ0FBTCxFQUE2QkEsT0FBTyxHQUFHLENBQUNBLE9BQUQsQ0FBVjtBQUM3QkEsV0FBTyxHQUFHQSxPQUFPLENBQUNJLEdBQVIsQ0FBWWdRLENBQUMsSUFBSSxPQUFPQSxDQUFQLEtBQWMsUUFBZCxHQUF5QnpXLDJDQUFJLENBQUM0SyxLQUFMLENBQVcxSixhQUFYLENBQXlCNHVDLFFBQXpCLEVBQW1DLElBQW5DLEVBQXlDcjVCLENBQXpDLENBQXpCLEdBQXVFQSxDQUF4RixDQUFWO0FBQ0EsV0FBT281QixZQUFZLENBQUNJLFNBQWIsQ0FBdUJybUMsS0FBSyxJQUFJO0FBQ25DLGFBQU81SiwyQ0FBSSxDQUFDNEssS0FBTCxDQUFXMUosYUFBWCxDQUF5QjZ1QyxpQkFBekIsRUFBNENseEMsTUFBTSxDQUFDc1osTUFBUCxDQUFjO0FBQzdENjBCLGNBQU0sRUFBRTN2QyxLQURxRDtBQUU3RDZ5QyxXQUFHLEVBQUVqUixNQUZ3RDtBQUc3REQsbUJBQVcsRUFBRUEsV0FIZ0Q7QUFJN0RydkIsa0JBQVUsRUFBRUEsVUFKaUQ7QUFLN0R3dkIsaUJBQVMsRUFBRUEsU0FMa0Q7QUFNN0RELGdCQUFRLEVBQUVBO0FBTm1ELE9BQWQsRUFPaER0MUIsS0FQZ0QsQ0FBNUMsRUFPSXZELE9BUEosQ0FBUDtBQVFILEtBVE0sRUFTSjtBQUFDOHBDLGNBQVEsRUFBRTV3QztBQUFYLEtBVEksQ0FBUDtBQVVIOztBQUVELGFBQVcwSixRQUFYLEdBQXFCO0FBQ2pCLFdBQU9BLFFBQVA7QUFDSDs7QUE3ZHNCOztBQWdlM0IsU0FBU0EsUUFBVCxDQUFrQjlILFNBQWxCLEVBQTRCO0FBQ3hCLE1BQUcsQ0FBQ0EsU0FBSixFQUFjLE9BQU9BLFNBQVA7QUFDZCxTQUFPQSxTQUFTLENBQUMySSxLQUFWLENBQWdCLEdBQWhCLEVBQXFCeUQsTUFBckIsQ0FBNEJqSixDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDa1IsVUFBRixDQUFhLEtBQWIsQ0FBbEMsRUFBdUR4TCxJQUF2RCxDQUE0RCxHQUE1RCxDQUFQO0FBQ0g7O0FBRURySyxLQUFLLENBQUNxRyxTQUFOLEdBQWtCckcsS0FBSyxDQUFDNlIsY0FBTixDQUFxQjdSLEtBQUssQ0FBQ3FHLFNBQTNCLEVBQXNDLHVCQUF0QyxDQUFsQjtBQUVBcEosTUFBTSxDQUFDc0gsU0FBUCxDQUFpQjBFLGFBQWpCLENBQStCakosS0FBL0IsR0FBdUNBLEtBQXZDLEM7Ozs7Ozs7Ozs7OztBQzNlQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRWUsbUVBQUksTUFBTXl3QyxFQUFOLENBQVM7QUFFeEJ6dkMsYUFBVyxHQUFHO0FBQ1YsU0FBSzB2QyxjQUFMLEdBQXNCLEtBQXRCOztBQUNBLFNBQUtsbkMsY0FBTCxHQUFzQixDQUFDLE1BQU07QUFDekIsWUFBTW1uQyxHQUFHLEdBQUdDLFlBQVksQ0FBQ3htQyxJQUFiLENBQWtCLENBQUMsRUFBRCxFQUFLO0FBQUN5bUMsb0JBQVksRUFBRSxDQUFDdDdCLE1BQUQsRUFBUzRKLE9BQVQsRUFBa0J3eEIsR0FBbEIsS0FBMEJwN0IsTUFBTSxDQUFDNEosT0FBUCxHQUFpQnd4QjtBQUExRCxPQUFMLEVBQXFFLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBckUsQ0FBbEIsQ0FBWjtBQUNBLGFBQU9BLEdBQUcsQ0FBQ3ZwQyxDQUFKLENBQU15cEMsWUFBYjtBQUNBLGFBQU9GLEdBQUcsQ0FBQzc1QixDQUFKLENBQU0rNUIsWUFBYjs7QUFFQSxZQUFNQyxhQUFhLEdBQUdDLFNBQVMsSUFBSTtBQUMvQixZQUFJQSxTQUFTLENBQUNqbUMsTUFBVixJQUFvQmltQyxTQUFTLENBQUNyb0MsR0FBOUIsSUFBcUNxb0MsU0FBUyxDQUFDQyxLQUEvQyxJQUF3REQsU0FBUyxDQUFDaHhDLEdBQWxFLElBQXlFLENBQUNneEMsU0FBUyxDQUFDRSxJQUF4RixFQUE4RixPQUFPLElBQVA7QUFDOUYsWUFBSUYsU0FBUyxDQUFDRyxRQUFWLElBQXNCSCxTQUFTLENBQUNJLFFBQWhDLElBQTRDSixTQUFTLENBQUNLLFNBQTFELEVBQXFFLE9BQU8sSUFBUDtBQUNyRSxlQUFPLEtBQVA7QUFDSCxPQUpEOztBQU1BLFlBQU1DLE9BQU8sR0FBRyxDQUFDTixTQUFELEVBQVlPLFNBQVosS0FBMEI7QUFDdEMsWUFBSUMsR0FBRyxHQUFHLENBQUNELFNBQUQsR0FBYVAsU0FBUyxDQUFDbnNDLE9BQXZCLEdBQWlDbXNDLFNBQTNDO0FBQ0EsWUFBRyxDQUFDUSxHQUFKLEVBQVEsT0FBT1IsU0FBUDtBQUNSLFlBQUlRLEdBQUcsQ0FBQ3ptQyxNQUFKLElBQWN5bUMsR0FBRyxDQUFDN29DLEdBQWxCLElBQXlCNm9DLEdBQUcsQ0FBQ1AsS0FBN0IsSUFBc0NPLEdBQUcsQ0FBQ3h4QyxHQUExQyxJQUFpRCxDQUFDd3hDLEdBQUcsQ0FBQ04sSUFBMUQsRUFBZ0UsT0FBTyxJQUFQO0FBQ2hFLFlBQUksQ0FBQ00sR0FBRyxDQUFDTCxRQUFMLElBQWlCLENBQUNLLEdBQUcsQ0FBQ0osUUFBdEIsSUFBa0MsQ0FBQ0ksR0FBRyxDQUFDSCxTQUEzQyxFQUFxRCxPQUFPTCxTQUFQO0FBRXJELGNBQU1TLEtBQUssR0FBRyxJQUFJcnZDLEtBQUosQ0FBVW92QyxHQUFWLEVBQWU7QUFDekIzdkMsa0NBQXdCLEVBQUUsVUFBU1EsR0FBVCxFQUFjQyxJQUFkLEVBQW9CO0FBQzFDLGdCQUFJQSxJQUFJLEtBQUssVUFBVCxJQUF1QkEsSUFBSSxLQUFLLFVBQWhDLElBQThDQSxJQUFJLEtBQUssV0FBM0QsRUFBd0UsT0FBT0MsU0FBUDtBQUN4RSxtQkFBT3BELE1BQU0sQ0FBQzBDLHdCQUFQLENBQWdDUSxHQUFoQyxFQUFxQ0MsSUFBckMsQ0FBUDtBQUNILFdBSndCO0FBS3pCdEMsYUFBRyxFQUFFLFVBQVNxQyxHQUFULEVBQWNxdkMsSUFBZCxFQUFvQjtBQUNyQixnQkFBSUEsSUFBSSxJQUFJLFVBQVIsSUFBc0JydkMsR0FBRyxDQUFDOHVDLFFBQTlCLEVBQXdDLE9BQU8sTUFBTSwwRkFBYjtBQUN4QyxnQkFBSU8sSUFBSSxJQUFJLFVBQVIsSUFBc0JydkMsR0FBRyxDQUFDK3VDLFFBQTlCLEVBQXdDLE9BQU8sTUFBTSx1QkFBYjtBQUN4QyxnQkFBSU0sSUFBSSxJQUFJLFdBQVIsSUFBdUJydkMsR0FBRyxDQUFDZ3ZDLFNBQS9CLEVBQTBDLE9BQU8sTUFBTSxJQUFiO0FBQzFDLGdCQUFJSyxJQUFJLElBQUksV0FBUixJQUF1QnJ2QyxHQUFHLENBQUNzdkMsU0FBL0IsRUFBMEMsT0FBT0YsS0FBUDtBQUUxQyxtQkFBT3B2QyxHQUFHLENBQUNxdkMsSUFBRCxDQUFWO0FBQ0g7QUFad0IsU0FBZixDQUFkOztBQWVBLFlBQUcsQ0FBQ0gsU0FBSixFQUFjO0FBQ1YsaUJBQU9weUMsTUFBTSxDQUFDc1osTUFBUCxDQUFjLEVBQWQsRUFBa0J1NEIsU0FBbEIsRUFBNkI7QUFBQ25zQyxtQkFBTyxFQUFFNHNDO0FBQVYsV0FBN0IsQ0FBUDtBQUNIOztBQUVELGVBQU9BLEtBQVA7QUFDSCxPQTFCRDs7QUE0QkEsWUFBTS9uQyxJQUFJLEdBQUltRSxNQUFELElBQVk7QUFDckIsYUFBSyxNQUFNMkksQ0FBWCxJQUFnQm82QixHQUFHLENBQUM3NUIsQ0FBcEIsRUFBdUI7QUFDbkIsY0FBSTY1QixHQUFHLENBQUM3NUIsQ0FBSixDQUFNcEgsY0FBTixDQUFxQjZHLENBQXJCLENBQUosRUFBNkI7QUFDekIsa0JBQU1uUCxDQUFDLEdBQUd1cEMsR0FBRyxDQUFDNzVCLENBQUosQ0FBTVAsQ0FBTixFQUFTNEksT0FBbkI7QUFDQSxnQkFBSS9YLENBQUMsSUFBSUEsQ0FBQyxDQUFDNE8sVUFBUCxJQUFxQjVPLENBQUMsQ0FBQ3hDLE9BQXZCLElBQWtDZ0osTUFBTSxDQUFDeEcsQ0FBQyxDQUFDeEMsT0FBSCxDQUE1QyxFQUF5RCxPQUFPeXNDLE9BQU8sQ0FBQ2pxQyxDQUFDLENBQUN4QyxPQUFILEVBQVksSUFBWixDQUFkO0FBQ3pELGdCQUFJd0MsQ0FBQyxJQUFJd0csTUFBTSxDQUFDeEcsQ0FBRCxDQUFmLEVBQW9CLE9BQU9pcUMsT0FBTyxDQUFDanFDLENBQUQsRUFBSSxLQUFKLENBQWQ7QUFDdkI7QUFDSixTQVBvQixDQVFyQjs7O0FBQ0EsZUFBTyxJQUFQO0FBQ0gsT0FWRDs7QUFZQSxZQUFNZ0osT0FBTyxHQUFJeEMsTUFBRCxJQUFZO0FBQ3hCLGNBQU14QyxPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsYUFBSyxNQUFNbUwsQ0FBWCxJQUFnQm82QixHQUFHLENBQUM3NUIsQ0FBcEIsRUFBdUI7QUFDbkIsY0FBSTY1QixHQUFHLENBQUM3NUIsQ0FBSixDQUFNcEgsY0FBTixDQUFxQjZHLENBQXJCLENBQUosRUFBNkI7QUFDekIsa0JBQU1uUCxDQUFDLEdBQUd1cEMsR0FBRyxDQUFDNzVCLENBQUosQ0FBTVAsQ0FBTixFQUFTNEksT0FBbkI7QUFDQSxnQkFBSS9YLENBQUMsSUFBSUEsQ0FBQyxDQUFDNE8sVUFBUCxJQUFxQjVPLENBQUMsQ0FBQ3hDLE9BQXZCLElBQWtDZ0osTUFBTSxDQUFDeEcsQ0FBQyxDQUFDeEMsT0FBSCxDQUE1QyxFQUF5RHdHLE9BQU8sQ0FBQ2hCLElBQVIsQ0FBYWluQyxPQUFPLENBQUNqcUMsQ0FBQyxDQUFDeEMsT0FBSCxFQUFZLElBQVosQ0FBcEIsRUFBekQsS0FDSyxJQUFJd0MsQ0FBQyxJQUFJd0csTUFBTSxDQUFDeEcsQ0FBRCxDQUFmLEVBQW9CZ0UsT0FBTyxDQUFDaEIsSUFBUixDQUFhaW5DLE9BQU8sQ0FBQ2pxQyxDQUFELEVBQUksS0FBSixDQUFwQjtBQUM1QjtBQUNKOztBQUNELGVBQU9nRSxPQUFQO0FBQ0gsT0FWRDs7QUFZQSxZQUFNa0Ysc0JBQXNCLEdBQUlxaEMsU0FBRCxJQUFlbG9DLElBQUksQ0FBQzhMLE1BQU0sSUFBSW84QixTQUFTLENBQUM5YyxLQUFWLENBQWdCeHlCLElBQUksSUFBSWtULE1BQU0sQ0FBQ2xULElBQUQsQ0FBTixLQUFpQkMsU0FBekMsQ0FBWCxDQUFsRDs7QUFDQSxZQUFNbU8sZ0JBQWdCLEdBQUltaEMsVUFBRCxJQUFnQm5vQyxJQUFJLENBQUM4TCxNQUFNLElBQUlBLE1BQU0sQ0FBQ3pULFNBQVAsSUFBb0I4dkMsVUFBVSxDQUFDL2MsS0FBWCxDQUFpQmdkLFNBQVMsSUFBSXQ4QixNQUFNLENBQUN6VCxTQUFQLENBQWlCK3ZDLFNBQWpCLE1BQWdDdnZDLFNBQTlELENBQS9CLENBQTdDOztBQUNBLFlBQU1xTyxpQkFBaUIsR0FBSXVILFdBQUQsSUFBaUJ6TyxJQUFJLENBQUM4TCxNQUFNLElBQUlBLE1BQU0sQ0FBQzJDLFdBQVAsS0FBdUJBLFdBQWxDLENBQS9DOztBQUVBLGFBQU87QUFBQ3pPLFlBQUQ7QUFBTzJHLGVBQVA7QUFBZ0JFLDhCQUFoQjtBQUF3Q0csd0JBQXhDO0FBQTBERTtBQUExRCxPQUFQO0FBQ0gsS0FwRXFCLEdBQXRCOztBQXNFQSxTQUFLbWhDLFFBQUwsR0FBZ0I7QUFDWi9wQixXQUFLLEVBQUUsS0FBS3ZlLGNBQUwsQ0FBb0I4RyxzQkFBcEIsQ0FBMkMsQ0FBQyxXQUFELEVBQWMsZUFBZCxFQUErQixVQUEvQixFQUEyQyxlQUEzQyxFQUE0RCxjQUE1RCxDQUEzQyxDQURLO0FBRVo4YSxjQUFRLEVBQUUsS0FBSzVoQixjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDLENBQUMsYUFBRCxDQUEzQztBQUZFLEtBQWhCOztBQUlBLFNBQUtNLG1CQUFMLEdBQTJCak0sQ0FBQyxJQUFJQSxDQUFDLENBQUN6RixNQUFNLENBQUNpQixJQUFQLENBQVl3RSxDQUFaLEVBQWU4RSxJQUFmLENBQW9CMEosQ0FBQyxJQUFJQSxDQUFDLENBQUMwQyxVQUFGLENBQWEseUJBQWIsQ0FBekIsQ0FBRCxDQUFqQzs7QUFDQTVZLFVBQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQnduQyxFQUEvQixHQUFvQyxJQUFwQztBQUNIOztBQUVEOXVCLFlBQVUsR0FBRyxDQUVaOztBQUVEb3dCLFNBQU8sR0FBRztBQUFDLFNBQUtDLGFBQUwsQ0FBbUJDLHdDQUFuQixDQUE0RCxrQkFBNUQ7QUFBaUY7O0FBQzVGQyxVQUFRLEdBQUc7QUFBQyxTQUFLQyxZQUFMLENBQWtCQyxVQUFsQixDQUE2QixtQkFBN0I7QUFBbUQ7O0FBRS9EdEMsU0FBTyxHQUFHO0FBQUMsU0FBS2tDLGFBQUwsQ0FBbUJDLHdDQUFuQixDQUE0RCxTQUE1RDtBQUF3RTs7QUFDbkZJLFVBQVEsR0FBRztBQUFDLFNBQUtGLFlBQUwsQ0FBa0JDLFVBQWxCLENBQTZCLG9CQUE3QjtBQUFvRDs7QUFFaEVFLFFBQU0sR0FBRztBQUFDLFNBQUtOLGFBQUwsQ0FBbUJDLHdDQUFuQixDQUE0RCxTQUE1RDtBQUF3RTs7QUFDbEZNLFNBQU8sR0FBRztBQUFDLFNBQUtKLFlBQUwsQ0FBa0JDLFVBQWxCLENBQTZCLG9CQUE3QjtBQUFvRDtBQUUvRDs7Ozs7QUFHQSxNQUFJcnFCLEtBQUosR0FBWTtBQUFDLFdBQU8sS0FBSytwQixRQUFMLENBQWMvcEIsS0FBckI7QUFBNEI7QUFDekM7Ozs7O0FBR0EsTUFBSTljLEtBQUosR0FBWTtBQUFDLFdBQU8sS0FBSzZtQyxRQUFMLENBQWMvcEIsS0FBckI7QUFBNEI7QUFDekM7Ozs7O0FBR0EsTUFBSXFELFFBQUosR0FBZTtBQUFDLFdBQU8sS0FBSzBtQixRQUFMLENBQWMxbUIsUUFBckI7QUFBK0I7QUFDL0M7Ozs7O0FBR0EsTUFBSXJkLFFBQUosR0FBZTtBQUFDLFdBQU8sS0FBSytqQyxRQUFMLENBQWMxbUIsUUFBckI7QUFBK0I7QUFDL0M7Ozs7O0FBR0EsTUFBSW9uQixjQUFKLEdBQXFCO0FBQUMsV0FBTyxLQUFLVixRQUFMLENBQWMvcEIsS0FBZCxDQUFvQjdjLFNBQTNCO0FBQXNDO0FBQzVEOzs7OztBQUdBLE1BQUk4QyxjQUFKLEdBQXFCO0FBQUMsV0FBTyxLQUFLOGpDLFFBQUwsQ0FBYy9wQixLQUFkLENBQW9CN2MsU0FBM0I7QUFBc0M7O0FBRTVELE1BQUl1bkMsYUFBSixHQUFvQjtBQUFDLFdBQU8sS0FBS2pwQyxjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDLENBQUMsd0JBQUQsQ0FBM0MsS0FBMEU7QUFBQ3EvQixZQUFNLEVBQUUsZUFBVDtBQUEwQkMsNEJBQXNCLEVBQUU7QUFBbEQsS0FBakY7QUFBcUs7O0FBQzFMLE1BQUk4QyxrQkFBSixHQUF5QjtBQUFDLFdBQU8sS0FBS2xwQyxjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDLENBQUMsZUFBRCxDQUEzQyxDQUFQO0FBQXNFOztBQUNoRyxNQUFJcWlDLGNBQUosR0FBcUI7QUFBQyxXQUFPLEtBQUtucEMsY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLFNBQUQsRUFBWSxlQUFaLENBQTNDLENBQVA7QUFBaUY7O0FBQ3ZHLE1BQUltVSxZQUFKLEdBQW1CO0FBQ3JCLFVBQU0yRCxhQUFhLEdBQUcxakIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM2ZixPQUFGLElBQWE3ZixDQUFDLENBQUNpdUMsaUJBQWxDLEVBQXFELENBQXJELENBQXRCO0FBQ00sVUFBTXRxQixNQUFNLEdBQUc1akIsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNrdUMsV0FBRixJQUFpQmx1QyxDQUFDLENBQUN1a0IsUUFBdEMsRUFBZ0QsQ0FBaEQsQ0FBZjtBQUNBLFVBQU1YLElBQUksR0FBRzdqQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2tnQixhQUFyQixFQUFvQyxDQUFwQyxDQUFiO0FBQ0EsV0FBTzNsQixNQUFNLENBQUNzWixNQUFQLENBQWMsRUFBZCxFQUFrQjRQLGFBQWxCLEVBQWlDRSxNQUFqQyxFQUF5Q0MsSUFBekMsQ0FBUDtBQUNOOztBQUVFLE1BQUl1cUIsdUJBQUosR0FBOEI7QUFBQyxXQUFPLEtBQUt0cEMsY0FBTCxDQUFvQkMsSUFBcEIsQ0FBeUJyQyxDQUFDLElBQUlBLENBQUMsQ0FBQ3lHLFlBQUYsSUFBa0J6RyxDQUFDLENBQUN5RyxZQUFGLENBQWU2QixjQUFmLENBQThCLGdCQUE5QixDQUFoRCxDQUFQO0FBQXlHOztBQUN4SSxNQUFJbUksZ0JBQUosR0FBdUI7QUFBQyxXQUFPLEtBQUtyTyxjQUFMLENBQW9CQyxJQUFwQixDQUF5QnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDeEMsT0FBRixJQUFhd0MsQ0FBQyxDQUFDeEMsT0FBRixDQUFVc1QsV0FBdkIsSUFBc0M5USxDQUFDLENBQUN4QyxPQUFGLENBQVVzVCxXQUFWLElBQXlCLFNBQTdGLENBQVA7QUFBZ0g7O0FBQ3hJLE1BQUloVSxhQUFKLEdBQW9CO0FBQUMsV0FBTyxLQUFLc0YsY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLFlBQUQsQ0FBM0MsQ0FBUDtBQUFtRTs7QUFDeEYsTUFBSXlpQyxjQUFKLEdBQXFCO0FBQUMsV0FBTyxLQUFLdnBDLGNBQUwsQ0FBb0JtSCxpQkFBcEIsQ0FBc0MsU0FBdEMsQ0FBUDtBQUF5RDs7QUFDL0UsTUFBSTZlLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtobUIsY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLFVBQUQsQ0FBM0MsQ0FBUDtBQUFpRTs7QUFDckYsTUFBSTBoQyxhQUFKLEdBQW9CO0FBQUMsV0FBTyxLQUFLeG9DLGNBQUwsQ0FBb0I4RyxzQkFBcEIsQ0FBMkMsQ0FBQyxjQUFELENBQTNDLENBQVA7QUFBcUU7O0FBQzFGLE1BQUk2aEMsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBSzNvQyxjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDLENBQUMsWUFBRCxDQUEzQyxDQUFQO0FBQW1FOztBQUN2RixNQUFJMGlDLFFBQUosR0FBZTtBQUFDLFdBQU8sS0FBS3hwQyxjQUFMLENBQW9CQyxJQUFwQixDQUF5QnJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDNnJDLElBQUYsSUFBVTdyQyxDQUFDLENBQUM4ckMsSUFBWixJQUFvQixDQUFDOXJDLENBQUMsQ0FBQ1IsTUFBdkIsSUFBaUMsQ0FBQ1EsQ0FBQyxDQUFDK3JDLE1BQXBDLElBQThDLENBQUMvckMsQ0FBQyxDQUFDUixNQUFqRCxJQUEyRCxDQUFDUSxDQUFDLENBQUNnc0MsbUJBQTlELElBQXFGLENBQUNoc0MsQ0FBQyxDQUFDaXNDLE9BQXRILENBQVA7QUFBdUk7O0FBQ3ZKLE1BQUlDLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUs5cEMsY0FBTCxDQUFvQkMsSUFBcEIsQ0FBeUJyQyxDQUFDLElBQUlBLENBQUMsQ0FBQzRhLFFBQUYsSUFBYyxXQUFXdmIsSUFBWCxDQUFnQlcsQ0FBQyxDQUFDNGEsUUFBRixFQUFoQixDQUE1QyxDQUFQO0FBQW1GOztBQUN2RyxNQUFJdXhCLFVBQUosR0FBaUI7QUFBQyxXQUFPLEtBQUsvcEMsY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLFVBQUQsQ0FBM0MsQ0FBUDtBQUFpRTs7QUFDbkYsTUFBSWtqQyxTQUFKLEdBQWdCO0FBQUMsV0FBTyxLQUFLaHFDLGNBQUwsQ0FBb0I4RyxzQkFBcEIsQ0FBMkMsQ0FBQyxnQkFBRCxDQUEzQyxDQUFQO0FBQXVFOztBQUN4RixNQUFJbWpDLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtqcUMsY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLFlBQUQsQ0FBM0MsQ0FBUDtBQUFtRTs7QUFDdkYsTUFBSW9qQyxjQUFKLEdBQXFCO0FBQUMsV0FBTyxLQUFLbHFDLGNBQUwsQ0FBb0I4RyxzQkFBcEIsQ0FBMkMsQ0FBQyxvQkFBRCxDQUEzQyxDQUFQO0FBQTJFOztBQUNqRyxNQUFJcWpDLHFCQUFKLEdBQTRCO0FBQUMsV0FBTyxLQUFLbnFDLGNBQUwsQ0FBb0I4RyxzQkFBcEIsQ0FBMkMsQ0FBQyxzQkFBRCxDQUEzQyxDQUFQO0FBQTZFOztBQUUxR3NqQyxRQUFNLENBQUNDLE1BQUQsRUFBUztBQUNYLFVBQU1DLE1BQU0sR0FBRyxLQUFLTixTQUFMLENBQWVudUMsY0FBZixHQUFnQ3ZILEVBQS9DO0FBQ0EsUUFBSWcyQyxNQUFNLElBQUlELE1BQWQsRUFBc0I7QUFDdEIsVUFBTUUsZ0JBQWdCLEdBQUcsS0FBS04sWUFBTCxDQUFrQk8sZUFBbEIsQ0FBa0NILE1BQWxDLENBQXpCO0FBQ0EsUUFBSUUsZ0JBQUosRUFBc0IsT0FBTyxLQUFLSixxQkFBTCxDQUEyQk0sb0JBQTNCLENBQWdERixnQkFBaEQsQ0FBUDtBQUN0QixTQUFLTCxjQUFMLENBQW9CUSxrQkFBcEIsQ0FBdUNKLE1BQXZDLEVBQStDRCxNQUEvQztBQUNIOztBQUVETSxlQUFhLENBQUNqMkMsR0FBRCxFQUFNO0FBQ2YsV0FBT2dCLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWXRDLGtEQUFaLEVBQXNCdytCLE1BQXRCLENBQTZCLENBQUNILEdBQUQsRUFBTXQ4QixHQUFOLEtBQWM7QUFDOUMsWUFBTXVsQixPQUFPLEdBQUd0bkIsa0RBQVEsQ0FBQytCLEdBQUQsQ0FBeEI7O0FBQ0EsVUFBSXVsQixPQUFPLENBQUNqbkIsR0FBUixLQUFnQkEsR0FBaEIsSUFBdUJpbkIsT0FBTyxDQUFDbm5CLFdBQS9CLElBQThDLENBQUNtbkIsT0FBTyxDQUFDbG5CLE1BQTNELEVBQW1FO0FBQy9Ea25CLGVBQU8sQ0FBQ2xlLElBQVIsR0FBZXJILEdBQWY7QUFDQXM4QixXQUFHLENBQUM5eEIsSUFBSixDQUFTK2EsT0FBVDtBQUNIOztBQUFDLGFBQU8rVyxHQUFQO0FBQ0wsS0FOTSxFQU1KLEVBTkksQ0FBUDtBQU9IOztBQWpLdUIsQ0FBYixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ0hBO0FBQUE7QUFBQTtBQUVBLE1BQU0zdkIsS0FBSyxHQUFJOzs7Ozs7Ozs7Ozs7Q0FBZjtBQWNlLG1FQUFJLE1BQU02bkMsU0FBTixDQUFnQjtBQUMvQm5zQyxPQUFLLEdBQUc7QUFDSitHLHFEQUFHLENBQUNDLFFBQUosQ0FBYSxXQUFiLEVBQTBCMUMsS0FBMUI7QUFDSDs7QUFFRHdJLE1BQUksR0FBRztBQUNIL0YscURBQUcsQ0FBQ0ksV0FBSixDQUFnQixXQUFoQjtBQUNIOztBQVA4QixDQUFwQixFQUFmLEU7Ozs7Ozs7Ozs7OztBQ2hCQTtBQUFBLE1BQU11aEMsR0FBRyxHQUFHQyxZQUFZLENBQUN4bUMsSUFBYixDQUFrQixDQUFDLEVBQUQsRUFBSztBQUFDeW1DLGNBQVksRUFBRSxDQUFDdDdCLE1BQUQsRUFBUzRKLE9BQVQsRUFBa0J3eEIsR0FBbEIsS0FBMEJwN0IsTUFBTSxDQUFDNEosT0FBUCxHQUFpQnd4QjtBQUExRCxDQUFMLEVBQXFFLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBckUsQ0FBbEIsQ0FBWjtBQUNBLE9BQU9BLEdBQUcsQ0FBQ3ZwQyxDQUFKLENBQU15cEMsWUFBYjtBQUNBLE9BQU9GLEdBQUcsQ0FBQzc1QixDQUFKLENBQU0rNUIsWUFBYjs7QUFDQSxNQUFNcG5DLElBQUksR0FBSW1FLE1BQUQsSUFBWTtBQUNyQixPQUFLLE1BQU0ySSxDQUFYLElBQWdCbzZCLEdBQUcsQ0FBQzc1QixDQUFwQixFQUF1QjtBQUNuQixRQUFJNjVCLEdBQUcsQ0FBQzc1QixDQUFKLENBQU1wSCxjQUFOLENBQXFCNkcsQ0FBckIsQ0FBSixFQUE2QjtBQUN6QixZQUFNblAsQ0FBQyxHQUFHdXBDLEdBQUcsQ0FBQzc1QixDQUFKLENBQU1QLENBQU4sRUFBUzRJLE9BQW5CO0FBQ0EsVUFBSS9YLENBQUMsSUFBSUEsQ0FBQyxDQUFDNE8sVUFBUCxJQUFxQjVPLENBQUMsQ0FBQ3hDLE9BQXZCLElBQWtDZ0osTUFBTSxDQUFDeEcsQ0FBQyxDQUFDeEMsT0FBSCxDQUE1QyxFQUF5RCxPQUFPd0MsQ0FBQyxDQUFDeEMsT0FBVDtBQUN6RCxVQUFJd0MsQ0FBQyxJQUFJd0csTUFBTSxDQUFDeEcsQ0FBRCxDQUFmLEVBQW9CLE9BQU9BLENBQVA7QUFDdkI7QUFDSixHQVBvQixDQVFyQjs7O0FBQ0EsU0FBTyxJQUFQO0FBQ0gsQ0FWRDs7QUFZQSxNQUFNZ0osT0FBTyxHQUFJeEMsTUFBRCxJQUFZO0FBQ3hCLFFBQU14QyxPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsT0FBSyxNQUFNbUwsQ0FBWCxJQUFnQm82QixHQUFHLENBQUM3NUIsQ0FBcEIsRUFBdUI7QUFDbkIsUUFBSTY1QixHQUFHLENBQUM3NUIsQ0FBSixDQUFNcEgsY0FBTixDQUFxQjZHLENBQXJCLENBQUosRUFBNkI7QUFDekIsWUFBTW5QLENBQUMsR0FBR3VwQyxHQUFHLENBQUM3NUIsQ0FBSixDQUFNUCxDQUFOLEVBQVM0SSxPQUFuQjtBQUNBLFVBQUkvWCxDQUFDLElBQUlBLENBQUMsQ0FBQzRPLFVBQVAsSUFBcUI1TyxDQUFDLENBQUN4QyxPQUF2QixJQUFrQ2dKLE1BQU0sQ0FBQ3hHLENBQUMsQ0FBQ3hDLE9BQUgsQ0FBNUMsRUFBeUR3RyxPQUFPLENBQUNoQixJQUFSLENBQWFoRCxDQUFDLENBQUN4QyxPQUFmLEVBQXpELEtBQ0ssSUFBSXdDLENBQUMsSUFBSXdHLE1BQU0sQ0FBQ3hHLENBQUQsQ0FBZixFQUFvQmdFLE9BQU8sQ0FBQ2hCLElBQVIsQ0FBYWhELENBQWI7QUFDNUI7QUFDSjs7QUFDRCxTQUFPZ0UsT0FBUDtBQUNILENBVkQ7O0FBWUEsTUFBTWlkLFdBQVcsR0FBRyxDQUFDLEdBQUdzcEIsU0FBSixLQUFrQmxvQyxJQUFJLENBQUM4TCxNQUFNLElBQUlvOEIsU0FBUyxDQUFDOWMsS0FBVixDQUFnQnh5QixJQUFJLElBQUlrVCxNQUFNLENBQUNsVCxJQUFELENBQU4sS0FBaUJDLFNBQXpDLENBQVgsQ0FBMUM7O0FBQ0EsTUFBTW1PLGdCQUFnQixHQUFHLENBQUMsR0FBR21oQyxVQUFKLEtBQW1Cbm9DLElBQUksQ0FBQzhMLE1BQU0sSUFBSUEsTUFBTSxDQUFDelQsU0FBUCxJQUFvQjh2QyxVQUFVLENBQUMvYyxLQUFYLENBQWlCZ2QsU0FBUyxJQUFJdDhCLE1BQU0sQ0FBQ3pULFNBQVAsQ0FBaUIrdkMsU0FBakIsTUFBZ0N2dkMsU0FBOUQsQ0FBL0IsQ0FBaEQ7O0FBQ0EsTUFBTXFPLGlCQUFpQixHQUFJdUgsV0FBRCxJQUFpQnpPLElBQUksQ0FBQzhMLE1BQU0sSUFBSUEsTUFBTSxDQUFDMkMsV0FBUCxLQUF1QkEsV0FBbEMsQ0FBL0M7O0FBRUEsSUFBSXE1QixHQUFHLEdBQUk7QUFBQzluQyxNQUFEO0FBQU8yRyxTQUFQO0FBQWdCaVksYUFBaEI7QUFBNkI1WCxrQkFBN0I7QUFBK0NFO0FBQS9DLENBQVg7QUFDZTRnQyxrRUFBZjtBQUVBdDBDLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUIwRSxhQUFqQixDQUErQk8sY0FBL0IsR0FBZ0QrbkMsR0FBaEQsQzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xDZSxNQUFNbHRCLGFBQU4sU0FBNEJwWixLQUFLLENBQUNDLFNBQWxDLENBQTRDO0FBQ3ZEcEIsUUFBTSxHQUFFO0FBQ0osVUFBTUcsS0FBSyxHQUFHLEtBQUtBLEtBQW5CO0FBQ0Esd0JBQ0k7QUFBSyxhQUFPLEVBQUM7QUFBYixPQUFrQ0EsS0FBbEM7QUFBeUMsWUFBTSxFQUFDLE1BQWhEO0FBQXVELFdBQUssRUFBRUEsS0FBSyxDQUFDOFU7QUFBcEUscUJBQ0ksK0NBQ0k7QUFBZ0IsUUFBRSxFQUFDLFdBQW5CO0FBQStCLFFBQUUsRUFBRSxJQUFuQztBQUF5QyxRQUFFLEVBQUUsQ0FBQyxLQUE5QztBQUFxRCxRQUFFLEVBQUUsSUFBekQ7QUFBK0QsUUFBRSxFQUFFLENBQUMsTUFBcEU7QUFBNEUsdUJBQWlCLEVBQUMseUJBQTlGO0FBQXdILG1CQUFhLEVBQUM7QUFBdEksb0JBQ0k7QUFBTSxZQUFNLEVBQUUsQ0FBZDtBQUFpQixlQUFTLEVBQUM7QUFBM0IsTUFESixlQUVJO0FBQU0sWUFBTSxFQUFFLENBQWQ7QUFBaUIsZUFBUyxFQUFDO0FBQTNCLE1BRkosQ0FESixlQUtJO0FBQWdCLFFBQUUsRUFBQyxXQUFuQjtBQUErQixRQUFFLEVBQUUsS0FBbkM7QUFBMEMsUUFBRSxFQUFFLENBQUMsS0FBL0M7QUFBc0QsUUFBRSxFQUFFLEtBQTFEO0FBQWlFLFFBQUUsRUFBRSxDQUFDLE1BQXRFO0FBQThFLHVCQUFpQixFQUFDLHlCQUFoRztBQUEwSCxtQkFBYSxFQUFDO0FBQXhJLG9CQUNJO0FBQU0sWUFBTSxFQUFFLENBQWQ7QUFBaUIsZUFBUyxFQUFDO0FBQTNCLE1BREosZUFFSTtBQUFNLFlBQU0sRUFBRSxDQUFkO0FBQWlCLGVBQVMsRUFBQztBQUEzQixNQUZKLENBTEosZUFTSTtBQUFnQixRQUFFLEVBQUMsV0FBbkI7QUFBK0IsUUFBRSxFQUFFLEVBQW5DO0FBQXVDLFFBQUUsRUFBRSxDQUFDLEdBQTVDO0FBQWlELFFBQUUsRUFBRSxFQUFyRDtBQUF5RCxRQUFFLEVBQUUsQ0FBQyxNQUE5RDtBQUFzRSx1QkFBaUIsRUFBQyx5QkFBeEY7QUFBa0gsbUJBQWEsRUFBQztBQUFoSSxvQkFDSTtBQUFNLFlBQU0sRUFBRSxDQUFkO0FBQWlCLGVBQVMsRUFBQztBQUEzQixNQURKLGVBRUk7QUFBTSxZQUFNLEVBQUUsQ0FBZDtBQUFpQixlQUFTLEVBQUM7QUFBM0IsTUFGSixDQVRKLENBREosZUFlSTtBQUFNLFVBQUksRUFBQyxNQUFYO0FBQWtCLE9BQUMsRUFBQztBQUFwQixNQWZKLGVBZ0JJO0FBQU0sT0FBQyxFQUFDLDBGQUFSO0FBQW1HLFVBQUksRUFBQztBQUF4RyxNQWhCSixlQWlCSTtBQUFNLE9BQUMsRUFBQywyRkFBUjtBQUFvRyxVQUFJLEVBQUM7QUFBekcsTUFqQkosZUFrQkk7QUFBTSxPQUFDLEVBQUMsdWxCQUFSO0FBQWdtQixVQUFJLEVBQUM7QUFBcm1CLE1BbEJKLENBREo7QUFzQkg7O0FBekJzRCxDOzs7Ozs7Ozs7Ozs7Ozs7O0FDQTVDLE1BQU15VCxjQUFOLFNBQTZCdm5CLEtBQUssQ0FBQ0MsU0FBbkMsQ0FBNkM7QUFDeERwQixRQUFNLEdBQUU7QUFDSixVQUFNRyxLQUFLLEdBQUcsS0FBS0EsS0FBbkI7QUFFQSx3QkFDSTtBQUFLLGFBQU8sRUFBQztBQUFiLE9BQWlDQSxLQUFLLENBQUM2Z0IsR0FBdkM7QUFBNEMsWUFBTSxFQUFDO0FBQW5ELHFCQUNJO0FBQU0sT0FBQyxFQUFDLDhEQUFSO0FBQXVFLFVBQUksRUFBQztBQUE1RSxNQURKLGVBRUk7QUFBTSxPQUFDLEVBQUMsdUpBQVI7QUFBZ0ssVUFBSSxFQUFDO0FBQXJLLE1BRkosQ0FESjtBQU1IOztBQVZ1RCxDOzs7Ozs7Ozs7Ozs7Ozs7O0FDQTdDLE1BQU0ySCxNQUFOLFNBQXFCeG5CLEtBQUssQ0FBQ0MsU0FBM0IsQ0FBcUM7QUFDaERwQixRQUFNLEdBQUU7QUFDSix3QkFBUTtBQUFLLFdBQUssRUFBQyw0QkFBWDtBQUF3QyxhQUFPLEVBQUM7QUFBaEQsT0FBaUUsS0FBS0csS0FBTCxDQUFXNmdCLEdBQTVFO0FBQWlGLFlBQU0sRUFBQztBQUF4RixxQkFDQTtBQUNJLFVBQUksRUFBQyxTQURUO0FBRUksT0FBQyxFQUFDO0FBRk4sTUFEQSxlQUtBO0FBQ0ksVUFBSSxFQUFDLFNBRFQ7QUFFSSxPQUFDLEVBQUM7QUFGTixNQUxBLGVBU0E7QUFDSSxVQUFJLEVBQUMsU0FEVDtBQUVJLE9BQUMsRUFBQztBQUZOLE1BVEEsZUFhQTtBQUFRLFFBQUUsRUFBQyxJQUFYO0FBQWdCLFFBQUUsRUFBQyxJQUFuQjtBQUF3QixPQUFDLEVBQUMsR0FBMUI7QUFBOEIsVUFBSSxFQUFDO0FBQW5DLE1BYkEsZUFjQTtBQUFRLFFBQUUsRUFBQyxJQUFYO0FBQWdCLFFBQUUsRUFBQyxJQUFuQjtBQUF3QixPQUFDLEVBQUMsR0FBMUI7QUFBOEIsVUFBSSxFQUFDO0FBQW5DLE1BZEEsZUFlQTtBQUFRLFFBQUUsRUFBQyxJQUFYO0FBQWdCLFFBQUUsRUFBQyxJQUFuQjtBQUF3QixPQUFDLEVBQUMsR0FBMUI7QUFBOEIsVUFBSSxFQUFDO0FBQW5DLE1BZkEsZUFnQkE7QUFBUSxRQUFFLEVBQUMsSUFBWDtBQUFnQixRQUFFLEVBQUMsSUFBbkI7QUFBd0IsT0FBQyxFQUFDLEdBQTFCO0FBQThCLFVBQUksRUFBQztBQUFuQyxNQWhCQSxlQWlCQTtBQUFNLE9BQUMsRUFBQztBQUFSLE1BakJBLGVBa0JBO0FBQ0ksVUFBSSxFQUFDLFNBRFQ7QUFFSSxPQUFDLEVBQUM7QUFGTixNQWxCQSxlQXNCQTtBQUNJLFVBQUksRUFBQyxTQURUO0FBRUksT0FBQyxFQUFDO0FBRk4sTUF0QkEsZUEwQkE7QUFBRyxVQUFJLEVBQUM7QUFBUixvQkFDSTtBQUFNLE9BQUMsRUFBQztBQUFSLE1BREosZUFFSTtBQUFNLE9BQUMsRUFBQztBQUFSLE1BRkosQ0ExQkEsQ0FBUjtBQWdDSDs7QUFsQytDLEM7Ozs7Ozs7Ozs7OztBQ0FwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7OztBQUdBLE1BQU03ZixLQUFLLEdBQUc1SyxtREFBSSxDQUFDNEssS0FBbkI7QUFFQSxJQUFJb3BDLGFBQWEsR0FBRzN2QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzJ2QyxlQUFyQixFQUFzQyxDQUF0QyxDQUFwQjtBQUNBLElBQUlDLFdBQVcsR0FBRzd2QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzZ2QyxhQUFyQixFQUFvQyxDQUFwQyxDQUFsQjtBQUNBLElBQUlDLFVBQVUsR0FBRy92QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQytpQixNQUFyQixFQUE2QixDQUE3QixDQUFqQjtBQUNBLElBQUlndEIsZ0JBQWdCLEdBQUdod0MsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNnd0Msc0JBQXJCLEVBQTZDLENBQTdDLENBQXZCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHbHdDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVbzFCLFNBQTFDLEVBQXFELENBQXJELEVBQXdEcDFCLE9BQTVFO0FBQ0EsTUFBTUcsa0JBQWtCLEdBQUdMLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVaXdDLGdCQUExQyxFQUE0RCxDQUE1RCxFQUErRGp3QyxPQUExRjtBQUNBLE1BQU1rd0MsYUFBYSxHQUFHcHdDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVbXdDLFdBQTFDLEVBQXVELENBQXZELEVBQTBEbndDLE9BQWhGO0FBQ0EsTUFBTVEsVUFBVSxHQUFHVixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ0MsT0FBRixJQUFhRCxDQUFDLENBQUNDLE9BQUYsQ0FBVVMsY0FBMUMsRUFBMEQsQ0FBMUQsRUFBNkRULE9BQWhGO0FBRWUsTUFBTTBrQyxnQkFBTixTQUErQnIrQixLQUFLLENBQUNDLFNBQXJDLENBQStDO0FBQzFEbEssYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVESCxRQUFNLEdBQUc7QUFDTCxRQUFHLENBQUN1cUMsYUFBSixFQUFrQkEsYUFBYSxHQUFHM3ZDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMnZDLGVBQXJCLEVBQXNDLENBQXRDLENBQWhCO0FBQ2xCLFFBQUcsQ0FBQ0MsV0FBSixFQUFnQkEsV0FBVyxHQUFHN3ZDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNnZDLGFBQXJCLEVBQW9DLENBQXBDLENBQWQ7QUFDaEIsUUFBRyxDQUFDQyxVQUFKLEVBQWVBLFVBQVUsR0FBRy92QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQytpQixNQUFyQixFQUE2QixDQUE3QixDQUFiO0FBQ2YsV0FBTyxjQUNILG9CQUFDLHNEQUFEO0FBQW1CLFVBQUksRUFBQztBQUF4QixNQURHLGVBRUgsOENBQ0k7QUFBSSxlQUFTLEVBQUU2c0IsV0FBVyxDQUFDQyxhQUFaLEdBQTBCLEdBQTFCLEdBQThCQyxVQUFVLENBQUNPLE1BQXpDLEdBQWdELEdBQWhELEdBQW9EWCxhQUFhLENBQUNZLEVBQWxFLEdBQXFFLEdBQXJFLEdBQXlFWixhQUFhLENBQUNDO0FBQXRHLGlCQURKLGVBSUksb0JBQUMsV0FBRDtBQUFhLGFBQU8sRUFBRSxLQUFLWSxlQUFMLEVBQXRCO0FBQThDLGNBQVEsRUFBQztBQUF2RCxNQUpKLGVBS0k7QUFBSSxlQUFTLEVBQUVYLFdBQVcsQ0FBQ0MsYUFBWixHQUEwQixHQUExQixHQUE4QkMsVUFBVSxDQUFDTyxNQUF6QyxHQUFnRCxHQUFoRCxHQUFvRFgsYUFBYSxDQUFDWSxFQUFsRSxHQUFxRSxHQUFyRSxHQUF5RVosYUFBYSxDQUFDQztBQUF0RyxvQkFMSixlQVFJLG9CQUFDLFdBQUQ7QUFBYSxhQUFPLEVBQUUsS0FBS2EsYUFBTCxFQUF0QjtBQUE0QyxjQUFRLEVBQUM7QUFBckQsTUFSSixlQVNJO0FBQUksZUFBUyxFQUFFWixXQUFXLENBQUNDLGFBQVosR0FBMEIsR0FBMUIsR0FBOEJDLFVBQVUsQ0FBQ08sTUFBekMsR0FBZ0QsR0FBaEQsR0FBb0RYLGFBQWEsQ0FBQ1ksRUFBbEUsR0FBcUUsR0FBckUsR0FBeUVaLGFBQWEsQ0FBQ0M7QUFBdEcsNEJBVEosZUFZSSxvQkFBQyxXQUFEO0FBQWEsYUFBTyxFQUFFLEtBQUtjLGVBQUwsRUFBdEI7QUFBOEMsY0FBUSxFQUFDO0FBQXZELE1BWkosQ0FGRyxlQWdCSDtBQUFLLGVBQVMsRUFBRTF3QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzB3QyxjQUFyQixFQUFxQyxDQUFyQyxFQUF3Q0E7QUFBeEQsTUFoQkcsQ0FBUDtBQWtCSDs7QUFFREQsaUJBQWUsR0FBRTtBQUNiLFVBQU1FLFdBQVcsR0FBR1IsYUFBYSxDQUFDQyxXQUFkLEVBQXBCO0FBQ0EsVUFBTVEsUUFBUSxHQUFHcjJDLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWW0xQyxXQUFaLEVBQXlCMW5DLE1BQXpCLENBQWdDakosQ0FBQyxJQUFJQSxDQUFDLEtBQUssS0FBM0MsRUFBa0RtQyxHQUFsRCxDQUFzRG5DLENBQUMsSUFBSTJ3QyxXQUFXLENBQUMzd0MsQ0FBRCxDQUF0RSxDQUFqQjtBQUVBLFFBQUc0d0MsUUFBUSxDQUFDM3hDLE1BQVQsS0FBb0IsQ0FBdkIsRUFBeUIsT0FBTyxvREFBUDtBQUV6QixXQUFPMnhDLFFBQVEsQ0FBQ3p1QyxHQUFULENBQWFuQyxDQUFDLElBQUk7QUFDckIsYUFBUSxTQUFRQSxDQUFDLENBQUM2d0MsU0FBVTtRQUNoQzd3QyxDQUFDLENBQUM4d0MsVUFBRixDQUFhQyxFQUFiLENBQWdCLENBQWhCLEVBQW1CbC9CLFdBQW5CLEtBQWlDN1IsQ0FBQyxDQUFDOHdDLFVBQUYsQ0FBYUMsRUFBYixDQUFnQmovQixLQUFoQixDQUFzQixDQUF0QixDQUF5QjtZQUN0RDlSLENBQUMsQ0FBQzh3QyxVQUFGLENBQWFFLE1BQU87WUFDcEJoeEMsQ0FBQyxDQUFDZ3RCLE1BQU87Z0JBQ0xodEIsQ0FBQyxDQUFDaXhDLFVBQUYsQ0FBYWh5QyxNQUFPLEVBSnhCO0FBS0gsS0FOTSxFQU1KeUcsSUFOSSxDQU1DLE9BQUssSUFBSXdyQyxNQUFKLENBQVcsRUFBWCxDQUFMLEdBQW9CLElBTnJCLENBQVA7QUFPSDs7QUFFRFgsaUJBQWUsR0FBRTtBQUNiLFVBQU1ueEIsSUFBSSxHQUFHM2UsVUFBVSxDQUFDQyxjQUFYLEVBQWI7QUFDQTs7OztBQUdBLFVBQU15d0MsU0FBUyxHQUFHL3hCLElBQUksQ0FBQyt4QixTQUF2QjtBQUVBLFFBQUlDLFNBQVMsR0FBR2h5QixJQUFJLENBQUNneUIsU0FBckI7O0FBQ0EsUUFBR2h5QixJQUFJLENBQUNpeUIsTUFBTCxJQUFlanlCLElBQUksQ0FBQ2l5QixNQUFMLENBQVluZ0MsVUFBWixDQUF1QixJQUF2QixDQUFsQixFQUErQztBQUMzQ2tnQyxlQUFTLEdBQUdoeUIsSUFBSSxDQUFDa3lCLFlBQUwsQ0FBa0IsS0FBbEIsQ0FBWjtBQUNIOztBQUVELFFBQUdGLFNBQVMsQ0FBQ2xnQyxVQUFWLENBQXFCLEdBQXJCLENBQUgsRUFBNkI7QUFDekJrZ0MsZUFBUyxHQUFHLHdCQUFzQkEsU0FBbEM7QUFDSDs7QUFDRCxRQUFHQSxTQUFTLENBQUNuZ0MsUUFBVixDQUFtQixXQUFuQixDQUFILEVBQW1DO0FBQy9CbWdDLGVBQVMsR0FBR0EsU0FBUyxDQUFDbHlDLE9BQVYsQ0FBa0IsV0FBbEIsRUFBK0IsWUFBL0IsQ0FBWjtBQUNIOztBQUVELFdBQVEsZUFBY2tnQixJQUFJLENBQUN6ZCxRQUFTO21CQUN6QnlkLElBQUksQ0FBQ3hkLGFBQWM7U0FDN0J3ZCxJQUFJLENBQUNrckIsR0FBSTtRQUNWbHJCLElBQUksQ0FBQ2ptQixFQUFHO1lBQ0ppbUIsSUFBSSxDQUFDaXlCLE1BQU87Z0JBQ1JELFNBQVU7bUJBQ05ELFNBQVMsQ0FBQ0ksT0FBVixFQUFELENBQXNCbDBCLFFBQXRCLEdBQWlDbGUsUUFBakMsQ0FBMEMsQ0FBMUMsRUFBNkMsR0FBN0MsQ0FBa0QsSUFBRyxDQUFDZ3lDLFNBQVMsQ0FBQ0ssUUFBVixLQUFxQixDQUF0QixFQUF5Qm4wQixRQUF6QixHQUFvQ2xlLFFBQXBDLENBQTZDLENBQTdDLEVBQWdELEdBQWhELENBQXFELElBQUlneUMsU0FBUyxDQUFDTSxXQUFWLEVBQUQsQ0FBMEJwMEIsUUFBMUIsR0FBcUNsZSxRQUFyQyxDQUE4QyxDQUE5QyxFQUFpRCxHQUFqRCxDQUFzRCxJQUFHZ3lDLFNBQVMsQ0FBQ08sUUFBVixHQUFxQnIwQixRQUFyQixHQUFnQ2xlLFFBQWhDLENBQXlDLENBQXpDLEVBQTRDLEdBQTVDLENBQWlELEtBQUlneUMsU0FBUyxDQUFDUSxVQUFWLEdBQXVCdDBCLFFBQXZCLEdBQWtDbGUsUUFBbEMsQ0FBMkMsQ0FBM0MsRUFBOEMsR0FBOUMsQ0FBbUQsT0FBTWd5QyxTQUFTLENBQUNTLFVBQVYsRUFBdUI7V0FDblR4eUIsSUFBSSxDQUFDeXlCLEtBQU07ZUFDUHp5QixJQUFJLENBQUMweUIsc0JBQUwsR0FBOEIsS0FBOUIsR0FBc0MsSUFBSztXQUMvQzF5QixJQUFJLENBQUMyeUIsS0FBTTtTQUNiM3lCLElBQUksQ0FBQzR5QixVQUFMLEdBQWtCLEtBQWxCLEdBQTBCLElBQUs7d0JBQ2hCNXlCLElBQUksQ0FBQzZ5QixNQUFMLEdBQWMsS0FBZCxHQUFzQixJQUFLO1dBQ3hDN3lCLElBQUksQ0FBQzh5QixLQUFMLElBQWMsTUFBTztjQUNsQjl5QixJQUFJLENBQUMreUIsUUFBUzsyQkFDRC95QixJQUFJLENBQUNnekIsV0FBWSxFQWRwQztBQWVIOztBQUVENUIsZUFBYSxHQUFFO0FBRVgsVUFBTTdzQixNQUFNLEdBQUdwcEIsTUFBTSxDQUFDeWhCLE1BQVAsQ0FBY2kwQixXQUFXLENBQUM1YSxTQUFaLEVBQWQsQ0FBZjtBQUNBLFVBQU1nZCxTQUFTLEdBQUc5M0MsTUFBTSxDQUFDaUIsSUFBUCxDQUFZNEUsa0JBQWtCLENBQUM4dkMsZ0JBQW5CLEVBQVosQ0FBbEI7QUFDQSxVQUFNb0MsT0FBTyxHQUFHRCxTQUFTLENBQUNwcEMsTUFBVixDQUFpQmpKLENBQUMsSUFBSUksa0JBQWtCLENBQUNteUMsUUFBbkIsQ0FBNEJ2eUMsQ0FBNUIsQ0FBdEIsQ0FBaEI7QUFDQSxVQUFNUSxPQUFPLEdBQUc2eEMsU0FBUyxDQUFDcHBDLE1BQVYsQ0FBaUJqSixDQUFDLElBQUlJLGtCQUFrQixDQUFDb3lDLFNBQW5CLENBQTZCeHlDLENBQTdCLENBQXRCLENBQWhCO0FBRUEsV0FBUSxtQkFBa0IyakIsTUFBTSxDQUFDMWtCLE1BQU87ZUFDakNvekMsU0FBUyxDQUFDcHpDLE1BQU87bUJBQ2JxekMsT0FBTyxDQUFDcnpDLE1BQU87eUJBQ1R1QixPQUFPLENBQUN2QixNQUFPLGdCQUhoQztBQUlIOztBQTNGeUQ7QUErRjlELElBQUl3ekMsWUFBWSxHQUFHMXlDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMHlDLFNBQXJCLEVBQWdDLENBQWhDLENBQW5CO0FBQ0EsSUFBSUMsY0FBYyxHQUFHNXlDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDZ1UsTUFBckIsRUFBNkIsQ0FBN0IsQ0FBckI7QUFDQSxJQUFJNCtCLGNBQWMsR0FBRzd5QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3NULGNBQXJCLEVBQXFDLENBQXJDLENBQXJCOztBQUVBLE1BQU11L0IsV0FBTixTQUEwQnZzQyxLQUFLLENBQUNDLFNBQWhDLENBQTBDO0FBQ3RDcEIsUUFBTSxHQUFFO0FBQ0osUUFBRyxDQUFDd3RDLGNBQUosRUFBbUJBLGNBQWMsR0FBRzV5QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dVLE1BQXJCLEVBQTZCLENBQTdCLENBQWpCO0FBQ25CLFFBQUcsQ0FBQzQrQixjQUFKLEVBQW1CQSxjQUFjLEdBQUc3eUMsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNzVCxjQUFyQixFQUFxQyxDQUFyQyxDQUFqQjtBQUNuQixRQUFHLENBQUN5OEIsZ0JBQUosRUFBcUJBLGdCQUFnQixHQUFHaHdDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDZ3dDLHNCQUFyQixFQUE2QyxDQUE3QyxDQUFuQjtBQUNyQixRQUFHLENBQUN5QyxZQUFKLEVBQWlCQSxZQUFZLEdBQUcxeUMsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM4eUMsYUFBckIsRUFBb0MsQ0FBcEMsQ0FBZjtBQUNqQix3QkFBUTtBQUFLLFdBQUssRUFBRyxHQUFFSCxjQUFjLENBQUMzK0IsTUFBTyxJQUFHNCtCLGNBQWMsQ0FBQ3QvQixjQUFlO0FBQXRFLG9CQUNKLDhDQUNJO0FBQU0sV0FBSyxFQUFHLEdBQUV5OEIsZ0JBQWdCLENBQUNDLHNCQUF1QixPQUF4RDtBQUFnRSw2QkFBdUIsRUFBRTtBQUFDK0MsY0FBTSxFQUFFTixZQUFZLENBQUNDLFNBQWIsQ0FBdUIsS0FBS3B0QyxLQUFMLENBQVcwdEMsUUFBbEMsRUFBNEMsS0FBSzF0QyxLQUFMLENBQVd2RCxPQUF2RCxFQUFnRTdHO0FBQXpFO0FBQXpGLE1BREosQ0FESSxlQU1KO0FBQUssZUFBUyxFQUFFNkUsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNpekMsYUFBckIsRUFBb0MsQ0FBcEMsRUFBdUNBO0FBQXZELE1BTkksQ0FBUjtBQVFIOztBQWRxQyxDOzs7Ozs7Ozs7Ozs7QUNwSDFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlDLFVBQUo7QUFDZSxNQUFNdE8sVUFBTixTQUF5QnQrQixLQUFLLENBQUM4NUIsYUFBL0IsQ0FBNkM7QUFDeEQvakMsYUFBVyxHQUFFO0FBQ1QsVUFBTSxHQUFHa0IsU0FBVDtBQUNBLFNBQUs2RixLQUFMLEdBQWE7QUFDVCt2QyxZQUFNLEVBQUU7QUFEQyxLQUFiO0FBR0g7O0FBRURodUMsUUFBTSxHQUFFO0FBQ0osUUFBRyxDQUFDK3RDLFVBQUosRUFBZUEsVUFBVSxHQUFHbFQsK0RBQWMsQ0FBQ2w3QixJQUFmLENBQW9COUUsQ0FBQyxJQUFJQSxDQUFDLENBQUNvekMsV0FBM0IsQ0FBYjtBQUNmOzs7O0FBR0EsVUFBTUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJeFIsR0FBSixDQUFRdG5DLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWxELE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQnUrQixVQUFqQyxFQUE2Q3JoQyxHQUE3QyxDQUFpRG5DLENBQUMsSUFBSTtBQUNwRixhQUFPekYsTUFBTSxDQUFDaUIsSUFBUCxDQUFZbEQsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCdStCLFVBQXJCLENBQWdDeGpDLENBQWhDLENBQVosRUFBZ0RtQyxHQUFoRCxDQUFvRHFNLENBQUMsSUFBSWxXLE1BQU0sQ0FBQ3NILFNBQVAsQ0FBaUJxRixHQUFqQixDQUFxQnUrQixVQUFyQixDQUFnQ3hqQyxDQUFoQyxFQUFtQ3dPLENBQW5DLENBQXpELENBQVA7QUFDSCxLQUZpQyxFQUUvQmlPLElBRitCLEVBQVIsQ0FBSixDQUF0QjtBQUdBLFdBQU8sY0FDSCxvQkFBQyxVQUFELENBQVksV0FBWjtBQUF3QixTQUFHLEVBQUMsSUFBNUI7QUFBaUMsV0FBSyxFQUFDO0FBQXZDLG9CQUNJLG9CQUFDLFVBQUQsQ0FBWSxRQUFaO0FBQXFCLFVBQUksRUFBQyxhQUExQjtBQUF3QyxlQUFTLEVBQUMsRUFBbEQ7QUFBcUQsZ0JBQVUsRUFBRTtBQUFqRSxrSUFFSTtBQUFLLFdBQUssRUFBRTtBQUFDMEMsaUJBQVMsRUFBRTtBQUFaO0FBQVosTUFGSixlQUdJLG9CQUFDLFNBQUQsQ0FBVyxHQUFYLENBQWUsVUFBZixDQUEwQixPQUExQixDQUFrQyxRQUFsQztBQUEyQyxVQUFJLEVBQUM7QUFBaEQsK0dBSEosZUFJSSxvQkFBQyxTQUFELENBQVcsR0FBWCxDQUFlLFVBQWYsQ0FBMEIsT0FBMUIsQ0FBa0MsUUFBbEM7QUFBMkMsVUFBSSxFQUFDO0FBQWhELGtIQUpKLENBREosZUFPSSxvQkFBQyxrREFBRCxPQVBKLGVBUUksb0JBQUMsU0FBRCxDQUFXLEdBQVgsQ0FBZSxVQUFmLENBQTBCLE1BQTFCLENBQWlDLE1BQWpDO0FBQXdDLFdBQUssRUFBQyxPQUE5QztBQUFzRCxVQUFJLEVBQUMsVUFBM0Q7QUFBc0UsVUFBSSxFQUFDLFFBQTNFO0FBQW9GLGdCQUFVLEVBQUMsT0FBL0Y7QUFBdUcsYUFBTyxFQUFFLE1BQU07QUFDbEg4ZCx1REFBTSxDQUFDYSxLQUFQLENBQWF3VixZQUFiLENBQTBCLGdEQUExQjtBQUNILE9BRkQ7QUFFRyxhQUFPLEVBQUU7QUFGWix1QkFSSixDQURHLEVBZUhELGFBQWEsQ0FBQ2x4QyxHQUFkLENBQWtCb3hDLElBQUksSUFBSTtBQUN0QixZQUFNQyxRQUFRLEdBQUdELElBQUksQ0FBQ2hnQyxXQUFMLElBQW9CZ2dDLElBQUksQ0FBQy93QyxJQUExQztBQUNBLFlBQU1peEMsUUFBUSxHQUFJLDRCQUEyQmw1QyxNQUFNLENBQUNpQixJQUFQLENBQVlsRCxNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUJ1K0IsVUFBakMsRUFBNkMxK0IsSUFBN0MsQ0FBa0Q5RSxDQUFDLElBQUkxSCxNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUJ1K0IsVUFBckIsQ0FBZ0N4akMsQ0FBaEMsRUFBbUN3ekMsUUFBbkMsQ0FBdkQsQ0FBcUcsSUFBR0EsUUFBUyxFQUE5SjtBQUNBLDBCQUFPLG9CQUFDLGdCQUFEO0FBQWtCLFdBQUcsRUFBRUMsUUFBdkI7QUFBaUMsWUFBSSxFQUFFRjtBQUF2QyxRQUFQO0FBQ0gsS0FKRCxDQWZHLENBQVA7QUFxQkg7O0FBRUQsTUFBSUcsT0FBSixHQUFhLENBRVo7O0FBekN1RDs7QUE0QzVELE1BQU1DLGdCQUFOLFNBQStCcnRDLEtBQUssQ0FBQ0MsU0FBckMsQ0FBK0M7QUFDM0NsSyxhQUFXLENBQUNpSixLQUFELEVBQU87QUFDZCxVQUFNQSxLQUFOO0FBQ0EsU0FBS2xDLEtBQUwsR0FBYTtBQUNUd3dDLFNBQUcsRUFBRSxTQURJO0FBRVQxL0IsVUFBSSxFQUFFNU8sS0FBSyxDQUFDaXVDLElBRkg7QUFHVGpvQyxhQUFPLEVBQUU7QUFIQSxLQUFiO0FBS0g7O0FBRURuRyxRQUFNLEdBQUU7QUFDSixVQUFNb3VDLElBQUksR0FBRyxLQUFLanVDLEtBQUwsQ0FBV2l1QyxJQUF4QjtBQUNBLFFBQUlNLFdBQVcsR0FBRyxFQUFsQjtBQUNBLFFBQUdOLElBQUksQ0FBQ00sV0FBUixFQUFvQkEsV0FBVyxHQUFHTixJQUFJLENBQUNNLFdBQW5CO0FBQ3BCLFFBQUl6d0MsS0FBSyxHQUFHLEtBQUtBLEtBQWpCOztBQUNBLFFBQUkwd0MsUUFBUSxHQUFHLE1BQU07QUFDakIsVUFBSXBYLEtBQUssR0FBRyxFQUFaO0FBQ0FtWCxpQkFBVyxDQUFDbHVDLE9BQVosQ0FBb0JuTSxRQUFRLElBQUk7QUFDNUJrakMsYUFBSyxDQUFDbmlDLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWWhDLFFBQVEsQ0FBQyxDQUFELENBQXBCLEVBQXlCLENBQXpCLENBQUQsQ0FBTCxHQUFxQ0EsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZZSxNQUFNLENBQUNpQixJQUFQLENBQVloQyxRQUFRLENBQUMsQ0FBRCxDQUFwQixFQUF5QixDQUF6QixDQUFaLENBQXJDO0FBQ0gsT0FGRDtBQUdBZSxZQUFNLENBQUNpQixJQUFQLENBQVk0SCxLQUFLLENBQUNrSSxPQUFsQixFQUEyQjNGLE9BQTNCLENBQW1DMUssR0FBRyxJQUFJO0FBQ3RDeWhDLGFBQUssQ0FBQ3poQyxHQUFELENBQUwsR0FBYTQ0QyxXQUFXLENBQUMvdUMsSUFBWixDQUFpQjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDOEUsSUFBRixDQUFPOUUsQ0FBQyxJQUFJQSxDQUFDLENBQUMvRSxHQUFELENBQWIsQ0FBdEIsRUFBMkNtSSxLQUFLLENBQUNrSSxPQUFOLENBQWNyUSxHQUFkLENBQTNDLEVBQStEQSxHQUEvRCxDQUFiO0FBQ0gsT0FGRDtBQUdBLGFBQU95aEMsS0FBUDtBQUNILEtBVEQ7O0FBVUEsUUFBSXFYLGFBQWEsR0FBRyxNQUFNO0FBQ3RCLDBCQUFPO0FBQUssYUFBSyxFQUFFO0FBQUM5SixnQkFBTSxFQUFFO0FBQVQ7QUFBWixzQkFDSDtBQUFLLGFBQUssRUFBRTtBQUNSOWhDLHlCQUFlLEVBQUUsNkJBRFQ7QUFFUjZyQyxpQkFBTyxFQUFFLFdBRkQ7QUFHUkMsc0JBQVksRUFBRTtBQUhOLFNBQVo7QUFJRyxpQkFBUyxFQUFDO0FBSmIsU0FLSzN0QyxLQUFLLENBQUMxSixhQUFOLENBQW9CMjJDLElBQXBCLEVBQTBCTyxRQUFRLEVBQWxDLENBTEwsQ0FERyxDQUFQO0FBU0gsS0FWRDs7QUFXQSxRQUFJSSxVQUFVLEdBQUcsTUFBTTtBQUNuQiwwQkFBTztBQUFLLGFBQUssRUFBRTtBQUFDakssZ0JBQU0sRUFBRTtBQUFUO0FBQVosc0JBQ0g7QUFBSyxhQUFLLEVBQUU7QUFDUjloQyx5QkFBZSxFQUFFLDZCQURUO0FBRVI2ckMsaUJBQU8sRUFBRSxXQUZEO0FBR1JDLHNCQUFZLEVBQUU7QUFITixTQUFaO0FBSUcsaUJBQVMsRUFBQztBQUpiLHNCQUtJLG9CQUFDLE1BQUQsQ0FBUSxTQUFSLENBQWtCLEdBQWxCLENBQXNCLFVBQXRCLENBQWlDLE9BQWpDLENBQXlDLGVBQXpDLGNBTEosZUFRSSxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxPQUFqQyxDQUF5QyxZQUF6QyxRQUNLM3RDLEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0IsTUFBTTtBQUN2Qiw0QkFBTyxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxPQUFqQyxDQUF5QyxTQUF6QztBQUFtRCxrQkFBUSxFQUFDLEtBQTVEO0FBQWtFLGlCQUFPLEVBQUV1M0MsWUFBWSxDQUFDLEtBQUQ7QUFBdkYsVUFBUDtBQUNILE9BRkEsQ0FETCxDQVJKLGVBYUksb0JBQUMsTUFBRCxDQUFRLFNBQVIsQ0FBa0IsR0FBbEIsQ0FBc0IsVUFBdEIsQ0FBaUMsT0FBakMsQ0FBeUMsZUFBekMsZ0JBYkosZUFnQkksb0JBQUMsTUFBRCxDQUFRLFNBQVIsQ0FBa0IsR0FBbEIsQ0FBc0IsVUFBdEIsQ0FBaUMsT0FBakMsQ0FBeUMsWUFBekMsUUFDSzd0QyxLQUFLLENBQUMxSixhQUFOLENBQW9CLE1BQU07QUFDdkIsNEJBQU8sb0JBQUMsTUFBRCxDQUFRLFNBQVIsQ0FBa0IsR0FBbEIsQ0FBc0IsVUFBdEIsQ0FBaUMsT0FBakMsQ0FBeUMsU0FBekM7QUFBbUQsa0JBQVEsRUFBQyxJQUE1RDtBQUFpRSxpQkFBTyxFQUFFdTNDLFlBQVksQ0FBQyxPQUFEO0FBQXRGLFVBQVA7QUFDSCxPQUZBLENBREwsQ0FoQkosQ0FERyxDQUFQO0FBd0JILEtBekJEOztBQTBCQSxRQUFJQyxhQUFhLEdBQUcsQ0FBQ2w1QyxLQUFELEVBQVF1NEMsUUFBUixFQUFrQlksSUFBbEIsS0FBMkI7QUFDM0MsVUFBRyxPQUFPbjVDLEtBQVAsS0FBaUIsUUFBcEIsRUFBNkI7QUFDekIsZUFBT0EsS0FBUDtBQUNILE9BRkQsTUFFTSxJQUFHLE9BQU9BLEtBQVAsS0FBaUIsU0FBcEIsRUFBOEI7QUFDaEMsZUFBT281QyxNQUFNLENBQUNwNUMsS0FBRCxDQUFiO0FBQ0gsT0FGSyxNQUVBLElBQUcsT0FBT0EsS0FBUCxLQUFpQixVQUFwQixFQUErQjtBQUNqQyxlQUFPQSxLQUFLLENBQUNtaUIsUUFBTixFQUFQO0FBQ0gsT0FGSyxNQUVBLElBQUcsT0FBT25pQixLQUFQLEtBQWlCLFFBQXBCLEVBQTZCO0FBQy9CLFlBQUdBLEtBQUssSUFBSUEsS0FBSyxDQUFDcTVDLFFBQWYsS0FBNEJyNUMsS0FBSyxDQUFDcTVDLFFBQU4sS0FBbUJDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLGVBQVgsQ0FBbkIsSUFBa0R2NUMsS0FBSyxDQUFDcTVDLFFBQU4sS0FBbUIsTUFBakcsQ0FBSCxFQUE0RztBQUN4RyxjQUFHZCxRQUFRLEtBQUssdUNBQWhCLEVBQXdEO0FBQ3BELGdCQUFHWSxJQUFJLEtBQUssT0FBWixFQUFvQjtBQUNoQixxQkFBUTs7Ozs7Ozs7OztFQUFSO0FBV0gsYUFaRCxNQVlNLElBQUdBLElBQUksS0FBSyxLQUFaLEVBQWtCO0FBQ3BCLHFCQUFROzs7Ozs7Ozs7O09BQVI7QUFXSDtBQUNKOztBQUNELGlCQUFPLHVCQUFQO0FBQ0g7O0FBQ0QsZUFBT3ArQixJQUFJLENBQUNPLFNBQUwsQ0FBZXRiLEtBQWYsRUFBc0IsSUFBdEIsRUFBNEIsTUFBNUIsQ0FBUDtBQUNILE9BaENLLE1BZ0NBLElBQUcsT0FBT0EsS0FBUCxLQUFpQixRQUFwQixFQUE2QjtBQUMvQixlQUFPbzVDLE1BQU0sQ0FBQ3A1QyxLQUFELENBQWI7QUFDSDs7QUFDRCxhQUFPbzVDLE1BQU0sQ0FBQ3A1QyxLQUFELENBQWI7QUFDSCxLQTNDRDs7QUE0Q0EsUUFBSWk1QyxZQUFZLEdBQUcsVUFBU0UsSUFBVCxFQUFjO0FBQUU7QUFDL0IsWUFBTWIsUUFBUSxHQUFHRCxJQUFJLENBQUNoZ0MsV0FBTCxJQUFvQmdnQyxJQUFJLENBQUMvd0MsSUFBMUM7QUFDQSxVQUFJby9CLFVBQVUsR0FBR3JuQyxNQUFNLENBQUNpQixJQUFQLENBQVlsRCxNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUJ1K0IsVUFBakMsQ0FBakI7QUFDQSxZQUFNa1IsWUFBWSxHQUFHOVMsVUFBVSxDQUFDOThCLElBQVgsQ0FBZ0I5RSxDQUFDLElBQUkxSCxNQUFNLENBQUNzSCxTQUFQLENBQWlCcUYsR0FBakIsQ0FBcUJ1K0IsVUFBckIsQ0FBZ0N4akMsQ0FBaEMsRUFBbUN3ekMsUUFBbkMsQ0FBckIsQ0FBckI7QUFDQSxZQUFNQyxRQUFRLEdBQUksNEJBQTJCaUIsWUFBYSxJQUFHbEIsUUFBUyxFQUF0RTtBQUNBLFlBQU1sdUMsS0FBSyxHQUFHd3VDLFFBQVEsRUFBdEI7O0FBRUEsVUFBR08sSUFBSSxLQUFLLEtBQVosRUFBa0I7QUFDZCxZQUFJTSxXQUFXLEdBQUcsRUFBbEI7QUFDQSxZQUFJQyxZQUFZLEdBQUcsSUFBbkI7QUFDQXI2QyxjQUFNLENBQUNpQixJQUFQLENBQVk4SixLQUFaLEVBQW1CSyxPQUFuQixDQUEyQjFLLEdBQUcsSUFBSTtBQUM5QixjQUFHQSxHQUFHLElBQUksVUFBVixFQUFxQjtBQUNqQjI1Qyx3QkFBWSxHQUFHUixhQUFhLENBQUM5dUMsS0FBSyxDQUFDckssR0FBRCxDQUFOLEVBQWF3NEMsUUFBYixFQUF1QlksSUFBdkIsQ0FBNUI7QUFDSCxXQUZELE1BRUs7QUFDRCxnQkFBSVEsR0FBRyxHQUFHNTVDLEdBQUcsR0FBQyxHQUFkOztBQUNBLGdCQUFHLE9BQU9xSyxLQUFLLENBQUNySyxHQUFELENBQVosS0FBc0IsUUFBekIsRUFBa0M7QUFDOUI0NUMsaUJBQUcsSUFBSTUrQixJQUFJLENBQUNPLFNBQUwsQ0FBZWxSLEtBQUssQ0FBQ3JLLEdBQUQsQ0FBcEIsQ0FBUDtBQUNILGFBRkQsTUFFSztBQUNENDVDLGlCQUFHLElBQUssSUFBR1QsYUFBYSxDQUFDOXVDLEtBQUssQ0FBQ3JLLEdBQUQsQ0FBTixFQUFhdzRDLFFBQWIsRUFBdUJZLElBQXZCLENBQTZCLEdBQXJEO0FBQ0g7O0FBQ0RNLHVCQUFXLENBQUNsdkMsSUFBWixDQUFpQm92QyxHQUFqQjtBQUNIO0FBQ0osU0FaRDtBQWFBLFlBQUlDLE9BQUo7O0FBQ0EsWUFBR0YsWUFBSCxFQUFnQjtBQUNaRSxpQkFBTyxHQUFJLElBQUdyQixRQUFTLElBQUdrQixXQUFXLENBQUNqdkMsSUFBWixDQUFpQixHQUFqQixDQUFzQixHQUFoRDtBQUNBLGNBQUlxdkMsUUFBUSxHQUFJLEtBQUl0QixRQUFTLEdBQTdCO0FBQ0EsaUJBQVEsR0FBRXFCLE9BQVEsU0FBUUYsWUFBYSxLQUFJRyxRQUFTLEVBQXBEO0FBQ0gsU0FKRCxNQUlLO0FBQ0RELGlCQUFPLEdBQUksSUFBR3JCLFFBQVMsSUFBR2tCLFdBQVcsQ0FBQ2p2QyxJQUFaLENBQWlCLEdBQWpCLENBQXNCLElBQWhEO0FBQ0EsaUJBQU9vdkMsT0FBUDtBQUNIO0FBQ0osT0F6QkQsTUF5Qk0sSUFBR1QsSUFBSSxLQUFLLE9BQVosRUFBb0I7QUFDdEIsWUFBSTl1QyxRQUFRLEdBQUdELEtBQUssQ0FBQ0MsUUFBTixJQUFrQixJQUFqQztBQUNBLGVBQU9ELEtBQUssQ0FBQ0MsUUFBYjs7QUFDQSxZQUFHQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ2d2QyxRQUFyQixLQUFrQ2h2QyxRQUFRLENBQUNndkMsUUFBVCxLQUFzQkMsTUFBTSxDQUFDQyxHQUFQLENBQVcsZUFBWCxDQUF0QixJQUFxRGx2QyxRQUFRLENBQUNndkMsUUFBVCxLQUFzQixNQUE3RyxDQUFILEVBQXdIO0FBQ3BIaHZDLGtCQUFRLEdBQUc2dUMsYUFBYSxDQUFDN3VDLFFBQUQsRUFBV2t1QyxRQUFYLEVBQXFCWSxJQUFyQixDQUF4QjtBQUNIOztBQUNELFlBQUlNLFdBQVcsR0FBRyxFQUFsQjtBQUNBcDZDLGNBQU0sQ0FBQ2lCLElBQVAsQ0FBWThKLEtBQVosRUFBbUJLLE9BQW5CLENBQTJCMUssR0FBRyxJQUFJO0FBQzlCLGNBQUkrNUMsVUFBVSxHQUFHLFlBQVlsekMsSUFBWixDQUFpQjdHLEdBQWpCLElBQXdCZ2IsSUFBSSxDQUFDTyxTQUFMLENBQWV2YixHQUFmLENBQXhCLEdBQThDQSxHQUEvRDtBQUNBLGNBQUk0NUMsR0FBRyxHQUFHRyxVQUFVLEdBQUMsSUFBckI7O0FBQ0EsY0FBRyxPQUFPMXZDLEtBQUssQ0FBQ3JLLEdBQUQsQ0FBWixLQUFzQixRQUF6QixFQUFrQztBQUM5QjQ1QyxlQUFHLElBQUk1K0IsSUFBSSxDQUFDTyxTQUFMLENBQWVsUixLQUFLLENBQUNySyxHQUFELENBQXBCLENBQVA7QUFDSCxXQUZELE1BRUs7QUFDRDQ1QyxlQUFHLElBQUlULGFBQWEsQ0FBQzl1QyxLQUFLLENBQUNySyxHQUFELENBQU4sRUFBYXc0QyxRQUFiLEVBQXVCWSxJQUF2QixDQUFiLENBQTBDN3VDLEtBQTFDLENBQWdELElBQWhELEVBQXNEckQsR0FBdEQsQ0FBMEQsQ0FBQzB5QyxHQUFELEVBQU1qakMsQ0FBTixLQUFZO0FBQ3pFLGtCQUFHQSxDQUFDLEtBQUssQ0FBVCxFQUFXLE9BQU9pakMsR0FBUDtBQUNYLHFCQUFPLFNBQVNBLEdBQWhCO0FBQ0gsYUFITSxFQUdKbnZDLElBSEksQ0FHQyxJQUhELENBQVA7QUFJSDs7QUFDRGl2QyxxQkFBVyxDQUFDbHZDLElBQVosQ0FBaUJvdkMsR0FBakI7QUFDSCxTQVpEO0FBYUEsWUFBSUksVUFBVSxHQUFHLEdBQWpCOztBQUNBLFlBQUdOLFdBQVcsQ0FBQzExQyxNQUFmLEVBQXNCO0FBQ2xCMDFDLHFCQUFXLENBQUNodkMsT0FBWixDQUFvQixDQUFDa3ZDLEdBQUQsRUFBTWpqQyxDQUFOLEtBQVk7QUFDNUIsZ0JBQUlzakMsTUFBTSxHQUFHdGpDLENBQUMsS0FBSytpQyxXQUFXLENBQUMxMUMsTUFBWixHQUFxQixDQUF4QztBQUNBLGdCQUFJazJDLE9BQU8sR0FBR3ZqQyxDQUFDLEtBQUssQ0FBcEI7O0FBQ0EsZ0JBQUcsQ0FBQ3VqQyxPQUFKLEVBQVk7QUFDUkYsd0JBQVUsSUFBSSxHQUFkO0FBQ0g7O0FBQ0RBLHNCQUFVLElBQUksUUFBZDtBQUNBQSxzQkFBVSxJQUFJSixHQUFkOztBQUNBLGdCQUFHSyxNQUFILEVBQVU7QUFDTkQsd0JBQVUsSUFBRyxLQUFiO0FBQ0g7QUFDSixXQVhEO0FBWUgsU0FiRCxNQWFLO0FBQ0RBLG9CQUFVLElBQUksR0FBZDtBQUNIOztBQUNELFlBQUlHLFlBQVksR0FBRyxPQUFPN3ZDLFFBQVAsS0FBb0IsUUFBcEIsSUFBZ0NBLFFBQVEsQ0FBQzJMLFVBQVQsQ0FBb0IscUJBQXBCLENBQWhDLEdBQTZFM0wsUUFBN0UsR0FBd0YwUSxJQUFJLENBQUNPLFNBQUwsQ0FBZWpSLFFBQWYsQ0FBM0c7QUFDQSxlQUFRLHVCQUFzQmt1QyxRQUFTLEtBQUl3QixVQUFXLEtBQUlHLFlBQWEsR0FBdkU7QUFDSDtBQUNKLEtBeEVEOztBQXlFQSxRQUFJQyxJQUFJLEdBQUc5QixJQUFJLENBQUM4QixJQUFMLElBQWEsRUFBeEI7QUFDQSxRQUFJajhDLElBQUksR0FBR2k4QyxJQUFJLENBQUNqOEMsSUFBTCxnQkFBWSxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxPQUFqQyxDQUF5QyxRQUF6QztBQUFrRCxVQUFJLEVBQUM7QUFBdkQsT0FDbEJpOEMsSUFBSSxDQUFDajhDLElBRGEsQ0FBWixHQUUyQyxJQUZ0RDtBQUdBLFFBQUlrQyxJQUFJLEdBQUcrNUMsSUFBSSxDQUFDLzVDLElBQUwsZ0JBQVksb0JBQUMsTUFBRCxDQUFRLFNBQVIsQ0FBa0IsR0FBbEIsQ0FBc0IsVUFBdEIsQ0FBaUMsT0FBakMsQ0FBeUMsUUFBekM7QUFBa0QsVUFBSSxFQUFDO0FBQXZELE9BQ2xCKzVDLElBQUksQ0FBQy81QyxJQURhLENBQVosR0FFMkMsSUFGdEQ7QUFHQSxRQUFJcS9CLE1BQU0sR0FBRzBhLElBQUksQ0FBQzFhLE1BQUwsZ0JBQWMsb0JBQUMsTUFBRCxDQUFRLFNBQVIsQ0FBa0IsR0FBbEIsQ0FBc0IsVUFBdEIsQ0FBaUMsT0FBakMsQ0FBeUMsUUFBekM7QUFBa0QsVUFBSSxFQUFDO0FBQXZELE9BQ3RCMGEsSUFBSSxDQUFDMWEsTUFEaUIsQ0FBZCxHQUV5QyxJQUZ0RDtBQUdBLFFBQUkzcUIsS0FBSyxHQUFHcWxDLElBQUksQ0FBQ3JsQyxLQUFMLGdCQUFhLG9CQUFDLE1BQUQsQ0FBUSxTQUFSLENBQWtCLEdBQWxCLENBQXNCLFVBQXRCLENBQWlDLE9BQWpDLENBQXlDLFFBQXpDO0FBQWtELFVBQUksRUFBQztBQUF2RCxPQUNwQnFsQyxJQUFJLENBQUNybEMsS0FEZSxDQUFiLEdBRTBDLElBRnREO0FBR0EsUUFBSXNsQyxPQUFPLEdBQUdELElBQUksQ0FBQ0MsT0FBTCxnQkFBZSxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxPQUFqQyxDQUF5QyxRQUF6QztBQUFrRCxVQUFJLEVBQUM7QUFBdkQsT0FDeEJELElBQUksQ0FBQ0MsT0FEbUIsQ0FBZixHQUV3QyxJQUZ0RDtBQUdBLHdCQUFRLDhDQUNKLG9CQUFDLE1BQUQsQ0FBUSxTQUFSLENBQWtCLEdBQWxCLENBQXNCLFVBQXRCLENBQWlDLE9BQWpDLENBQXlDLGFBQXpDLFFBQ0svQixJQUFJLENBQUNoZ0MsV0FBTCxJQUFvQmdnQyxJQUFJLENBQUMvd0MsSUFEOUIsQ0FESSxFQUlIcEosSUFKRyxFQUtIazhDLE9BTEcsRUFNSGg2QyxJQU5HLEVBT0gwVSxLQVBHLEVBUUgycUIsTUFSRyxFQVNIa1osV0FBVyxDQUFDMXhDLEdBQVosQ0FBZ0IzSSxRQUFRLElBQUk7QUFDekIsVUFBR0EsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZdytCLE9BQWYsRUFBdUIsT0FBTyxJQUFQO0FBQ3ZCLFVBQUd4K0IsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZOEksSUFBZixFQUFvQixPQUFPLElBQVA7QUFDcEIsVUFBRzlJLFFBQVEsQ0FBQyxDQUFELENBQVIsQ0FBWStMLFFBQWYsRUFBd0IsT0FBTyxJQUFQO0FBQ3hCLFVBQUcvTCxRQUFRLENBQUN5RixNQUFULEtBQW9CLENBQXZCLEVBQXlCLE9BQU8sSUFBUDtBQUV6QixVQUFJaEUsR0FBRyxHQUFHVixNQUFNLENBQUNpQixJQUFQLENBQVloQyxRQUFRLENBQUMsQ0FBRCxDQUFwQixFQUF5QixDQUF6QixDQUFWO0FBQ0EsYUFBTyxjQUNILG9CQUFDLE1BQUQsQ0FBUSxTQUFSLENBQWtCLEdBQWxCLENBQXNCLFVBQXRCLENBQWlDLE9BQWpDLENBQXlDLGVBQXpDLFFBQ0t5QixHQURMLENBREcsZUFJSCxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxNQUFqQyxDQUF3QyxRQUF4QztBQUFpRCxlQUFPLEVBQUV6QixRQUFRLENBQUMySSxHQUFULENBQWEsQ0FBQ25DLENBQUQsRUFBSWdHLEtBQUosS0FBYztBQUNqRixpQkFBTztBQUNIOUssaUJBQUssRUFBRSxTQUFPOEssS0FEWDtBQUVINGtCLGlCQUFLLEVBQUUzVSxJQUFJLENBQUNPLFNBQUwsQ0FBZXhXLENBQUMsQ0FBQ3pGLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWXdFLENBQVosRUFBZSxDQUFmLENBQUQsQ0FBaEI7QUFGSixXQUFQO0FBSUgsU0FMeUQsQ0FBMUQ7QUFLSSxhQUFLLEVBQUUsVUFBUW9ELEtBQUssQ0FBQ2tJLE9BQU4sQ0FBY3JRLEdBQWQsS0FBc0IsR0FBOUIsQ0FMWDtBQUsrQyxnQkFBUSxFQUFHQyxLQUFELElBQVc7QUFDaEUsZUFBS3E2QyxRQUFMLENBQWM7QUFDVmpxQyxtQkFBTyxFQUFFL1EsTUFBTSxDQUFDc1osTUFBUCxDQUFjLEVBQWQsRUFBa0J6USxLQUFLLENBQUNrSSxPQUF4QixFQUFpQztBQUN0QyxlQUFDclEsR0FBRCxHQUFPLENBQUNDLEtBQUssQ0FBQ0EsS0FBTixJQUFlLEdBQWhCLEVBQXFCZ0UsT0FBckIsQ0FBNkIsTUFBN0IsRUFBcUMsRUFBckM7QUFEK0IsYUFBakM7QUFEQyxXQUFkO0FBS0gsU0FYRDtBQVdHLGtCQUFVLEVBQUU7QUFYZixRQUpHLGVBZ0JIO0FBQUssYUFBSyxFQUFFO0FBQUNzMkMsc0JBQVksRUFBRTtBQUFmO0FBQVosUUFoQkcsQ0FBUDtBQWtCSCxLQXpCQSxDQVRHLGVBbUNKLG9CQUFDLE1BQUQsQ0FBUSxTQUFSLENBQWtCLEdBQWxCLENBQXNCLFVBQXRCLENBQWlDLE9BQWpDLENBQXlDLElBQXpDO0FBQThDLFVBQUksRUFBRSxDQUFDO0FBQUM1cUIsYUFBSyxFQUFFLFNBQVI7QUFBbUJ6eEIsVUFBRSxFQUFFO0FBQXZCLE9BQUQsRUFBb0M7QUFBQ3l4QixhQUFLLEVBQUUsTUFBUjtBQUFnQnp4QixVQUFFLEVBQUU7QUFBcEIsT0FBcEMsQ0FBcEQ7QUFDSSxZQUFNLEVBQUVpSyxLQUFLLENBQUN3d0MsR0FEbEI7QUFDdUIsY0FBUSxFQUFFeHdDLEtBQUssQ0FBQ3d3QyxHQUFOLEtBQWMsU0FBZCxHQUEwQkcsYUFBYSxFQUF2QyxHQUE0Q0csVUFBVSxFQUR2RjtBQUMyRixjQUFRLEVBQUdOLEdBQUQsSUFBUztBQUN0RyxhQUFLMkIsUUFBTCxDQUFjO0FBQ1YzQjtBQURVLFNBQWQ7QUFHSDtBQUxMLE1BbkNJLENBQVI7QUEwQ0g7O0FBN08wQyxDOzs7Ozs7Ozs7Ozs7QUNyRC9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNdHRDLEtBQUssR0FBRzVLLG1EQUFJLENBQUM0SyxLQUFuQjtBQUNBLE1BQU13bkMsYUFBYSxHQUFHcHlDLG1EQUFJLENBQUNveUMsYUFBM0I7QUFFZSxNQUFNMkgsY0FBTixTQUE2Qi81QyxtREFBSSxDQUFDbXlDLGNBQWxDLENBQWlEO0FBRTVEeHhDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLbUksUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWM1UCxJQUFkLENBQW1CLElBQW5CLENBQWhCO0FBQ0EsU0FBSzYzQyxZQUFMLEdBQW9CLEtBQUtBLFlBQUwsQ0FBa0I3M0MsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7QUFDQSxTQUFLODNDLGVBQUw7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEtBQUt0d0MsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI3cUMsTUFBakIsSUFBMkIsT0FBTyxLQUFLMUYsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI3cUMsTUFBakIsQ0FBd0I4cUMsZ0JBQS9CLEtBQXFELFVBQW5HO0FBQ0EsU0FBS2g2QyxhQUFMLEdBQXFCLEVBQXJCO0FBRUEsU0FBSytoQyxJQUFMLEdBQVksS0FBS0EsSUFBTCxDQUFVaGdDLElBQVYsQ0FBZSxJQUFmLENBQVo7QUFDQSxTQUFLKy9CLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVkvL0IsSUFBWixDQUFpQixJQUFqQixDQUFkO0FBQ0EsU0FBS3lRLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVl6USxJQUFaLENBQWlCLElBQWpCLENBQWQ7QUFDSDs7QUFFRDgzQyxpQkFBZSxHQUFHO0FBQ2QsU0FBS3Z5QyxLQUFMLEdBQWE7QUFDVDQrQixhQUFPLEVBQUUsS0FBSzE4QixLQUFMLENBQVd6RSxPQURYO0FBRVQzSCxjQUFRLEVBQUUsS0FGRDtBQUdUNjhDLGFBQU8sRUFBRSxDQUhBO0FBSVRDLGFBQU8sRUFBRTtBQUpBLEtBQWI7QUFNSDs7QUFFRE4sY0FBWSxHQUFHO0FBQ1gsUUFBSSxDQUFDLEtBQUtFLFdBQVYsRUFBdUI7QUFDdkIsU0FBS0wsUUFBTCxDQUFjO0FBQUNyOEMsY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNIOztBQUVEKzhDLGVBQWEsR0FBRztBQUNaLFNBQUtDLFFBQUwsQ0FBY3ZlLE9BQWQsQ0FBc0JqWixTQUF0QixHQUFrQyxFQUFsQztBQUNBLFNBQUs2MkIsUUFBTCxDQUFjO0FBQUNZLGtCQUFZLEVBQUU7QUFBZixLQUFkO0FBQ0g7O0FBRURDLG9CQUFrQixHQUFHO0FBQ2pCLFFBQUksQ0FBQyxLQUFLaHpDLEtBQUwsQ0FBV2xLLFFBQWhCLEVBQTBCOztBQUMxQixRQUFJLE9BQU8sS0FBSzRDLGFBQVosS0FBOEIsUUFBbEMsRUFBNEM7QUFDeEMsV0FBS3U2QyxJQUFMLENBQVVDLGFBQVYsQ0FBd0J2NUMsV0FBeEIsQ0FBb0MsS0FBS2pCLGFBQXpDO0FBQ0g7O0FBRUQsUUFBSSxDQUFDakMsd0RBQWMsQ0FBQyxXQUFELENBQW5CLEVBQWtDO0FBQ2xDNmtDLGdCQUFZLENBQUMsTUFBTTtBQUNmLFlBQU02WCxRQUFRLEdBQUcsQ0FBQy9zQixTQUFELEVBQVl2WCxPQUFaLEtBQXdCO0FBQ3JDLFlBQUcsQ0FBQ3VYLFNBQUosRUFBYztBQUNWM2xCLGlCQUFPLENBQUNtTSxLQUFSLENBQWMsSUFBSTdMLEtBQUosQ0FBVyx5QkFBWCxDQUFkO0FBQ0EsaUJBQU8sS0FBUDtBQUNIOztBQUNELGNBQU1xeUMsSUFBSSxHQUFHaHRCLFNBQVMsQ0FBQ2l0QixTQUF2QjtBQUNBLGNBQU1DLE9BQU8sR0FBR0YsSUFBSSxHQUFHaHRCLFNBQVMsQ0FBQ3pmLFlBQWpDO0FBQ0EsY0FBTTRzQyxJQUFJLEdBQUcxa0MsT0FBTyxDQUFDMmtDLFNBQXJCO0FBQ0EsY0FBTUMsT0FBTyxHQUFHRixJQUFJLEdBQUcxa0MsT0FBTyxDQUFDbEksWUFBL0I7QUFDQSxlQUFTNHNDLElBQUksR0FBR0gsSUFBUCxJQUFlSyxPQUFPLEdBQUdILE9BQWxDO0FBQ0gsT0FWRDs7QUFZQSxZQUFNbm1CLFFBQVEsR0FBRyxLQUFLOGxCLElBQUwsQ0FBVVMsUUFBM0I7QUFDQSxZQUFNdHRCLFNBQVMsR0FBRytHLFFBQVEsQ0FBQ3NCLE9BQVQsQ0FBaUIsd0NBQWpCLENBQWxCO0FBQ0EsVUFBSSxDQUFDMGtCLFFBQVEsQ0FBQy9zQixTQUFELEVBQVkrRyxRQUFaLENBQWIsRUFBb0M7QUFDcEMsWUFBTXdtQixjQUFjLEdBQUcxc0MseURBQUcsQ0FBQ29vQixNQUFKLENBQVdsQyxRQUFYLENBQXZCO0FBQ0EsWUFBTXltQixlQUFlLEdBQUczc0MseURBQUcsQ0FBQ29vQixNQUFKLENBQVdqSixTQUFYLENBQXhCO0FBQ0EsWUFBTWpILFFBQVEsR0FBR2lILFNBQVMsQ0FBQ2l0QixTQUEzQjtBQUNBLFlBQU1RLFFBQVEsR0FBR0YsY0FBYyxDQUFDMXVDLEdBQWYsR0FBcUIydUMsZUFBZSxDQUFDM3VDLEdBQXJDLEdBQTJDbWhCLFNBQVMsQ0FBQ2l0QixTQUFyRCxHQUFpRSxFQUFsRjtBQUNBcHNDLCtEQUFHLENBQUM4akIsT0FBSixDQUFZO0FBQ1I3bUIsZ0JBQVEsRUFBRSxHQURGO0FBRVIrbUIsY0FBTSxFQUFFLFVBQVNLLFFBQVQsRUFBbUI7QUFDdkIsY0FBSXVvQixRQUFRLEdBQUcxMEIsUUFBZixFQUF5QmlILFNBQVMsQ0FBQ2l0QixTQUFWLEdBQXNCbDBCLFFBQVEsR0FBSW1NLFFBQVEsSUFBSXVvQixRQUFRLEdBQUcxMEIsUUFBZixDQUExQyxDQUF6QixLQUNLaUgsU0FBUyxDQUFDaXRCLFNBQVYsR0FBc0JsMEIsUUFBUSxHQUFJbU0sUUFBUSxJQUFJbk0sUUFBUSxHQUFHMDBCLFFBQWYsQ0FBMUM7QUFDUjtBQUxPLE9BQVo7QUFPSCxLQTNCVyxDQUFaO0FBNEJIOztBQUdEQyxXQUFTLENBQUNoOEMsS0FBRCxFQUFRO0FBQ2IsUUFBSSxDQUFDQSxLQUFMLEVBQVksT0FBTyxLQUFQO0FBQ1osV0FBTyxPQUFPQSxLQUFQLElBQWdCLFFBQWhCLEdBQTJCQSxLQUEzQixHQUFtQ0EsS0FBSyxDQUFDbWlCLFFBQU4sRUFBMUM7QUFDSDs7QUFFRCxNQUFJODVCLGlCQUFKLEdBQXdCO0FBQ3BCLFFBQUk7QUFBRSxXQUFLcjdDLGFBQUwsR0FBcUIsS0FBS3dKLEtBQUwsQ0FBV3V3QyxLQUFYLENBQWlCN3FDLE1BQWpCLENBQXdCOHFDLGdCQUF4QixFQUFyQjtBQUFrRSxLQUF4RSxDQUNBLE9BQU94K0IsR0FBUCxFQUFZO0FBQUVqYyw0REFBSyxDQUFDaWMsR0FBTixDQUFVLFNBQVYsRUFBcUIsc0NBQXNDLEtBQUs5VSxJQUEzQyxHQUFrRCxHQUF2RSxFQUE0RThVLEdBQTVFO0FBQW1GOztBQUVqRyxXQUFPNWIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUUsb0RBQVo7QUFBa0V1NkMsU0FBRyxFQUFFO0FBQXZFLEtBQWhDLEVBQ0MxN0MsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDZ0wsV0FBSyxFQUFFO0FBQUMsaUJBQVMsT0FBVjtBQUFtQixrQkFBVTtBQUE3QixPQUFSO0FBQWlEb3dCLGFBQU8sRUFBRSxNQUFNO0FBQ3hGLGFBQUtxZSxJQUFMLENBQVVDLGFBQVYsQ0FBd0I1M0IsU0FBeEIsR0FBb0MsRUFBcEM7QUFDQSxhQUFLNjJCLFFBQUwsQ0FBYztBQUFDcjhDLGtCQUFRLEVBQUU7QUFBWCxTQUFkO0FBQ0g7QUFIMkIsS0FBaEMsRUFJQXdDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJ5NkMsNkNBQXpCLEVBQStCLElBQS9CLENBSkEsQ0FERCxFQU9ILE9BQU8sS0FBS3Y3QyxhQUFaLEtBQThCLFFBQTlCLElBQTBDSixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUN6RCxRQUFFLEVBQUcsbUJBQWtCLEtBQUtxSixJQUFLLEVBQWxDO0FBQXFDM0YsZUFBUyxFQUFFLGlCQUFoRDtBQUFtRXU2QyxTQUFHLEVBQUU7QUFBeEUsS0FBaEMsQ0FQdkMsRUFRSCxPQUFPLEtBQUt0N0MsYUFBWixLQUE4QixRQUE5QixJQUEwQ0osbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDekQsUUFBRSxFQUFHLG1CQUFrQixLQUFLcUosSUFBSyxFQUFsQztBQUFxQzNGLGVBQVMsRUFBRSxpQkFBaEQ7QUFBbUV1NkMsU0FBRyxFQUFFLGVBQXhFO0FBQXlGRSw2QkFBdUIsRUFBRTtBQUFDdkUsY0FBTSxFQUFFLEtBQUtqM0M7QUFBZDtBQUFsSCxLQUFoQyxDQVJ2QyxDQUFQO0FBVUg7O0FBRUR5N0MsWUFBVSxDQUFDLzBDLElBQUQsRUFBT2thLE9BQVAsRUFBZ0J0YixNQUFoQixFQUF3QjtBQUM5QixVQUFNckksS0FBSyxHQUFHLHNDQUFzQ3lNLEtBQXRDLENBQTRDLGlCQUE1QyxDQUFkO0FBQ0EsVUFBTWd5QyxTQUFTLEdBQUd6K0MsS0FBSyxDQUFDa04sU0FBTixDQUFnQjBMLENBQUMsSUFBSUEsQ0FBQyxJQUFJLFVBQTFCLENBQWxCO0FBQ0EsUUFBSTZsQyxTQUFKLEVBQWV6K0MsS0FBSyxDQUFDeStDLFNBQUQsQ0FBTCxHQUFtQmx4QyxLQUFLLENBQUMxSixhQUFOLENBQW9CLE1BQXBCLEVBQTRCO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQTVCLEVBQTBEMkYsSUFBMUQsQ0FBbkI7QUFDZixVQUFNaTFDLFlBQVksR0FBRzErQyxLQUFLLENBQUNrTixTQUFOLENBQWdCMEwsQ0FBQyxJQUFJQSxDQUFDLElBQUksYUFBMUIsQ0FBckI7QUFDQSxRQUFJNmxDLFNBQUosRUFBZXorQyxLQUFLLENBQUMwK0MsWUFBRCxDQUFMLEdBQXNCbnhDLEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0IsTUFBcEIsRUFBNEI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBNUIsRUFBZ0U2ZixPQUFoRSxDQUF0QjtBQUNmLFVBQU1nN0IsV0FBVyxHQUFHMytDLEtBQUssQ0FBQ2tOLFNBQU4sQ0FBZ0IwTCxDQUFDLElBQUlBLENBQUMsSUFBSSxZQUExQixDQUFwQjs7QUFDQSxRQUFJNmxDLFNBQUosRUFBZTtBQUNYLFlBQU1seUMsS0FBSyxHQUFHO0FBQUN6SSxpQkFBUyxFQUFFO0FBQVosT0FBZDs7QUFDQSxVQUFJdUUsTUFBTSxDQUFDc2hCLElBQVAsSUFBZXRoQixNQUFNLENBQUNqSSxFQUExQixFQUE4QjtBQUMxQm1NLGFBQUssQ0FBQ3pJLFNBQU4sSUFBb0IsSUFBR2l4QyxhQUFhLENBQUM5QyxNQUFPLElBQUc4QyxhQUFhLENBQUM3QyxzQkFBdUIsRUFBcEY7QUFDQTNsQyxhQUFLLENBQUNrYSxNQUFOLEdBQWUsUUFBZjtBQUVBLFlBQUlwZSxNQUFNLENBQUNzaEIsSUFBWCxFQUFpQnBkLEtBQUssQ0FBQ2lhLElBQU4sR0FBYW5lLE1BQU0sQ0FBQ3NoQixJQUFwQjtBQUNqQixZQUFJdGhCLE1BQU0sQ0FBQ2pJLEVBQVgsRUFBZW1NLEtBQUssQ0FBQzB5QixPQUFOLEdBQWdCLE1BQU07QUFBQ3Q4Qiw2REFBSSxDQUFDa3pDLFVBQUwsQ0FBZ0IrSSxRQUFoQjtBQUE0Qmo4Qyw2REFBSSxDQUFDdXpDLE1BQUwsQ0FBWTd0QyxNQUFNLENBQUNqSSxFQUFuQjtBQUF3QixTQUEzRTtBQUNsQjs7QUFDREosV0FBSyxDQUFDMitDLFdBQUQsQ0FBTCxHQUFxQnB4QyxLQUFLLENBQUMxSixhQUFOLENBQW9Cd0UsTUFBTSxDQUFDc2hCLElBQVAsSUFBZXRoQixNQUFNLENBQUNqSSxFQUF0QixHQUEyQixHQUEzQixHQUFpQyxNQUFyRCxFQUE2RG1NLEtBQTdELEVBQW9FbEUsTUFBTSxDQUFDb0IsSUFBM0UsQ0FBckI7QUFDSDs7QUFDRCxXQUFPekosS0FBSyxDQUFDMGpCLElBQU4sRUFBUDtBQUNIOztBQUVEbTdCLFVBQVEsQ0FBQzcrQyxLQUFELEVBQVFxRixHQUFSLEVBQWE7QUFDakIsVUFBTWtILEtBQUssR0FBRztBQUFDekksZUFBUyxFQUFFLDJCQUFaO0FBQXlDMmlCLFlBQU0sRUFBRTtBQUFqRCxLQUFkO0FBQ0EsUUFBSSxPQUFPcGhCLEdBQVAsSUFBZSxRQUFuQixFQUE2QmtILEtBQUssQ0FBQ2lhLElBQU4sR0FBYW5oQixHQUFiO0FBQzdCLFFBQUksT0FBT0EsR0FBUCxJQUFlLFVBQW5CLEVBQStCa0gsS0FBSyxDQUFDMHlCLE9BQU4sR0FBaUJsRixLQUFELElBQVc7QUFBQ0EsV0FBSyxDQUFDbEssY0FBTjtBQUF3QmtLLFdBQUssQ0FBQ2hLLGVBQU47QUFBeUIxcUIsU0FBRztBQUFJLEtBQXBGO0FBQy9CLFdBQU8xQyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEdBQXpCLEVBQThCMEksS0FBOUIsRUFBcUN2TSxLQUFyQyxDQUFQO0FBQ0g7O0FBRUQ4K0MsWUFBVSxDQUFDOStDLEtBQUQsRUFBUXdNLFFBQVIsRUFBa0J1eUMsTUFBbEIsRUFBMEI7QUFDaEMsd0JBQU8sb0JBQUMsb0RBQUQ7QUFBYSxXQUFLLEVBQUMsT0FBbkI7QUFBMkIsVUFBSSxFQUFDLEtBQWhDO0FBQXNDLFVBQUksRUFBRS8rQztBQUE1QyxvQkFDSDtBQUFLLGVBQVMsRUFBQyxpQkFBZjtBQUFpQyxhQUFPLEVBQUUrK0M7QUFBMUMsT0FBbUR2eUMsUUFBbkQsQ0FERyxDQUFQO0FBR0g7O0FBRUR3QixzQkFBb0IsR0FBRTtBQUNsQixTQUFLZ3hDLFNBQUwsR0FBaUIsSUFBakI7QUFDSDs7QUFFRCxNQUFJQyxLQUFKLEdBQVk7QUFDUixVQUFNQSxLQUFLLEdBQUcsRUFBZDtBQUNBLFVBQU1uQyxLQUFLLEdBQUcsS0FBS3Z3QyxLQUFMLENBQVd1d0MsS0FBekI7QUFDQSxRQUFJQSxLQUFLLENBQUMvNkIsT0FBVixFQUFtQms5QixLQUFLLENBQUN2eUMsSUFBTixDQUFXLEtBQUtteUMsUUFBTCxDQUFjLFNBQWQsRUFBeUIvQixLQUFLLENBQUMvNkIsT0FBL0IsQ0FBWDtBQUNuQixRQUFJKzZCLEtBQUssQ0FBQ2g3QixNQUFWLEVBQWtCbTlCLEtBQUssQ0FBQ3Z5QyxJQUFOLENBQVcsS0FBS215QyxRQUFMLENBQWMsUUFBZCxFQUF3Qi9CLEtBQUssQ0FBQ2g3QixNQUE5QixDQUFYOztBQUNsQixRQUFJZzdCLEtBQUssQ0FBQ29DLE1BQVYsRUFBa0I7QUFDZEQsV0FBSyxDQUFDdnlDLElBQU4sQ0FBVyxLQUFLbXlDLFFBQUwsQ0FBYyxnQkFBZCxFQUFnQyxNQUFNO0FBQzdDLGNBQU1NLE1BQU0sR0FBRyxhQUFmO0FBQ0EsWUFBSTNnQyxJQUFJLEdBQUdzK0IsS0FBSyxDQUFDb0MsTUFBakI7QUFDQSxZQUFJQyxNQUFNLENBQUNwMkMsSUFBUCxDQUFZeVYsSUFBWixDQUFKLEVBQXVCQSxJQUFJLEdBQUdBLElBQUksQ0FBQ3ZZLEtBQUwsQ0FBV2s1QyxNQUFYLEVBQW1CLENBQW5CLENBQVA7QUFDdkJ4OEMsMkRBQUksQ0FBQ2t6QyxVQUFMLENBQWdCK0ksUUFBaEI7QUFDQWo4QywyREFBSSxDQUFDMnhDLGFBQUwsQ0FBbUJDLHdDQUFuQixDQUE0RC8xQixJQUE1RDtBQUNILE9BTlUsQ0FBWDtBQU9IOztBQUNELFFBQUlzK0IsS0FBSyxDQUFDc0MsTUFBVixFQUFrQkgsS0FBSyxDQUFDdnlDLElBQU4sQ0FBVyxLQUFLbXlDLFFBQUwsQ0FBYyxRQUFkLEVBQXdCL0IsS0FBSyxDQUFDc0MsTUFBOUIsQ0FBWDtBQUNsQixRQUFJdEMsS0FBSyxDQUFDdUMsT0FBVixFQUFtQkosS0FBSyxDQUFDdnlDLElBQU4sQ0FBVyxLQUFLbXlDLFFBQUwsQ0FBYyxTQUFkLEVBQXlCL0IsS0FBSyxDQUFDdUMsT0FBL0IsQ0FBWDtBQUNuQixXQUFPSixLQUFQO0FBQ0g7O0FBRUQsTUFBSTMxQyxNQUFKLEdBQWE7QUFDVCxVQUFNMjFDLEtBQUssR0FBRyxLQUFLQSxLQUFuQjtBQUNBLFdBQU8sQ0FBQ0EsS0FBSyxDQUFDLzRDLE1BQU4sSUFBZ0IsS0FBSzIyQyxXQUF0QixLQUFzQ2w2QyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQWhDLEVBQ3pDbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFqQyxFQUNJLEdBQUltN0MsS0FBSyxDQUFDNzFDLEdBQU4sQ0FBVSxDQUFDOFAsT0FBRCxFQUFVak0sS0FBVixLQUFvQkEsS0FBSyxHQUFHZ3lDLEtBQUssQ0FBQy80QyxNQUFOLEdBQWUsQ0FBdkIsR0FBMkIsQ0FBQ2dULE9BQUQsRUFBVSxLQUFWLENBQTNCLEdBQThDQSxPQUE1RSxFQUFxRndLLElBQXJGLEVBRFIsQ0FEeUMsRUFJekMsS0FBS201QixXQUFMLElBQW9CbDZDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQ283QixhQUFPLEVBQUUsS0FBSzBkLFlBQWY7QUFBNkI3NEMsZUFBUyxFQUFFLCtCQUF4QztBQUF5RW12QixjQUFRLEVBQUUsQ0FBQyxLQUFLNW9CLEtBQUwsQ0FBVzQrQjtBQUEvRixLQUFuQyxFQUE0SSxVQUE1SSxDQUpxQixDQUE3QztBQU1IOztBQUVEdjBCLFVBQVEsR0FBRztBQUNQLFNBQUtuSSxLQUFMLENBQVcrSSxNQUFYLElBQXFCLEtBQUsvSSxLQUFMLENBQVcrSSxNQUFYLENBQWtCLEtBQUs3TCxJQUF2QixDQUFyQjtBQUNBLFNBQUsreUMsUUFBTCxDQUFjO0FBQUN2VCxhQUFPLEVBQUUsQ0FBQyxLQUFLNStCLEtBQUwsQ0FBVzQrQjtBQUF0QixLQUFkO0FBQ0g7O0FBRURuRSxNQUFJLEdBQUc7QUFBQyxTQUFLdjRCLEtBQUwsQ0FBV3U0QixJQUFYLENBQWdCLEtBQUtyN0IsSUFBckI7QUFBNEI7O0FBQ3BDbzdCLFFBQU0sR0FBRztBQUFDLFNBQUt0NEIsS0FBTCxDQUFXYSxNQUFYLENBQWtCLEtBQUszRCxJQUF2QjtBQUE4Qjs7QUFDeEM4TCxRQUFNLEdBQUc7QUFBQyxTQUFLaEosS0FBTCxDQUFXZ0osTUFBWCxDQUFrQixLQUFLOUwsSUFBdkI7QUFBOEI7O0FBRXhDLE1BQUlBLElBQUosR0FBVztBQUFDLFdBQU8sS0FBSzAwQyxTQUFMLENBQWUsS0FBSzV4QyxLQUFMLENBQVd1d0MsS0FBWCxDQUFpQjdxQyxNQUFqQixHQUEwQixLQUFLMUYsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI3cUMsTUFBakIsQ0FBd0IwUCxPQUF4QixFQUExQixHQUE4RCxLQUFLcFYsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUJyekMsSUFBOUYsQ0FBUDtBQUE0Rzs7QUFDeEgsTUFBSXBCLE1BQUosR0FBYTtBQUFDLFdBQU8sS0FBSzgxQyxTQUFMLENBQWUsS0FBSzV4QyxLQUFMLENBQVd1d0MsS0FBWCxDQUFpQjdxQyxNQUFqQixHQUEwQixLQUFLMUYsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI3cUMsTUFBakIsQ0FBd0IyUCxTQUF4QixFQUExQixHQUFnRSxLQUFLclYsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUJ6MEMsTUFBaEcsQ0FBUDtBQUFnSDs7QUFDOUgsTUFBSXZJLFdBQUosR0FBa0I7QUFBQyxXQUFPLEtBQUtxK0MsU0FBTCxDQUFlLEtBQUs1eEMsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI3cUMsTUFBakIsR0FBMEIsS0FBSzFGLEtBQUwsQ0FBV3V3QyxLQUFYLENBQWlCN3FDLE1BQWpCLENBQXdCNFAsY0FBeEIsRUFBMUIsR0FBcUUsS0FBS3RWLEtBQUwsQ0FBV3V3QyxLQUFYLENBQWlCaDlDLFdBQXJHLENBQVA7QUFBMEg7O0FBQzdJLE1BQUk2akIsT0FBSixHQUFjO0FBQUMsV0FBTyxLQUFLdzZCLFNBQUwsQ0FBZSxLQUFLNXhDLEtBQUwsQ0FBV3V3QyxLQUFYLENBQWlCN3FDLE1BQWpCLEdBQTBCLEtBQUsxRixLQUFMLENBQVd1d0MsS0FBWCxDQUFpQjdxQyxNQUFqQixDQUF3QnZTLFVBQXhCLEVBQTFCLEdBQWlFLEtBQUs2TSxLQUFMLENBQVd1d0MsS0FBWCxDQUFpQm41QixPQUFqRyxDQUFQO0FBQWtIOztBQUVqSXZYLFFBQU0sR0FBRztBQUNMLFFBQUksS0FBSy9CLEtBQUwsQ0FBV2xLLFFBQWYsRUFBeUIsT0FBTyxLQUFLaStDLGlCQUFaO0FBQ3pCLFVBQU07QUFBQ2tCLGNBQUQ7QUFBV0M7QUFBWCxRQUF5QixLQUFLaHpDLEtBQUwsQ0FBV3V3QyxLQUExQztBQUVBLFVBQU1qdUMsS0FBSyxHQUFHLEVBQWQ7O0FBQ0EsUUFBRy9OLHdEQUFjLENBQUMsV0FBRCxDQUFqQixFQUErQjtBQUMzQixVQUFHLENBQUMsS0FBSzArQyxVQUFULEVBQW9CO0FBQ2hCLGFBQUtBLFVBQUwsR0FBa0IsSUFBbEI7QUFDQXY5QixxRkFBVyxDQUFDeEcscURBQU8sQ0FBQyxLQUFLbFAsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI1K0IsUUFBakIsQ0FBMEJoRyxRQUExQixDQUFtQyxZQUFuQyxJQUFtRGlNLGdFQUFjLENBQUM1SCxhQUFsRSxHQUFrRjRILGdFQUFjLENBQUN4SCxZQUFsRyxFQUFnSCxLQUFLcFEsS0FBTCxDQUFXdXdDLEtBQVgsQ0FBaUI1K0IsUUFBakksQ0FBUixFQUFxSlosTUFBRCxJQUFZO0FBQ3ZLLGNBQUcsS0FBSzBoQyxTQUFSLEVBQWtCO0FBRWxCLGVBQUt4QyxRQUFMLENBQWM7QUFDVnhjLHFCQUFTLEVBQUUxaUIsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFNBQWpCLEdBQTZCO0FBRDlCLFdBQWQ7QUFHSCxTQU5VLEVBTVIsTUFBTSxDQUFFLENBTkEsQ0FBWDtBQU9ILE9BVEQsTUFTSztBQUNELFlBQUcsS0FBS2xULEtBQUwsQ0FBVzIxQixTQUFYLEtBQXlCLElBQTVCLEVBQWlDO0FBQzdCbnhCLGVBQUssQ0FBQzR5QixXQUFOLEdBQW9CLFNBQXBCO0FBQ0g7O0FBQ0QsWUFBRyxLQUFLcDNCLEtBQUwsQ0FBVzIxQixTQUFYLEtBQXlCLFNBQTVCLEVBQXNDO0FBQ2xDbnhCLGVBQUssQ0FBQzR5QixXQUFOLEdBQW9CLGtCQUFwQjtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxXQUFPOStCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFLHNEQUFaO0FBQW9FK0s7QUFBcEUsS0FBaEMsRUFDSGxNLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDUW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFBK0UsS0FBSzA2QyxVQUFMLENBQWdCLEtBQUsvMEMsSUFBckIsRUFBMkIsS0FBS2thLE9BQWhDLEVBQXlDO0FBQUNsYSxVQUFJLEVBQUUsS0FBS3BCLE1BQVo7QUFBb0JqSSxRQUFFLEVBQUVrL0MsUUFBeEI7QUFBa0MzMUIsVUFBSSxFQUFFNDFCO0FBQXhDLEtBQXpDLENBQS9FLENBRFIsRUFFUTU4QyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLEtBQXpCLEVBQWdDO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQWhDLEVBQ0ksS0FBS3lJLEtBQUwsQ0FBV3U0QixJQUFYLElBQW1CLEtBQUtnYSxVQUFMLENBQWdCLE1BQWhCLGVBQXdCLG9CQUFDLG1EQUFEO0FBQVUsZUFBUyxFQUFDO0FBQXBCLE1BQXhCLEVBQTBELEtBQUtoYSxJQUEvRCxDQUR2QixFQUVJLEtBQUt2NEIsS0FBTCxDQUFXYSxNQUFYLElBQXFCLEtBQUsweEMsVUFBTCxDQUFnQixRQUFoQixlQUEwQixvQkFBQyxxREFBRDtBQUFZLGVBQVMsRUFBQztBQUF0QixNQUExQixFQUE4RCxLQUFLamEsTUFBbkUsQ0FGekIsRUFHSSxLQUFLdDRCLEtBQUwsQ0FBV2dKLE1BQVgsSUFBcUIsS0FBS3VwQyxVQUFMLENBQWdCLFFBQWhCLGVBQTBCLG9CQUFDLG1EQUFEO0FBQVksZUFBUyxFQUFDO0FBQXRCLE1BQTFCLEVBQThELEtBQUt2cEMsTUFBbkUsQ0FIekIsRUFJSWhJLEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0IybUMsMERBQXBCLEVBQTRCO0FBQUM5MUIsY0FBUSxFQUFFLEtBQUtBLFFBQWhCO0FBQTBCdTBCLGFBQU8sRUFBRSxLQUFLNStCLEtBQUwsQ0FBVzQrQjtBQUE5QyxLQUE1QixDQUpKLENBRlIsQ0FERyxFQVVIdG1DLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFBMEcsS0FBS2hFLFdBQS9HLENBREosQ0FWRyxFQWFILEtBQUt3SixNQWJGLENBQVA7QUFlSDs7QUF0TjJEO0FBeU5oRSxNQUFNMGlDLGNBQWMsR0FBRzBRLGNBQWMsQ0FBQ3Q0QyxTQUFmLENBQXlCZ0ksTUFBaEQ7QUFDQTVLLE1BQU0sQ0FBQ1ksY0FBUCxDQUFzQnM2QyxjQUFjLENBQUN0NEMsU0FBckMsRUFBZ0QsUUFBaEQsRUFBMEQ7QUFDdEQ2bkMsWUFBVSxFQUFFLEtBRDBDO0FBRXREam5DLGNBQVksRUFBRSxLQUZ3QztBQUd0RGdHLEtBQUcsRUFBRSxZQUFXO0FBQUNGLFdBQU8sQ0FBQ3ZJLElBQVIsQ0FBYSxxR0FBYjtBQUFxSCxHQUhoRjtBQUl0REYsS0FBRyxFQUFFLE1BQU0ycEM7QUFKMkMsQ0FBMUQsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNeVQsT0FBTyxHQUFHM3pDLGdFQUFjLENBQUNtSCxpQkFBZixDQUFpQyxTQUFqQyxDQUFoQjtBQUVBLE1BQU0xRixLQUFLLEdBQUc1SyxtREFBSSxDQUFDMG5CLEtBQW5CO0FBRWUsTUFBTTZoQixRQUFOLFNBQXVCdnBDLG1EQUFJLENBQUNteUMsY0FBNUIsQ0FBMkM7QUFDdER4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtsQyxLQUFMLEdBQWE7QUFBQ2twQyxVQUFJLEVBQUUsTUFBUDtBQUFlbU0sZUFBUyxFQUFFLElBQTFCO0FBQWdDbHZCLFdBQUssRUFBRTtBQUF2QyxLQUFiO0FBQ0EsU0FBS212QixTQUFMLEdBQWlCLEtBQUtwekMsS0FBTCxDQUFXdE0sSUFBWCxJQUFtQixTQUFwQztBQUNBLFNBQUsrVSxNQUFMLEdBQWMsS0FBSzJxQyxTQUFMLEdBQWlCOTlDLHNEQUFqQixHQUFnQ0MscURBQTlDO0FBQ0EsU0FBS29ULE9BQUwsR0FBZSxLQUFLeXFDLFNBQUwsR0FBaUIvOEMsNkRBQWpCLEdBQWdDQyw2REFBL0M7QUFFQSxTQUFLMHdDLElBQUwsR0FBWSxLQUFLQSxJQUFMLENBQVV6dUMsSUFBVixDQUFlLElBQWYsQ0FBWjtBQUNBLFNBQUs4NkMsT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYTk2QyxJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLb0UsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWXBFLElBQVosQ0FBaUIsSUFBakIsQ0FBZDs7QUFFQSxTQUFLKzZDLGNBQUwsR0FBc0IsWUFBVTtBQUM1QixXQUFLaHpDLFdBQUw7QUFDSCxLQUZEOztBQUdBLFNBQUtnekMsY0FBTCxHQUFzQixLQUFLQSxjQUFMLENBQW9CLzZDLElBQXBCLENBQXlCLElBQXpCLENBQXRCO0FBQ0g7O0FBRURvSixtQkFBaUIsR0FBRTtBQUNmLFVBQU1qTyxJQUFJLEdBQUcsQ0FBQyxLQUFLMC9DLFNBQUwsR0FBaUIsUUFBakIsR0FBNEIsT0FBN0IsSUFBd0MsR0FBckQ7QUFDQS9aLDhEQUFRLENBQUM5TCxFQUFULENBQWEsR0FBRTc1QixJQUFLLFFBQXBCLEVBQTZCLEtBQUs0L0MsY0FBbEM7QUFDQWphLDhEQUFRLENBQUM5TCxFQUFULENBQWEsR0FBRTc1QixJQUFLLFVBQXBCLEVBQStCLEtBQUs0L0MsY0FBcEM7QUFDQWphLDhEQUFRLENBQUM5TCxFQUFULENBQWEsR0FBRTc1QixJQUFLLFVBQXBCLEVBQStCLEtBQUs0L0MsY0FBcEM7QUFDSDs7QUFFRDd4QyxzQkFBb0IsR0FBRTtBQUNsQixVQUFNL04sSUFBSSxHQUFHLENBQUMsS0FBSzAvQyxTQUFMLEdBQWlCLFFBQWpCLEdBQTRCLE9BQTdCLElBQXdDLEdBQXJEO0FBQ0EvWiw4REFBUSxDQUFDMXZCLEdBQVQsQ0FBYyxHQUFFalcsSUFBSyxRQUFyQixFQUE4QixLQUFLNC9DLGNBQW5DO0FBQ0FqYSw4REFBUSxDQUFDMXZCLEdBQVQsQ0FBYyxHQUFFalcsSUFBSyxVQUFyQixFQUFnQyxLQUFLNC9DLGNBQXJDO0FBQ0FqYSw4REFBUSxDQUFDMXZCLEdBQVQsQ0FBYyxHQUFFalcsSUFBSyxVQUFyQixFQUFnQyxLQUFLNC9DLGNBQXJDO0FBQ0g7O0FBRURDLFlBQVUsR0FBRztBQUNULFVBQU0vYSxLQUFLLEdBQUdqdkIsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CaXZCLEtBQWxDOztBQUNBLFVBQU0zL0IsSUFBSSxHQUFHMi9CLEtBQUssQ0FBQ2diLFFBQU4sSUFBa0JoYixLQUFLLENBQUNDLFFBQXJDO0FBQ0E1L0IsUUFBSSxDQUFDLEtBQUt1NkMsU0FBTCxHQUFpQjE4QywrREFBYyxDQUFDc1osYUFBaEMsR0FBZ0R0WiwrREFBYyxDQUFDMFosWUFBaEUsQ0FBSjtBQUNIOztBQUVEbW9CLE1BQUksQ0FBQ3I3QixJQUFELEVBQU87QUFDUHFCLFdBQU8sQ0FBQ0MsR0FBUixDQUFZdEIsSUFBWjtBQUNBLFNBQUt5TCxPQUFMLENBQWE0dkIsSUFBYixDQUFrQnI3QixJQUFsQjtBQUNIOztBQUVELFFBQU1vN0IsTUFBTixDQUFhcDdCLElBQWIsRUFBbUI7QUFDZixVQUFNdTJDLFlBQVksR0FBRyxNQUFNLEtBQUtDLGFBQUwsQ0FBbUJ4MkMsSUFBbkIsQ0FBM0I7QUFDQSxRQUFJLENBQUN1MkMsWUFBTCxFQUFtQjtBQUNuQixTQUFLOXFDLE9BQUwsQ0FBYTJ2QixNQUFiLENBQW9CcDdCLElBQXBCO0FBQ0g7O0FBRUR3MkMsZUFBYSxDQUFDeDJDLElBQUQsRUFBTztBQUNoQixXQUFPLElBQUkwVSxPQUFKLENBQVkxQyxPQUFPLElBQUk7QUFDMUJ0WSw2REFBSyxDQUFDa1AscUJBQU4sQ0FBNEIsZUFBNUIsRUFBOEMsbUNBQWtDNUksSUFBSyxHQUFyRixFQUF5RjtBQUNyRm00QixjQUFNLEVBQUUsSUFENkU7QUFFckZELG1CQUFXLEVBQUUsUUFGd0U7QUFHckZHLGlCQUFTLEVBQUUsTUFBTTtBQUFDcm1CLGlCQUFPLENBQUMsSUFBRCxDQUFQO0FBQWUsU0FIb0Q7QUFJckZvbUIsZ0JBQVEsRUFBRSxNQUFNO0FBQUNwbUIsaUJBQU8sQ0FBQyxLQUFELENBQVA7QUFBZ0I7QUFKb0QsT0FBekY7QUFNSCxLQVBNLENBQVA7QUFRSDs7QUFFRCxNQUFJeWtDLFdBQUosR0FBa0I7QUFDZCxXQUFPLENBQ0g7QUFBQ3J1QixXQUFLLEVBQUUsTUFBUjtBQUFnQjF2QixXQUFLLEVBQUU7QUFBdkIsS0FERyxFQUVIO0FBQUMwdkIsV0FBSyxFQUFFLFFBQVI7QUFBa0IxdkIsV0FBSyxFQUFFO0FBQXpCLEtBRkcsRUFHSDtBQUFDMHZCLFdBQUssRUFBRSxTQUFSO0FBQW1CMXZCLFdBQUssRUFBRTtBQUExQixLQUhHLEVBSUg7QUFBQzB2QixXQUFLLEVBQUUsZ0JBQVI7QUFBMEIxdkIsV0FBSyxFQUFFO0FBQWpDLEtBSkcsRUFLSDtBQUFDMHZCLFdBQUssRUFBRSxlQUFSO0FBQXlCMXZCLFdBQUssRUFBRTtBQUFoQyxLQUxHLEVBTUg7QUFBQzB2QixXQUFLLEVBQUUsV0FBUjtBQUFxQjF2QixXQUFLLEVBQUU7QUFBNUIsS0FORyxDQUFQO0FBUUg7O0FBRUQsTUFBSWcrQyxVQUFKLEdBQWlCO0FBQ2IsV0FBTyxDQUNIO0FBQUN0dUIsV0FBSyxFQUFFLFdBQVI7QUFBcUIxdkIsV0FBSyxFQUFFO0FBQTVCLEtBREcsRUFFSDtBQUFDMHZCLFdBQUssRUFBRSxZQUFSO0FBQXNCMXZCLFdBQUssRUFBRTtBQUE3QixLQUZHLENBQVA7QUFJSDs7QUFFRHk5QyxTQUFPLENBQUN6OUMsS0FBRCxFQUFRO0FBQ1gsU0FBS3E2QyxRQUFMLENBQWM7QUFBQ2tELGVBQVMsRUFBRXY5QztBQUFaLEtBQWQ7QUFDSDs7QUFFRG94QyxNQUFJLENBQUNweEMsS0FBRCxFQUFRO0FBQ1IsU0FBS3E2QyxRQUFMLENBQWM7QUFBQ2pKLFVBQUksRUFBRXB4QztBQUFQLEtBQWQ7QUFDSDs7QUFFRCtHLFFBQU0sQ0FBQzZ3QixLQUFELEVBQVE7QUFDVixTQUFLeWlCLFFBQUwsQ0FBYztBQUFDaHNCLFdBQUssRUFBRXVKLEtBQUssQ0FBQ3RULE1BQU4sQ0FBYXRrQixLQUFiLENBQW1CaStDLGlCQUFuQjtBQUFSLEtBQWQ7QUFDSDs7QUFFRHJGLFVBQVEsQ0FBQytCLEtBQUQsRUFBUTtBQUNaLFdBQU87QUFDSDU2QyxTQUFHLEVBQUUsS0FBS3lmLE9BQUwsQ0FBYW03QixLQUFiLENBREY7QUFFSGgxQyxhQUFPLEVBQUUsS0FBS2tOLE1BQUwsQ0FBWSxLQUFLMk0sT0FBTCxDQUFhbTdCLEtBQWIsQ0FBWixDQUZOO0FBR0h4bkMsWUFBTSxFQUFFLEtBQUtKLE9BQUwsQ0FBYUksTUFBYixDQUFvQnhRLElBQXBCLENBQXlCLEtBQUtvUSxPQUE5QixDQUhMO0FBSUg0dkIsVUFBSSxFQUFFaGtDLHdEQUFjLENBQUMsV0FBRCxDQUFkLEdBQThCLEtBQUtna0MsSUFBTCxDQUFVaGdDLElBQVYsQ0FBZSxJQUFmLENBQTlCLEdBQXFELElBSnhEO0FBS0hzSSxZQUFNLEVBQUUsS0FBS3kzQixNQUFMLENBQVkvL0IsSUFBWixDQUFpQixJQUFqQixDQUxMO0FBTUhnNEMsV0FBSyxFQUFFQSxLQU5KO0FBT0h6L0IsVUFBSSxFQUFFeS9CLEtBQUssQ0FBQ3ovQjtBQVBULEtBQVA7QUFTSDs7QUFFRDhnQyxXQUFTLENBQUNoOEMsS0FBRCxFQUFRO0FBQ2IsUUFBSSxDQUFDQSxLQUFMLEVBQVksT0FBTyxLQUFQO0FBQ1osV0FBTyxPQUFPQSxLQUFQLElBQWdCLFFBQWhCLEdBQTJCQSxLQUEzQixHQUFtQ0EsS0FBSyxDQUFDbWlCLFFBQU4sRUFBMUM7QUFDSDs7QUFFRCxNQUFJclAsSUFBSixHQUFVO0FBQ04sV0FBTyxLQUFLMUksS0FBTCxDQUFXdE0sSUFBWCxLQUFvQixTQUFwQixHQUFnQ3VCLE1BQU0sQ0FBQ3loQixNQUFQLENBQWNyaEIsbURBQWQsQ0FBaEMsR0FBMkRKLE1BQU0sQ0FBQ3loQixNQUFQLENBQWN0aEIsa0RBQWQsQ0FBbEU7QUFDSDs7QUFFRDArQyxXQUFTLEdBQUc7QUFDUixVQUFNQyxZQUFZLEdBQUcsS0FBS3JyQyxJQUFMLENBQVVzK0IsSUFBVixDQUFlLENBQUM3OUIsQ0FBRCxFQUFJNnFDLENBQUosS0FBVTtBQUMxQyxZQUFNQyxHQUFHLEdBQUcsS0FBS24yQyxLQUFMLENBQVdrcEMsSUFBWCxDQUFnQmh6QixNQUFoQixDQUF1QixDQUF2QixFQUEwQnpILFdBQTFCLEtBQTBDLEtBQUt6TyxLQUFMLENBQVdrcEMsSUFBWCxDQUFnQng2QixLQUFoQixDQUFzQixDQUF0QixDQUF0RDtBQUNBLFlBQU0wbkMsS0FBSyxHQUFHL3FDLENBQUMsQ0FBQ3pELE1BQUYsSUFBWXlELENBQUMsQ0FBQ3pELE1BQUYsQ0FBVSxNQUFLdXVDLEdBQUksRUFBbkIsQ0FBWixHQUFvQyxLQUFLckMsU0FBTCxDQUFlem9DLENBQUMsQ0FBQ3pELE1BQUYsQ0FBVSxNQUFLdXVDLEdBQUksRUFBbkIsR0FBZixDQUFwQyxHQUE4RSxLQUFLckMsU0FBTCxDQUFlem9DLENBQUMsQ0FBQyxLQUFLckwsS0FBTCxDQUFXa3BDLElBQVosQ0FBaEIsQ0FBNUY7QUFDQSxZQUFNbU4sTUFBTSxHQUFHSCxDQUFDLENBQUN0dUMsTUFBRixJQUFZc3VDLENBQUMsQ0FBQ3R1QyxNQUFGLENBQVUsTUFBS3V1QyxHQUFJLEVBQW5CLENBQVosR0FBb0MsS0FBS3JDLFNBQUwsQ0FBZW9DLENBQUMsQ0FBQ3R1QyxNQUFGLENBQVUsTUFBS3V1QyxHQUFJLEVBQW5CLEdBQWYsQ0FBcEMsR0FBK0UsS0FBS3JDLFNBQUwsQ0FBZW9DLENBQUMsQ0FBQyxLQUFLbDJDLEtBQUwsQ0FBV2twQyxJQUFaLENBQWhCLENBQTlGO0FBQ0EsVUFBSSxPQUFPa04sS0FBUCxJQUFpQixRQUFyQixFQUErQixPQUFPQSxLQUFLLENBQUNMLGlCQUFOLEdBQTBCTyxhQUExQixDQUF3Q0QsTUFBTSxDQUFDTixpQkFBUCxFQUF4QyxDQUFQO0FBQy9CLFVBQUlLLEtBQUssR0FBR0MsTUFBWixFQUFvQixPQUFPLENBQVA7QUFDcEIsVUFBSUEsTUFBTSxHQUFHRCxLQUFiLEVBQW9CLE9BQU8sQ0FBQyxDQUFSO0FBQ3BCLGFBQU8sQ0FBUDtBQUNILEtBUm9CLENBQXJCO0FBU0EsUUFBSSxDQUFDLEtBQUtwMkMsS0FBTCxDQUFXcTFDLFNBQWhCLEVBQTJCWSxZQUFZLENBQUNWLE9BQWI7QUFDM0IsVUFBTWpZLFFBQVEsR0FBRyxFQUFqQjs7QUFDQSxTQUFLLElBQUlqeUIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzRxQyxZQUFZLENBQUNwNkMsTUFBakMsRUFBeUN3UCxDQUFDLEVBQTFDLEVBQThDO0FBQzFDLFlBQU1vbkMsS0FBSyxHQUFHd0QsWUFBWSxDQUFDNXFDLENBQUQsQ0FBMUI7O0FBQ0EsVUFBSSxLQUFLckwsS0FBTCxDQUFXbW1CLEtBQWYsRUFBc0I7QUFDbEIsWUFBSTRILE9BQU8sR0FBRyxJQUFkO0FBQ0EsY0FBTTN1QixJQUFJLEdBQUcsS0FBS2tZLE9BQUwsQ0FBYW03QixLQUFiLENBQWI7QUFDQSxjQUFNejBDLE1BQU0sR0FBRyxLQUFLdVosU0FBTCxDQUFlazdCLEtBQWYsQ0FBZjtBQUNBLGNBQU1oOUMsV0FBVyxHQUFHLEtBQUsraEIsY0FBTCxDQUFvQmk3QixLQUFwQixDQUFwQjtBQUNBLGNBQU1uNUIsT0FBTyxHQUFHLEtBQUtqa0IsVUFBTCxDQUFnQm85QyxLQUFoQixDQUFoQjtBQUNBLFlBQUlyekMsSUFBSixFQUFVMnVCLE9BQU8sR0FBRzN1QixJQUFJLENBQUMyMkMsaUJBQUwsR0FBeUI3NkMsUUFBekIsQ0FBa0MsS0FBSzhFLEtBQUwsQ0FBV21tQixLQUE3QyxDQUFWO0FBQ1YsWUFBSW5vQixNQUFKLEVBQVkrdkIsT0FBTyxHQUFHQSxPQUFPLElBQUkvdkIsTUFBTSxDQUFDKzNDLGlCQUFQLEdBQTJCNzZDLFFBQTNCLENBQW9DLEtBQUs4RSxLQUFMLENBQVdtbUIsS0FBL0MsQ0FBckI7QUFDWixZQUFJMXdCLFdBQUosRUFBaUJzNEIsT0FBTyxHQUFHQSxPQUFPLElBQUl0NEIsV0FBVyxDQUFDc2dELGlCQUFaLEdBQWdDNzZDLFFBQWhDLENBQXlDLEtBQUs4RSxLQUFMLENBQVdtbUIsS0FBcEQsQ0FBckI7QUFDakIsWUFBSTdNLE9BQUosRUFBYXlVLE9BQU8sR0FBR0EsT0FBTyxJQUFJelUsT0FBTyxDQUFDeThCLGlCQUFSLEdBQTRCNzZDLFFBQTVCLENBQXFDLEtBQUs4RSxLQUFMLENBQVdtbUIsS0FBaEQsQ0FBckI7QUFDYixZQUFJLENBQUM0SCxPQUFMLEVBQWM7QUFDakI7O0FBQ0QsWUFBTTdyQixLQUFLLEdBQUcsS0FBS3d1QyxRQUFMLENBQWMrQixLQUFkLENBQWQ7QUFDQW5WLGNBQVEsQ0FBQ2o3QixJQUFULGVBQWMsb0JBQUMsc0RBQUQscUJBQWUsb0JBQUMsa0RBQUQsZUFBZUgsS0FBZjtBQUFzQixjQUFNLEVBQUUsQ0FBQ3pMLHdEQUFjLENBQUMsV0FBRCxDQUFmLElBQWdDLEtBQUtvVSxPQUFMLENBQWFLLE1BQWIsQ0FBb0J6USxJQUFwQixDQUF5QixLQUFLb1EsT0FBOUI7QUFBOUQsU0FBZixDQUFkO0FBQ0g7O0FBQ0QsV0FBT3l5QixRQUFQO0FBQ0g7O0FBRURobUIsU0FBTyxDQUFDbTdCLEtBQUQsRUFBUTtBQUFDLFdBQU8sS0FBS3FCLFNBQUwsQ0FBZXJCLEtBQUssQ0FBQzdxQyxNQUFOLEdBQWU2cUMsS0FBSyxDQUFDN3FDLE1BQU4sQ0FBYTBQLE9BQWIsRUFBZixHQUF3Q203QixLQUFLLENBQUNyekMsSUFBN0QsQ0FBUDtBQUEyRTs7QUFDM0ZtWSxXQUFTLENBQUNrN0IsS0FBRCxFQUFRO0FBQUMsV0FBTyxLQUFLcUIsU0FBTCxDQUFlckIsS0FBSyxDQUFDN3FDLE1BQU4sR0FBZTZxQyxLQUFLLENBQUM3cUMsTUFBTixDQUFhMlAsU0FBYixFQUFmLEdBQTBDazdCLEtBQUssQ0FBQ3owQyxNQUEvRCxDQUFQO0FBQStFOztBQUNqR3daLGdCQUFjLENBQUNpN0IsS0FBRCxFQUFRO0FBQUMsV0FBTyxLQUFLcUIsU0FBTCxDQUFlckIsS0FBSyxDQUFDN3FDLE1BQU4sR0FBZTZxQyxLQUFLLENBQUM3cUMsTUFBTixDQUFhNFAsY0FBYixFQUFmLEdBQStDaTdCLEtBQUssQ0FBQ2g5QyxXQUFwRSxDQUFQO0FBQXlGOztBQUNoSEosWUFBVSxDQUFDbzlDLEtBQUQsRUFBUTtBQUFDLFdBQU8sS0FBS3FCLFNBQUwsQ0FBZXJCLEtBQUssQ0FBQzdxQyxNQUFOLEdBQWU2cUMsS0FBSyxDQUFDN3FDLE1BQU4sQ0FBYXZTLFVBQWIsRUFBZixHQUEyQ285QyxLQUFLLENBQUNuNUIsT0FBaEUsQ0FBUDtBQUFpRjs7QUFFcEdpOUIsb0JBQWtCLEdBQUU7QUFDaEIsUUFBRyxDQUFDcmhELE1BQU0sQ0FBQ3NoRCxrQkFBWCxFQUE4QixPQUFPLElBQVA7QUFDOUIsUUFBRyxDQUFDdGhELE1BQU0sQ0FBQ3VoRCxhQUFYLEVBQXlCLE9BQU8sSUFBUDtBQUN6QixRQUFHLE9BQU92aEQsTUFBTSxDQUFDdWhELGFBQVAsQ0FBcUJDLFFBQTVCLEtBQXlDLFVBQTVDLEVBQXVELE9BQU8sSUFBUDtBQUN2RCxRQUFHLENBQUMsS0FBS3BCLFNBQVQsRUFBbUIsT0FBTyxJQUFQO0FBRW5CLFFBQUlxQixnQkFBZ0IsR0FBRyxLQUF2QjtBQUNBLFFBQUlDLE9BQUo7QUFDQSx3QkFBTyxvQkFBQyxxREFBRDtBQUFhLFVBQUksRUFBQztBQUFsQixvQkFDSDtBQUFNLFdBQUssRUFBRTtBQUFDQyxrQkFBVSxFQUFFO0FBQWIsT0FBYjtBQUFtQyxrQkFBWSxFQUFFLE1BQU07QUFDL0NGLHdCQUFnQixHQUFHLEtBQW5CO0FBQ0FDLGVBQU8sQ0FBQzFMLElBQVI7QUFDSDtBQUhMLG9CQUlJLG9CQUFDLFNBQUQsQ0FBVyxHQUFYLENBQWUsVUFBZixDQUEwQixNQUExQixDQUFpQyxNQUFqQztBQUF3QyxTQUFHLEVBQUMsbUJBQTVDO0FBQWdFLFdBQUssRUFBQyxPQUF0RTtBQUE4RSxVQUFJLEVBQUMsUUFBbkY7QUFBNEYsVUFBSSxFQUFDLEtBQWpHO0FBQXVHLGdCQUFVLEVBQUMsU0FBbEg7QUFBNEgsYUFBTyxFQUFFLE1BQU07QUFDdkksWUFBRztBQUNDanpDLGlFQUFLLENBQUNxRyxTQUFOLENBQWdCLGtDQUFoQixFQUFvRDtBQUFDMUksZ0JBQUksRUFBRTtBQUFQLFdBQXBEO0FBQ0FWLGdCQUFNLENBQUN1aEQsYUFBUCxDQUFxQkMsUUFBckIsR0FDQy82QixJQURELENBQ00sTUFBTTtBQUNSMWpCLG1FQUFLLENBQUNxRyxTQUFOLENBQWdCLCtCQUFoQixFQUFpRDtBQUFDMUksa0JBQUksRUFBRTtBQUFQLGFBQWpEO0FBQ0gsV0FIRCxFQUdHcTBCLEtBSEgsQ0FHUy9WLEdBQUcsSUFBSTtBQUNaelQsbUJBQU8sQ0FBQ21NLEtBQVIsQ0FBY3NILEdBQWQ7QUFDQWpjLG1FQUFLLENBQUNxRyxTQUFOLENBQWdCLHlDQUFoQixFQUEyRDtBQUFDMUksa0JBQUksRUFBRTtBQUFQLGFBQTNEO0FBQ0gsV0FORDtBQU9ILFNBVEQsQ0FTQyxPQUFNZ0gsQ0FBTixFQUFRO0FBQ0w2RCxpQkFBTyxDQUFDbU0sS0FBUixDQUFjaFEsQ0FBZDtBQUNBM0UsaUVBQUssQ0FBQ3FHLFNBQU4sQ0FBZ0IseUNBQWhCLEVBQTJEO0FBQUMxSSxnQkFBSSxFQUFFO0FBQVAsV0FBM0Q7QUFDSDtBQUNKLE9BZEQ7QUFjRyxhQUFPLEVBQUUsS0FkWjtBQWNtQixjQUFRLEVBQUUsS0FkN0I7QUFjb0Msa0JBQVksRUFBRSxNQUFNO0FBQ3BELFlBQUcsQ0FBQyxLQUFLcTlDLElBQUwsQ0FBVTZELGlCQUFkLEVBQWdDO0FBQ2hDLFlBQUksQ0FBQzVoRCxNQUFNLENBQUN1aEQsYUFBUixJQUF5QixDQUFDdmhELE1BQU0sQ0FBQ3VoRCxhQUFQLENBQXFCbDhCLE9BQW5ELEVBQTREO0FBQzVELFlBQUdvOEIsZ0JBQUgsRUFBb0I7QUFDcEJDLGVBQU8sR0FBRyxJQUFJRyxpREFBSixDQUFvQixLQUFLOUQsSUFBTCxDQUFVNkQsaUJBQVYsQ0FBNEI3RCxJQUE1QixDQUFpQzl6QixRQUFqQyxDQUEwQzh6QixJQUExQyxDQUErQzlXLE1BQW5FLEVBQTJFaGxDLE1BQU0sQ0FBQ3loQixNQUFQLENBQWMxakIsTUFBTSxDQUFDdWhELGFBQVAsQ0FBcUJsOEIsT0FBbkMsRUFBNEN4YixHQUE1QyxDQUFnRHM3QixDQUFDLElBQUlBLENBQUMsQ0FBQ2o3QixJQUF2RCxFQUE2RGtELElBQTdELENBQWtFLElBQWxFLENBQTNFLEVBQW9KO0FBQzFKNFosY0FBSSxFQUFFLFFBRG9KO0FBRTFKODZCLHNCQUFZLEVBQUU7QUFGNEksU0FBcEosQ0FBVjtBQUlBSixlQUFPLENBQUN6TCxJQUFSO0FBQ0F3TCx3QkFBZ0IsR0FBRyxJQUFuQjtBQUNIO0FBeEJELDJCQUpKLENBREcsQ0FBUDtBQWtDSDs7QUFFRDUwQyxRQUFNLEdBQUc7QUFDTCxVQUFNazFDLFdBQVcsZ0JBQUcsb0JBQUMsT0FBRDtBQUFTLFdBQUssRUFBQyxPQUFmO0FBQXVCLGNBQVEsRUFBQyxLQUFoQztBQUFzQyxVQUFJLEVBQUM7QUFBM0MsT0FDZC8wQyxLQUFELGlCQUNELG9CQUFDLG1EQUFELGVBQWdCQSxLQUFoQjtBQUF1QixlQUFTLEVBQUMsb0NBQWpDO0FBQXNFLFVBQUksRUFBQyxNQUEzRTtBQUFrRixhQUFPLEVBQUUsWUFBWTtBQUNuRyxZQUFJLEtBQUtvekMsU0FBVCxFQUFvQi84Qyw2REFBWSxDQUFDcWlDLGdCQUFiLEdBQXBCLEtBQ0twaUMsNkRBQVcsQ0FBQ21xQyxlQUFaO0FBQ0wsYUFBS25nQyxXQUFMO0FBQ0g7QUFKRCxPQUZnQixDQUFwQjtBQVFBLFVBQU0wMEMsVUFBVSxHQUFHLEtBQUtsQixTQUFMLEVBQW5CO0FBRUEsd0JBQU8sb0JBQUMsc0RBQUQ7QUFBZSxXQUFLLEVBQUcsR0FBRSxLQUFLOXpDLEtBQUwsQ0FBV3RNLElBQVgsQ0FBZ0I2WSxXQUFoQixFQUE4QixJQUFHeW9DLFVBQVUsQ0FBQ3I3QyxNQUFPO0FBQTVFLG9CQUNILG9CQUFDLFNBQUQsQ0FBVyxHQUFYLENBQWUsVUFBZixDQUEwQixNQUExQixDQUFpQyxNQUFqQztBQUF3QyxTQUFHLEVBQUMsZUFBNUM7QUFBNEQsV0FBSyxFQUFDLE9BQWxFO0FBQ0ksVUFBSSxFQUFDLFFBRFQ7QUFDa0IsVUFBSSxFQUFDLEtBRHZCO0FBQzZCLGdCQUFVLEVBQUMsU0FEeEM7QUFDa0QsYUFBTyxFQUFFLEtBQUs0NUMsVUFBTCxDQUFnQmg3QyxJQUFoQixDQUFxQixJQUFyQixDQUQzRDtBQUN1RixhQUFPLEVBQUUsS0FEaEc7QUFFSSxXQUFLLEVBQUU7QUFDSG84QyxrQkFBVSxFQUFFO0FBRFQ7QUFGWCxnQkFLVSxLQUFLdkIsU0FBTCxHQUFpQixRQUFqQixHQUE0QixPQUx0QyxZQURHLEVBUUYsS0FBS2lCLGtCQUFMLEVBUkUsRUFTRixDQUFDOS9DLHdEQUFjLENBQUMsV0FBRCxDQUFmLElBQWdDd2dELFdBVDlCLGVBVUg7QUFBSyxlQUFTLEVBQUM7QUFBZixvQkFDSSxvQkFBQywwREFBRDtBQUFRLGNBQVEsRUFBRSxLQUFLcDRDLE1BQXZCO0FBQStCLGlCQUFXLEVBQUcsVUFBUyxLQUFLcUQsS0FBTCxDQUFXdE0sSUFBSztBQUF0RSxNQURKLGVBRUk7QUFBSyxlQUFTLEVBQUM7QUFBZixvQkFDSTtBQUFLLGVBQVMsRUFBQztBQUFmLG9CQUNJO0FBQU8sZUFBUyxFQUFDO0FBQWpCLGtCQURKLGVBRUksb0JBQUMsNERBQUQ7QUFBVSxhQUFPLEVBQUUsS0FBS2lnRCxXQUF4QjtBQUFxQyxjQUFRLEVBQUUsS0FBSzNNLElBQXBEO0FBQTBELFdBQUssRUFBQztBQUFoRSxNQUZKLENBREosZUFLSTtBQUFLLGVBQVMsRUFBQztBQUFmLG9CQUNJO0FBQU8sZUFBUyxFQUFDO0FBQWpCLGdCQURKLGVBRUksb0JBQUMsNERBQUQ7QUFBVSxhQUFPLEVBQUUsS0FBSzRNLFVBQXhCO0FBQW9DLGNBQVEsRUFBRSxLQUFLUCxPQUFuRDtBQUE0RCxXQUFLLEVBQUM7QUFBbEUsTUFGSixDQUxKLENBRkosQ0FWRyxlQXdCSDtBQUFLLGVBQVMsRUFBQztBQUFmLE9BQTBDMkIsVUFBMUMsQ0F4QkcsQ0FBUDtBQTBCSDs7QUFyT3FEO0FBd08xRCxNQUFNdlYsY0FBYyxHQUFHRSxRQUFRLENBQUM5bkMsU0FBVCxDQUFtQmdJLE1BQTFDO0FBQ0E1SyxNQUFNLENBQUNZLGNBQVAsQ0FBc0I4cEMsUUFBUSxDQUFDOW5DLFNBQS9CLEVBQTBDLFFBQTFDLEVBQW9EO0FBQ2hENm5DLFlBQVUsRUFBRSxLQURvQztBQUVoRGpuQyxjQUFZLEVBQUUsS0FGa0M7QUFHaERnRyxLQUFHLEVBQUUsWUFBVztBQUFDRixXQUFPLENBQUN2SSxJQUFSLENBQWEscUdBQWI7QUFBcUgsR0FIdEY7QUFJaERGLEtBQUcsRUFBRSxNQUFNMnBDO0FBSnFDLENBQXBELEU7Ozs7Ozs7Ozs7OztBQ2hRQTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU10bEIsTUFBTixTQUFxQi9qQixtREFBSSxDQUFDbXlDLGNBQTFCLENBQXlDO0FBQ3BEMW9DLFFBQU0sR0FBRztBQUNMLFdBQU96SixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0gsS0FERyxFQUVIO0FBQUN1MUIsWUFBTSxFQUFFLE1BQVQ7QUFBaUIvTCxXQUFLLEVBQUUsS0FBSzlnQixLQUFMLENBQVc4VSxJQUFYLElBQW1CLE1BQTNDO0FBQW1EdmQsZUFBUyxFQUFFLGFBQWEsS0FBS3lJLEtBQUwsQ0FBV3pJLFNBQXRGO0FBQWlHK0ssV0FBSyxFQUFFO0FBQUMyeUMsZ0JBQVEsRUFBRSxTQUFYO0FBQXNCQyxnQkFBUSxFQUFFLFNBQWhDO0FBQTJDQyxxQkFBYSxFQUFFLE9BQTFEO0FBQW1FQyxzQkFBYyxFQUFFO0FBQW5GLE9BQXhHO0FBQXFNM2YsYUFBTyxFQUFFO0FBQTlNLEtBRkcsRUFHSHIvQixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLFVBQXpCLEVBQXFDLElBQXJDLENBSEcsRUFJSGxCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUMsSUFBakMsRUFDSWxCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQ3pELFFBQUUsRUFBRTtBQUFMLEtBQW5DLEVBQW9EdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixjQUF6QixFQUF5QztBQUFDLFlBQU0sSUFBUDtBQUFhLFlBQU0sR0FBbkI7QUFBd0Isc0JBQWdCLElBQXhDO0FBQThDLHFCQUFlO0FBQTdELEtBQXpDLENBQXBELENBREosRUFFSWxCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQ3pELFFBQUUsRUFBRTtBQUFMLEtBQW5DLEVBQW9EdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixjQUF6QixFQUF5QztBQUFDLFlBQU0sSUFBUDtBQUFhLFlBQU0sR0FBbkI7QUFBd0Isc0JBQWdCLElBQXhDO0FBQThDLHFCQUFlO0FBQTdELEtBQXpDLENBQXBELENBRkosRUFHSWxCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsUUFBekIsRUFBbUM7QUFBQ3pELFFBQUUsRUFBRTtBQUFMLEtBQW5DLEVBQW9EdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixjQUF6QixFQUF5QztBQUFDLFlBQU0sSUFBUDtBQUFhLFlBQU0sR0FBbkI7QUFBd0Isc0JBQWdCLElBQXhDO0FBQThDLHFCQUFlO0FBQTdELEtBQXpDLENBQXBELENBSEosQ0FKRyxFQVNIbEIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixHQUF6QixFQUE4QixJQUE5QixFQUNJbEIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDZ0wsV0FBSyxFQUFFO0FBQUNxQixjQUFNLEVBQUU7QUFBVCxPQUFSO0FBQW1DOHVCLE9BQUMsRUFBRSw0akJBQXRDO0FBQW9tQm9ELFVBQUksRUFBRSxTQUExbUI7QUFBcW5CdHpCLGFBQU8sRUFBRTtBQUE5bkIsS0FBakMsQ0FESixFQUVJbk0sbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDZ0wsV0FBSyxFQUFFO0FBQUNxQixjQUFNLEVBQUU7QUFBVCxPQUFSO0FBQW1DOHVCLE9BQUMsRUFBRSw2YkFBdEM7QUFBcWVvRCxVQUFJLEVBQUUsU0FBM2U7QUFBc2Z0ekIsYUFBTyxFQUFFO0FBQS9mLEtBQWpDLENBRkosRUFHSW5NLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ2dMLFdBQUssRUFBRTtBQUFDcUIsY0FBTSxFQUFFO0FBQVQsT0FBUjtBQUFtQzh1QixPQUFDLEVBQUUsc2tCQUF0QztBQUE4bUJvRCxVQUFJLEVBQUUsU0FBcG5CO0FBQStuQnR6QixhQUFPLEVBQUU7QUFBeG9CLEtBQWpDLENBSEosQ0FURyxDQUFQO0FBZUg7O0FBakJtRCxDOzs7Ozs7Ozs7Ozs7QUNGeEQ7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNOHlDLFlBQU4sU0FBMkJqL0MsbURBQUksQ0FBQ215QyxjQUFoQyxDQUErQztBQUMxRHh4QyxhQUFXLENBQUNpSixLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBSzB5QixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhbjZCLElBQWIsQ0FBa0IsSUFBbEIsQ0FBZjtBQUNBLFNBQUs4M0MsZUFBTDtBQUNIOztBQUVEQSxpQkFBZSxHQUFHO0FBQ2QsU0FBS3Z5QyxLQUFMLEdBQWE7QUFDVDQrQixhQUFPLEVBQUUsS0FBSzE4QixLQUFMLENBQVcwOEIsT0FBWCxJQUFzQjtBQUR0QixLQUFiO0FBR0g7O0FBRUQ3OEIsUUFBTSxHQUFHO0FBQ0wsV0FBT3pKLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSCxJQURHLEVBRUgsSUFGRyxFQUdIbEIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUUsY0FBWWtELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNDZDLGVBQXJCLEVBQXNDLENBQXRDLEVBQXlDQyxRQUFqRTtBQUEyRTdpQixhQUFPLEVBQUUsS0FBS0E7QUFBekYsS0FGSixFQUdJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFLG9CQUFrQmtELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDODZDLGFBQXJCLEVBQW9DLENBQXBDLEVBQXVDQTtBQUFyRSxLQUZKLEVBR0lwL0MsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixPQUF6QixFQUFrQztBQUFDQyxlQUFTLEVBQUVrRCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzQ2QyxlQUFyQixFQUFzQyxDQUF0QyxFQUF5Q0EsZUFBckQ7QUFBc0U1WSxhQUFPLEVBQUUsS0FBSzUrQixLQUFMLENBQVc0K0IsT0FBMUY7QUFBbUd2MEIsY0FBUSxFQUFFLE1BQU0sQ0FBRSxDQUFySDtBQUF1SHpVLFVBQUksRUFBRTtBQUE3SCxLQUFsQyxDQUhKLEVBSUkwQyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDLElBQWpDLENBSkosQ0FISixFQVNJbEIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLE1BREosRUFFSSxJQUZKLEVBR0ksS0FBSzBJLEtBQUwsQ0FBV2hELElBSGYsQ0FUSixDQUhHLENBQVA7QUFtQkg7O0FBRUQwMUIsU0FBTyxHQUFHO0FBQ04sU0FBSzF5QixLQUFMLENBQVdtSSxRQUFYLENBQW9CLEtBQUtuSSxLQUFMLENBQVduTSxFQUEvQixFQUFtQyxDQUFDLEtBQUtpSyxLQUFMLENBQVc0K0IsT0FBL0M7QUFDQSxTQUFLdVQsUUFBTCxDQUFjO0FBQ1Z2VCxhQUFPLEVBQUUsQ0FBQyxLQUFLNStCLEtBQUwsQ0FBVzQrQjtBQURYLEtBQWQ7QUFHSDs7QUF4Q3lELEM7Ozs7Ozs7Ozs7OztBQ0Y5RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxNQUFNMTdCLEtBQUssR0FBRzVLLG1EQUFJLENBQUM0SyxLQUFuQjtBQUdlLE1BQU15MEMsTUFBTixTQUFxQnowQyxLQUFLLENBQUNDLFNBQTNCLENBQXFDO0FBQ2hEbEssYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtsQyxLQUFMLEdBQWE7QUFBQ2pGLFVBQUksRUFBRSxLQUFQO0FBQWNqRCxXQUFLLEVBQUUsS0FBS29LLEtBQUwsQ0FBV3BLLEtBQVgsSUFBb0IsS0FBS29LLEtBQUwsQ0FBV2dHLE9BQVgsQ0FBbUIsQ0FBbkIsRUFBc0JwUTtBQUEvRCxLQUFiO0FBQ0EsU0FBSzgvQyxRQUFMLEdBQWdCMTBDLEtBQUssQ0FBQzIwQyxTQUFOLEVBQWhCO0FBQ0EsU0FBS3h0QyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBYzVQLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLcTlDLFFBQUwsR0FBZ0IsS0FBS0EsUUFBTCxDQUFjcjlDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLczlDLFFBQUwsR0FBZ0IsS0FBS0EsUUFBTCxDQUFjdDlDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDSDs7QUFFRHE5QyxVQUFRLENBQUNwb0IsS0FBRCxFQUFRO0FBQ1pBLFNBQUssQ0FBQ2xLLGNBQU47QUFDQSxTQUFLMnNCLFFBQUwsQ0FBYztBQUFDcDNDLFVBQUksRUFBRTtBQUFQLEtBQWQsRUFBNEIsTUFBTTtBQUM5QnhCLGNBQVEsQ0FBQ3VLLGdCQUFULENBQTBCLE9BQTFCLEVBQW1DLEtBQUtpMEMsUUFBeEM7QUFDSCxLQUZEO0FBR0g7O0FBRURBLFVBQVEsR0FBRztBQUNQLFNBQUs1RixRQUFMLENBQWM7QUFBQ3AzQyxVQUFJLEVBQUU7QUFBUCxLQUFkLEVBQTZCLE1BQU07QUFDL0J4QixjQUFRLENBQUNxSyxtQkFBVCxDQUE2QixPQUE3QixFQUFzQyxLQUFLbTBDLFFBQTNDO0FBQ0gsS0FGRDtBQUdIOztBQUVEMXRDLFVBQVEsQ0FBQ3ZTLEtBQUQsRUFBUTtBQUNaLFNBQUtxNkMsUUFBTCxDQUFjO0FBQUNyNkM7QUFBRCxLQUFkO0FBQ0EsUUFBSSxLQUFLb0ssS0FBTCxDQUFXbUksUUFBZixFQUF5QixLQUFLbkksS0FBTCxDQUFXbUksUUFBWCxDQUFvQnZTLEtBQXBCO0FBQzVCOztBQUVELE1BQUlxcEIsUUFBSixHQUFlO0FBQUMsV0FBTyxLQUFLamYsS0FBTCxDQUFXZ0csT0FBWCxDQUFtQnhHLElBQW5CLENBQXdCK3lCLENBQUMsSUFBSUEsQ0FBQyxDQUFDMzhCLEtBQUYsSUFBVyxLQUFLa0ksS0FBTCxDQUFXbEksS0FBbkQsQ0FBUDtBQUFrRTs7QUFFbEYsTUFBSW9RLE9BQUosR0FBYztBQUNWLFVBQU1pWixRQUFRLEdBQUcsS0FBS0EsUUFBdEI7QUFDQSx3QkFBTztBQUFLLGVBQVMsRUFBQztBQUFmLE9BQ0YsS0FBS2pmLEtBQUwsQ0FBV2dHLE9BQVgsQ0FBbUJuSixHQUFuQixDQUF1Qmk1QyxHQUFHLGlCQUN2QjtBQUFLLGVBQVMsRUFBRyxtQkFBa0I3MkIsUUFBUSxDQUFDcnBCLEtBQVQsSUFBa0JrZ0QsR0FBRyxDQUFDbGdELEtBQXRCLEdBQThCLFdBQTlCLEdBQTRDLEVBQUcsRUFBbEY7QUFBcUYsYUFBTyxFQUFFLEtBQUt1UyxRQUFMLENBQWM1UCxJQUFkLENBQW1CLElBQW5CLEVBQXlCdTlDLEdBQUcsQ0FBQ2xnRCxLQUE3QjtBQUE5RixPQUFvSWtnRCxHQUFHLENBQUN4d0IsS0FBeEksQ0FESCxDQURFLENBQVA7QUFLSDs7QUFFRHpsQixRQUFNLEdBQUc7QUFDTCxVQUFNeUMsS0FBSyxHQUFHLEtBQUt0QyxLQUFMLENBQVdzQyxLQUFYLElBQW9CLGFBQXBCLEdBQW9DLHdCQUFwQyxHQUErRCxFQUE3RTtBQUNBLFVBQU15ekMsTUFBTSxHQUFHLEtBQUtqNEMsS0FBTCxDQUFXakYsSUFBWCxHQUFrQixZQUFsQixHQUFpQyxFQUFoRDtBQUNBLHdCQUFRO0FBQUssZUFBUyxFQUFHLFlBQVd5SixLQUFNLEdBQUV5ekMsTUFBTyxFQUEzQztBQUE4QyxhQUFPLEVBQUUsS0FBS0gsUUFBNUQ7QUFBc0UsU0FBRyxFQUFFLEtBQUtGO0FBQWhGLG9CQUNJO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBa0MsS0FBS3oyQixRQUFMLENBQWNxRyxLQUFoRCxDQURKLGVBRUksb0JBQUMsd0RBQUQ7QUFBTyxlQUFTLEVBQUM7QUFBakIsTUFGSixFQUdLLEtBQUt4bkIsS0FBTCxDQUFXakYsSUFBWCxJQUFtQixLQUFLbU4sT0FIN0IsQ0FBUjtBQUtIOztBQS9DK0MsQyxDQWtEcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVTs7Ozs7Ozs7Ozs7O0FDakVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBLE1BQU1oRixLQUFLLEdBQUc1SyxtREFBSSxDQUFDNEssS0FBbkI7QUFFZSxNQUFNZzFDLE1BQU4sU0FBcUJoMUMsS0FBSyxDQUFDQyxTQUEzQixDQUFxQztBQUNoRGxLLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBTztBQUNkLFVBQU1BLEtBQU47QUFDQSxTQUFLbEMsS0FBTCxHQUFhO0FBQ1Q2bkIsYUFBTyxFQUFFO0FBREEsS0FBYjtBQUdIOztBQUNEOWxCLFFBQU0sR0FBRztBQUNMLFVBQU10SSxTQUFTLEdBQUcsQ0FBQyxtQkFBRCxDQUFsQjtBQUNBLFFBQUcsS0FBS3VHLEtBQUwsQ0FBVzZuQixPQUFkLEVBQXNCcHVCLFNBQVMsQ0FBQzRJLElBQVYsQ0FBZSxTQUFmO0FBQ3RCLHdCQUFPO0FBQUssZUFBUyxFQUFFNUksU0FBUyxDQUFDNkksSUFBVixDQUFlLEdBQWY7QUFBaEIsb0JBQ0s7QUFBTyxjQUFRLEVBQUUsS0FBS0osS0FBTCxDQUFXbUksUUFBNUI7QUFBc0MsZUFBUyxFQUFFLEtBQUtuSSxLQUFMLENBQVdpMkMsU0FBNUQ7QUFBdUUsVUFBSSxFQUFDLE1BQTVFO0FBQ0EsZUFBUyxFQUFDLFdBRFY7QUFDc0IsaUJBQVcsRUFBRSxLQUFLajJDLEtBQUwsQ0FBV2syQyxXQUQ5QztBQUMyRCxlQUFTLEVBQUMsSUFEckU7QUFFQSxhQUFPLEVBQUUsTUFBTTtBQUNYLGFBQUtqRyxRQUFMLENBQWM7QUFBQ3RxQixpQkFBTyxFQUFFO0FBQVYsU0FBZDtBQUNILE9BSkQ7QUFJRyxZQUFNLEVBQUUsTUFBTTtBQUNiLGFBQUtzcUIsUUFBTCxDQUFjO0FBQUN0cUIsaUJBQU8sRUFBRTtBQUFWLFNBQWQ7QUFDSDtBQU5ELE1BREwsZUFRSyxvQkFBQyxxREFBRCxPQVJMLENBQVA7QUFVSDs7QUFwQitDLEM7Ozs7Ozs7Ozs7OztBQ0xwRDtBQUFBO0FBQUE7QUFBQTtBQUVBLE1BQU0za0IsS0FBSyxHQUFHNUssbURBQUksQ0FBQzRLLEtBQW5CO0FBRWUsTUFBTWk5QixNQUFOLFNBQXFCajlCLEtBQUssQ0FBQ0MsU0FBM0IsQ0FBcUM7QUFDaERsSyxhQUFXLENBQUNpSixLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS2xDLEtBQUwsR0FBYTtBQUFDNCtCLGFBQU8sRUFBRSxLQUFLMThCLEtBQUwsQ0FBVzA4QjtBQUFyQixLQUFiO0FBQ0EsU0FBS3YwQixRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBYzVQLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDQSxTQUFLNDlDLE1BQUwsZ0JBQWMsb0JBQUMsU0FBRCxDQUFXLEdBQVgsQ0FBZSxVQUFmLENBQTBCLE1BQTFCLENBQWlDLE1BQWpDO0FBQXdDLGNBQVEsRUFBRSxLQUFLaHVDLFFBQXZEO0FBQWlFLFdBQUssRUFBRSxLQUFLckssS0FBTCxDQUFXNCtCO0FBQW5GLE1BQWQ7QUFDSDs7QUFFRHYwQixVQUFRLENBQUN2UyxLQUFELEVBQVE7QUFDWixRQUFJLEtBQUtvSyxLQUFMLENBQVcwbUIsUUFBZixFQUF5QjtBQUN6QixTQUFLMW1CLEtBQUwsQ0FBV21JLFFBQVgsQ0FBb0J2UyxLQUFwQjtBQUNBLFNBQUtxNkMsUUFBTCxDQUFjO0FBQUN2VCxhQUFPLEVBQUU5bUM7QUFBVixLQUFkO0FBQ0g7O0FBRURpSyxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtzMkMsTUFBWjtBQUNIOztBQWhCK0MsQzs7Ozs7Ozs7Ozs7O0FDSnBEO0FBQUE7QUFBQTtBQUFBO0FBRWUsTUFBTUMsaUJBQU4sU0FBZ0NoZ0QsbURBQUksQ0FBQ215QyxjQUFyQyxDQUFvRDtBQUMvRHh4QyxhQUFXLENBQUNpSixLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRUQsYUFBV2lPLFdBQVgsR0FBeUI7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBRWxEcE8sUUFBTSxHQUFHO0FBQ0w7QUFDQSxRQUFJcE0sS0FBSyxHQUFHLEtBQUt1TSxLQUFMLENBQVd2TSxLQUFYLEdBQW1CMkMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixJQUF6QixFQUErQjtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUEvQixFQUE4RixLQUFLeUksS0FBTCxDQUFXdk0sS0FBekcsQ0FBbkIsR0FBcUksSUFBako7QUFDQSxXQUFPLENBQ0hBLEtBREcsRUFFSCxLQUFLdU0sS0FBTCxDQUFXQyxRQUZSLENBQVA7QUFJQSxXQUFPN0osbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNILEtBREcsRUFFSDtBQUFDQyxlQUFTLEVBQUU4K0MsYUFBYSxDQUFDQyxhQUFkLEdBQThCLEdBQTlCLEdBQWtDRCxhQUFhLENBQUNFLG9CQUFoRCxHQUFxRSx5QkFBakY7QUFBNEdqMEMsV0FBSyxFQUFFO0FBQUNvc0MsZUFBTyxFQUFFO0FBQVY7QUFBbkgsS0FGRyxFQUdIajdDLEtBSEcsRUFJSCxLQUFLdU0sS0FBTCxDQUFXQyxRQUpSLENBQVA7QUFNSDs7QUFwQjhELEM7Ozs7Ozs7Ozs7OztBQ0ZuRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRWUsTUFBTXUyQyxhQUFOLFNBQTRCcGdELG1EQUFJLENBQUNteUMsY0FBakMsQ0FBZ0Q7QUFFM0R4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFVBQU1tVSxJQUFJLEdBQUcsSUFBYjtBQUNBQSxRQUFJLENBQUNuVSxLQUFMLENBQVd5MkMsS0FBWCxHQUFtQixDQUFuQjtBQUNBdGlDLFFBQUksQ0FBQ2s4QixlQUFMO0FBQ0FsOEIsUUFBSSxDQUFDNFAsTUFBTCxHQUFjNVAsSUFBSSxDQUFDNFAsTUFBTCxDQUFZeHJCLElBQVosQ0FBaUI0YixJQUFqQixDQUFkO0FBQ0FBLFFBQUksQ0FBQ3VpQyxjQUFMLEdBQXNCdGdELG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJxL0MsMERBQXpCLEVBQWdEO0FBQUM1eUIsWUFBTSxFQUFFNVAsSUFBSSxDQUFDNFA7QUFBZCxLQUFoRCxDQUF0QjtBQUNBNVAsUUFBSSxDQUFDdWUsT0FBTCxHQUFldmUsSUFBSSxDQUFDdWUsT0FBTCxDQUFhbjZCLElBQWIsQ0FBa0I0YixJQUFsQixDQUFmO0FBQ0FBLFFBQUksQ0FBQ3lpQyxTQUFMLEdBQWlCemlDLElBQUksQ0FBQ3lpQyxTQUFMLENBQWVyK0MsSUFBZixDQUFvQjRiLElBQXBCLENBQWpCO0FBQ0FBLFFBQUksQ0FBQzBpQyxPQUFMLEdBQWUxaUMsSUFBSSxDQUFDMGlDLE9BQUwsQ0FBYXQrQyxJQUFiLENBQWtCNGIsSUFBbEIsQ0FBZjtBQUNBQSxRQUFJLENBQUMyaUMsTUFBTCxHQUFjM2lDLElBQUksQ0FBQzJpQyxNQUFMLENBQVl2K0MsSUFBWixDQUFpQjRiLElBQWpCLENBQWQ7QUFDSDs7QUFFRGs4QixpQkFBZSxHQUFHO0FBQ2QsU0FBS3Z5QyxLQUFMLEdBQWE7QUFDVGk1QyxjQUFRLEVBQUUsS0FBSy8yQyxLQUFMLENBQVcrMkMsUUFBWCxJQUF1QjNnRCxtREFBSSxDQUFDcXdDO0FBRDdCLEtBQWI7QUFHSDs7QUFFRDlrQyxtQkFBaUIsR0FBRztBQUNoQjtBQUNBLFNBQUtxMUMsTUFBTCxHQUFjQyxHQUFHLENBQUMxZSxJQUFKLENBQVMscUJBQVQsQ0FBZDtBQUNBLFNBQUt5ZSxNQUFMLENBQVlFLFFBQVosQ0FBcUIsbUJBQXJCO0FBQ0EsU0FBS0YsTUFBTCxDQUFZOVgsT0FBWixDQUFvQmlZLE9BQXBCLENBQTRCLGNBQTVCO0FBQ0EsU0FBS0gsTUFBTCxDQUFZSSxrQkFBWixDQUErQixLQUEvQjtBQUNBLFNBQUtKLE1BQUwsQ0FBWUssV0FBWixDQUF3QixFQUF4QjtBQUNBLFNBQUtMLE1BQUwsQ0FBWXpwQixFQUFaLENBQWUsUUFBZixFQUF5QixNQUFNO0FBQzNCLFVBQUksQ0FBQ2g1Qix3REFBYyxDQUFDLFdBQUQsQ0FBbkIsRUFBa0M7QUFDbEMsV0FBS3NpRCxPQUFMO0FBQ0EsV0FBS0QsU0FBTDtBQUNILEtBSkQ7QUFLSDs7QUFFRG4xQyxzQkFBb0IsR0FBRztBQUNuQixTQUFLdTFDLE1BQUwsQ0FBWU0sT0FBWjtBQUNIOztBQUVEeEcsb0JBQWtCLENBQUN5RyxTQUFELEVBQVlDLFNBQVosRUFBdUI7QUFDckMsVUFBTXJqQyxJQUFJLEdBQUcsSUFBYjs7QUFDQSxRQUFJcWpDLFNBQVMsQ0FBQ1QsUUFBVixJQUFzQixDQUFDNWlDLElBQUksQ0FBQ3JXLEtBQUwsQ0FBV2k1QyxRQUF0QyxFQUFnRDtBQUM1QzNnRCx5REFBSSxDQUFDK3FCLFFBQUwsQ0FBY3MyQixzQkFBZCxDQUFxQ3RqQyxJQUFJLENBQUN1akMsWUFBMUM7QUFDSDtBQUNKOztBQUVEQyxZQUFVLEdBQUcsQ0FDWjs7QUFFRCxNQUFJM3hDLE9BQUosR0FBYztBQUNWLFdBQU87QUFDSDR4QyxpQkFBVyxFQUFFLElBRFY7QUFFSEMsVUFBSSxFQUFFLEtBRkg7QUFHSEMsZ0JBQVUsRUFBRSxDQUhUO0FBSUhyZSxXQUFLLEVBQUUsVUFKSjtBQUtIc2Usb0JBQWMsRUFBRTtBQUxiLEtBQVA7QUFPSDs7QUFFRCxNQUFJbjFDLEdBQUosR0FBVTtBQUNOLFVBQU1vMUMsS0FBSyxHQUFHdmhELDBEQUFTLENBQUM2UixTQUFWLENBQW9CLGFBQXBCLENBQWQ7O0FBQ0EsUUFBSTJ2QyxJQUFJLEdBQUcsRUFBWDs7QUFDQSxRQUFJRCxLQUFLLElBQUlBLEtBQUssS0FBSyxFQUF2QixFQUEyQjtBQUN2QkMsVUFBSSxHQUFHcGdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZa2dDLEtBQVosRUFBbUIsUUFBbkIsRUFBNkJqZ0MsUUFBN0IsQ0FBc0MsTUFBdEMsQ0FBUDtBQUNIOztBQUNELFdBQU9rZ0MsSUFBUDtBQUNIOztBQUVEQyxpQkFBZSxHQUFHO0FBQ2QsVUFBTUMsU0FBUyxHQUFHLEtBQUtwSCxJQUFMLENBQVVpRyxNQUFWLENBQWlCcGhELEtBQWpCLENBQXVCc0ssS0FBdkIsQ0FBNkIsSUFBN0IsRUFBbUN2RyxNQUFyRDtBQUNBLFFBQUl3K0MsU0FBUyxJQUFJLEtBQUtuNEMsS0FBTCxDQUFXeTJDLEtBQTVCLEVBQW1DO0FBQ25DLFNBQUsxRixJQUFMLENBQVUwRixLQUFWLENBQWdCM3BCLFdBQWhCLEdBQThCamhCLEtBQUssQ0FBQ2lNLElBQU4sQ0FBVyxJQUFJak0sS0FBSixDQUFVc3NDLFNBQVYsQ0FBWCxFQUFpQyxDQUFDcnZCLENBQUQsRUFBSXhjLENBQUosS0FBVUEsQ0FBQyxHQUFHLENBQS9DLEVBQWtEbE0sSUFBbEQsQ0FBdUQsS0FBdkQsSUFBZ0UsR0FBOUY7QUFDQSxTQUFLSixLQUFMLENBQVd5MkMsS0FBWCxHQUFtQjBCLFNBQW5CO0FBQ0g7O0FBRUR0NEMsUUFBTSxHQUFHO0FBQ0wsVUFBTXNVLElBQUksR0FBRyxJQUFiO0FBRUEsVUFBTTtBQUFDNGlDO0FBQUQsUUFBYTVpQyxJQUFJLENBQUNyVyxLQUF4QjtBQUNBLFdBQU8sQ0FDSGk1QyxRQUFRLElBQUkzZ0QsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNSLEtBRFEsRUFFUjtBQUFDekQsUUFBRSxFQUFFO0FBQUwsS0FGUSxFQUdSdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QjhnRCxzREFBekIsRUFBd0M7QUFBQ3A3QyxVQUFJLEVBQUU7QUFBUCxLQUF4QyxDQUhRLEVBSVI1RyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksSUFESixFQUVJLElBRkosRUFHSSxpQkFISixDQUpRLEVBU1JsQixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksUUFESixFQUVJO0FBQUNDLGVBQVMsRUFBRSxpQkFBWjtBQUErQm03QixhQUFPLEVBQUUsTUFBTTtBQUN0Q3ZlLFlBQUksQ0FBQzRQLE1BQUw7QUFDSDtBQUZMLEtBRkosRUFLSSxRQUxKLENBVFEsQ0FEVCxFQWtCSCxDQUFDZ3pCLFFBQUQsSUFBYTNnRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ1QsS0FEUyxFQUVULElBRlMsRUFHVGxCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUI4Z0Qsc0RBQXpCLEVBQXdDO0FBQUNwN0MsVUFBSSxFQUFFO0FBQVAsS0FBeEMsQ0FIUyxFQUlUNUcsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUNJbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDekQsUUFBRSxFQUFFLHFCQUFMO0FBQTRCMEQsZUFBUyxFQUFFLFFBQXZDO0FBQWlEdTZDLFNBQUcsRUFBRTtBQUF0RCxLQUFoQyxFQUFpRzM5QixJQUFJLENBQUN2UixHQUF0RyxDQURKLENBSlMsRUFPVHhNLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ3pELFFBQUUsRUFBRTtBQUFMLEtBRkosRUFHSXVDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxJQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QitnRCxpREFBekIsRUFBbUM7QUFBQ3hrRCxRQUFFLEVBQUUsYUFBTDtBQUFvQm1KLFVBQUksRUFBRSxhQUExQjtBQUF5Q21MLGNBQVEsRUFBRSxLQUFLQSxRQUF4RDtBQUFrRXUwQixhQUFPLEVBQUVub0Msd0RBQWMsQ0FBQyxXQUFEO0FBQXpGLEtBQW5DLENBSEosQ0FISixFQVFJNkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDekQsUUFBRSxFQUFFO0FBQUwsS0FGSixFQUdJdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLFFBREosRUFFSTtBQUFDZ0wsV0FBSyxFQUFFO0FBQUNxc0Msb0JBQVksRUFBRSxhQUFmO0FBQThCMkosbUJBQVcsRUFBRTtBQUEzQyxPQUFSO0FBQXlFL2dELGVBQVMsRUFBRSxpQkFBcEY7QUFBdUdtN0IsYUFBTyxFQUFFLE1BQU07QUFDOUd2ZSxZQUFJLENBQUN1ZSxPQUFMLENBQWEsUUFBYjtBQUNIO0FBRkwsS0FGSixFQUtJLFFBTEosQ0FISixFQVVJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ2dMLFdBQUssRUFBRTtBQUFDcXNDLG9CQUFZLEVBQUUsR0FBZjtBQUFvQjRKLGtCQUFVLEVBQUUsbUJBQWhDO0FBQXFERCxtQkFBVyxFQUFFO0FBQWxFLE9BQVI7QUFBZ0cvZ0QsZUFBUyxFQUFFLGlCQUEzRztBQUE4SG03QixhQUFPLEVBQUUsTUFBTTtBQUNySXZlLFlBQUksQ0FBQ3VlLE9BQUwsQ0FBYSxNQUFiO0FBQ0g7QUFGTCxLQUZKLEVBS0ksTUFMSixDQVZKLEVBaUJJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ2dMLFdBQUssRUFBRTtBQUFDcXNDLG9CQUFZLEVBQUUsYUFBZjtBQUE4QjRKLGtCQUFVLEVBQUU7QUFBMUMsT0FBUjtBQUF3RWhoRCxlQUFTLEVBQUUsaUJBQW5GO0FBQXNHbTdCLGFBQU8sRUFBRSxNQUFNO0FBQzdHdmUsWUFBSSxDQUFDdWUsT0FBTCxDQUFhLFFBQWI7QUFDSDtBQUZMLEtBRkosRUFLSSxRQUxKLENBakJKLEVBd0JJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxNQURKLEVBRUk7QUFBQ2dMLFdBQUssRUFBRTtBQUFDazJDLGdCQUFRLEVBQUUsTUFBWDtBQUFtQjdELGtCQUFVLEVBQUU7QUFBL0I7QUFBUixLQUZKLEVBR0ksb0NBSEosQ0F4QkosRUE2Qkl2K0MsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUNJLFFBREosRUFFSW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBakMsRUFBd0QsTUFBeEQsQ0FGSixFQUdJLEdBSEosRUFJSW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBakMsRUFBd0QsR0FBeEQsQ0FKSixFQUtJLDJEQUxKLENBN0JKLENBUkosQ0FQUyxDQWxCVixDQUFQO0FBeUVIOztBQUVEbTdCLFNBQU8sQ0FBQytsQixHQUFELEVBQU07QUFDVCxVQUFNdGtDLElBQUksR0FBRyxJQUFiOztBQUNBLFlBQVFza0MsR0FBUjtBQUNJLFdBQUssUUFBTDtBQUNJdGtDLFlBQUksQ0FBQ3lpQyxTQUFMO0FBQ0E7O0FBQ0osV0FBSyxNQUFMO0FBQ0l6aUMsWUFBSSxDQUFDMGlDLE9BQUw7QUFDQTs7QUFDSixXQUFLLFFBQUw7QUFDSTFpQyxZQUFJLENBQUMyaUMsTUFBTDtBQUNBO0FBVFI7QUFXSDs7QUFFRDN1QyxVQUFRLENBQUN0VSxFQUFELEVBQUs2b0MsT0FBTCxFQUFjO0FBQ2xCLFlBQVE3b0MsRUFBUjtBQUNJLFdBQUssYUFBTDtBQUNJVSxnRUFBYyxDQUFDLFdBQUQsQ0FBZCxHQUE4Qm1vQyxPQUE5QjtBQUNBTSxzRUFBUSxDQUFDaGlCLFlBQVQ7QUFDQTtBQUpSO0FBTUg7O0FBRUQ0N0IsV0FBUyxHQUFHO0FBQ1I3eEMsNkRBQUcsQ0FBQ0ksV0FBSixDQUFnQixXQUFoQjtBQUNBSiw2REFBRyxDQUFDQyxRQUFKLENBQWEsV0FBYixFQUEwQixLQUFLZ3lDLE1BQUwsQ0FBWTlYLE9BQVosQ0FBb0J3WixRQUFwQixFQUExQjtBQUNIOztBQUVEN0IsU0FBTyxHQUFHO0FBQ05wZ0QsOERBQVMsQ0FBQzhSLFNBQVYsQ0FBb0IsYUFBcEIsRUFBbUNzUCxNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLay9CLE1BQUwsQ0FBWTlYLE9BQVosQ0FBb0J3WixRQUFwQixFQUFaLEVBQTRDLE9BQTVDLEVBQXFEM2dDLFFBQXJELENBQThELFFBQTlELENBQW5DO0FBQ0g7O0FBRUQrK0IsUUFBTSxHQUFHO0FBQ0wsVUFBTTNpQyxJQUFJLEdBQUcsSUFBYjtBQUNBQSxRQUFJLENBQUM4N0IsUUFBTCxDQUFjO0FBQ1Y4RyxjQUFRLEVBQUU7QUFEQSxLQUFkO0FBR0EsVUFBTTRCLEtBQUssR0FBR3hrQyxJQUFJLENBQUN1akMsWUFBbkI7O0FBQ0EsUUFBSSxDQUFDaUIsS0FBTCxFQUFZO0FBQ1JwNkMsYUFBTyxDQUFDQyxHQUFSLENBQVksNkJBQVo7QUFDQTtBQUNIOztBQUNEcEksdURBQUksQ0FBQytxQixRQUFMLENBQWN0aEIsTUFBZCxDQUFxQnNVLElBQUksQ0FBQ3VpQyxjQUExQixFQUEwQ2lDLEtBQTFDO0FBQ0g7O0FBRUQsTUFBSWpCLFlBQUosR0FBbUI7QUFDZixVQUFNa0IsS0FBSyxHQUFHN3pDLHlEQUFHLENBQUNrZixLQUFKLENBQVUsZ0NBQVYsQ0FBZDs7QUFDQSxRQUFJLENBQUMyMEIsS0FBTCxFQUFZO0FBQ1IsVUFBSSxDQUFDLEtBQUtDLGtCQUFMLEVBQUwsRUFBZ0MsT0FBTyxJQUFQO0FBQ2hDLGFBQU8sS0FBS25CLFlBQVo7QUFDSDs7QUFDRCxXQUFPa0IsS0FBUDtBQUNIOztBQUVEQyxvQkFBa0IsR0FBRztBQUNqQixVQUFNbDNCLEdBQUcsR0FBRzVjLHlEQUFHLENBQUNrZixLQUFKLENBQVUsWUFBVWx1QixzREFBSyxDQUFDc0osUUFBTixDQUFlNUUsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNpbkIsR0FBRixJQUFTam5CLENBQUMsQ0FBQ3FFLE1BQTlCLEVBQXNDLENBQXRDLEVBQXlDNGlCLEdBQXhELENBQXBCLENBQVo7QUFDQSxRQUFJLENBQUNBLEdBQUwsRUFBVSxPQUFPLEtBQVA7QUFDVjVjLDZEQUFHLENBQUNzbUIsV0FBSixDQUFnQnRtQix5REFBRyxDQUFDek4sYUFBSixDQUFtQiwwQ0FBbkIsQ0FBaEIsRUFBK0VxcUIsR0FBL0U7QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFFRG9DLFFBQU0sR0FBRztBQUNMLFVBQU01UCxJQUFJLEdBQUcsSUFBYjtBQUNBQSxRQUFJLENBQUM4N0IsUUFBTCxDQUFjO0FBQ1Y4RyxjQUFRLEVBQUU7QUFEQSxLQUFkO0FBR0g7O0FBN04wRCxDOzs7Ozs7Ozs7Ozs7QUNYL0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFZSxNQUFNSixxQkFBTixTQUFvQ3ZnRCxtREFBSSxDQUFDbXlDLGNBQXpDLENBQXdEO0FBRW5FeHhDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxVQUFNbVUsSUFBSSxHQUFHLElBQWI7QUFDQUEsUUFBSSxDQUFDdWUsT0FBTCxHQUFldmUsSUFBSSxDQUFDdWUsT0FBTCxDQUFhbjZCLElBQWIsQ0FBa0I0YixJQUFsQixDQUFmO0FBQ0FBLFFBQUksQ0FBQ3lpQyxTQUFMLEdBQWlCemlDLElBQUksQ0FBQ3lpQyxTQUFMLENBQWVyK0MsSUFBZixDQUFvQjRiLElBQXBCLENBQWpCO0FBQ0FBLFFBQUksQ0FBQzBpQyxPQUFMLEdBQWUxaUMsSUFBSSxDQUFDMGlDLE9BQUwsQ0FBYXQrQyxJQUFiLENBQWtCNGIsSUFBbEIsQ0FBZjtBQUNBQSxRQUFJLENBQUNoTSxRQUFMLEdBQWdCZ00sSUFBSSxDQUFDaE0sUUFBTCxDQUFjNVAsSUFBZCxDQUFtQjRiLElBQW5CLENBQWhCO0FBQ0g7O0FBRUR4UyxtQkFBaUIsR0FBRztBQUNoQm9ELDZEQUFHLENBQUN1bEIsUUFBSixDQUFhdmxCLHlEQUFHLENBQUNrZixLQUFKLENBQVUsWUFBVixDQUFiLEVBQXNDLG9CQUF0QztBQUNBN3RCLHVEQUFJLENBQUNxd0MsY0FBTCxHQUFzQixJQUF0QixDQUZnQixDQUdoQjs7QUFDQSxTQUFLdVEsTUFBTCxHQUFjQyxHQUFHLENBQUMxZSxJQUFKLENBQVMsOEJBQVQsQ0FBZDtBQUNBLFNBQUt5ZSxNQUFMLENBQVlFLFFBQVosQ0FBcUIsbUJBQXJCO0FBQ0EsU0FBS0YsTUFBTCxDQUFZOVgsT0FBWixDQUFvQmlZLE9BQXBCLENBQTRCLGNBQTVCO0FBQ0EsU0FBS0gsTUFBTCxDQUFZSSxrQkFBWixDQUErQixLQUEvQjtBQUNBLFNBQUtKLE1BQUwsQ0FBWUssV0FBWixDQUF3QixFQUF4QjtBQUNBLFNBQUtMLE1BQUwsQ0FBWXpwQixFQUFaLENBQWUsUUFBZixFQUF5QixNQUFNO0FBQzNCLFVBQUksQ0FBQ2g1Qix3REFBYyxDQUFDLFdBQUQsQ0FBbkIsRUFBa0M7QUFDbEMsV0FBS3NpRCxPQUFMO0FBQ0EsV0FBS0QsU0FBTDtBQUNILEtBSkQ7QUFNSDs7QUFFRG4xQyxzQkFBb0IsR0FBRztBQUNuQnNELDZEQUFHLENBQUN3bEIsV0FBSixDQUFnQnhsQix5REFBRyxDQUFDa2YsS0FBSixDQUFVLFlBQVYsQ0FBaEIsRUFBeUMsb0JBQXpDO0FBQ0E3dEIsdURBQUksQ0FBQ3F3QyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0EsU0FBS3VRLE1BQUwsQ0FBWU0sT0FBWjtBQUNIOztBQUVEWSxpQkFBZSxHQUFHO0FBQ2QsVUFBTUMsU0FBUyxHQUFHLEtBQUtwSCxJQUFMLENBQVVpRyxNQUFWLENBQWlCcGhELEtBQWpCLENBQXVCc0ssS0FBdkIsQ0FBNkIsSUFBN0IsRUFBbUN2RyxNQUFyRDtBQUNBLFFBQUl3K0MsU0FBUyxJQUFJLEtBQUtuNEMsS0FBTCxDQUFXeTJDLEtBQTVCLEVBQW1DO0FBQ25DLFNBQUsxRixJQUFMLENBQVUwRixLQUFWLENBQWdCM3BCLFdBQWhCLEdBQThCamhCLEtBQUssQ0FBQ2lNLElBQU4sQ0FBVyxJQUFJak0sS0FBSixDQUFVc3NDLFNBQVYsQ0FBWCxFQUFpQyxDQUFDcnZCLENBQUQsRUFBSXhjLENBQUosS0FBVUEsQ0FBQyxHQUFHLENBQS9DLEVBQWtEbE0sSUFBbEQsQ0FBdUQsS0FBdkQsSUFBZ0UsR0FBOUY7QUFDQSxTQUFLSixLQUFMLENBQVd5MkMsS0FBWCxHQUFtQjBCLFNBQW5CO0FBQ0g7O0FBRUQsTUFBSW55QyxPQUFKLEdBQWM7QUFDVixXQUFPO0FBQ0g0eEMsaUJBQVcsRUFBRSxJQURWO0FBRUhDLFVBQUksRUFBRSxLQUZIO0FBR0hDLGdCQUFVLEVBQUUsQ0FIVDtBQUlIcmUsV0FBSyxFQUFFLFVBSko7QUFLSHNlLG9CQUFjLEVBQUU7QUFMYixLQUFQO0FBT0g7O0FBRUQsTUFBSW4xQyxHQUFKLEdBQVU7QUFDTixVQUFNbzFDLEtBQUssR0FBR3ZoRCwwREFBUyxDQUFDNlIsU0FBVixDQUFvQixhQUFwQixDQUFkOztBQUNBLFFBQUkydkMsSUFBSSxHQUFHLEVBQVg7O0FBQ0EsUUFBSUQsS0FBSyxJQUFJQSxLQUFLLEtBQUssRUFBdkIsRUFBMkI7QUFDdkJDLFVBQUksR0FBR3BnQyxNQUFNLENBQUNDLElBQVAsQ0FBWWtnQyxLQUFaLEVBQW1CLFFBQW5CLEVBQTZCamdDLFFBQTdCLENBQXNDLE1BQXRDLENBQVA7QUFDSDs7QUFDRCxXQUFPa2dDLElBQVA7QUFDSDs7QUFFRCxNQUFJYSxJQUFKLEdBQVc7QUFDUCxVQUFNRixLQUFLLEdBQUc3ekMseURBQUcsQ0FBQ2tmLEtBQUosQ0FBVSxnQ0FBVixDQUFkOztBQUNBLFFBQUksQ0FBQzIwQixLQUFMLEVBQVk7QUFDUixVQUFJLENBQUMsS0FBS0csVUFBTCxFQUFMLEVBQXdCLE9BQU8sSUFBUDtBQUN4QixhQUFPLEtBQUtyQixZQUFaO0FBQ0g7O0FBQ0QsV0FBT2tCLEtBQVA7QUFDSDs7QUFFREcsWUFBVSxHQUFHO0FBQ1QsVUFBTXAzQixHQUFHLEdBQUc1Yyx5REFBRyxDQUFDa2YsS0FBSixDQUFVLFlBQVVsdUIsc0RBQUssQ0FBQ3NKLFFBQU4sQ0FBZTVFLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDaW5CLEdBQUYsSUFBU2puQixDQUFDLENBQUNxRSxNQUE5QixFQUFzQyxDQUF0QyxFQUF5QzRpQixHQUF4RCxDQUFwQixDQUFaO0FBQ0EsUUFBSSxDQUFDQSxHQUFMLEVBQVUsT0FBTyxLQUFQO0FBQ1Y1Yyw2REFBRyxDQUFDc21CLFdBQUosQ0FBZ0J0bUIseURBQUcsQ0FBQ3pOLGFBQUosQ0FBbUIsMENBQW5CLENBQWhCLEVBQStFcXFCLEdBQS9FO0FBQ0EsV0FBTyxJQUFQO0FBQ0g7O0FBRUQ5aEIsUUFBTSxHQUFHO0FBQ0wsVUFBTXNVLElBQUksR0FBRyxJQUFiO0FBQ0EsV0FBTy9kLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ0MsZUFBUyxFQUFFLHdCQUFaO0FBQXNDMUQsUUFBRSxFQUFFO0FBQTFDLEtBRkcsRUFHSHVDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ3pELFFBQUUsRUFBRTtBQUFMLEtBRkosRUFHSXVDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBaEMsRUFDSW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ3pELFFBQUUsRUFBRSw4QkFBTDtBQUFxQzBELGVBQVMsRUFBRSxRQUFoRDtBQUEwRHU2QyxTQUFHLEVBQUU7QUFBL0QsS0FBaEMsRUFBMEczOUIsSUFBSSxDQUFDdlIsR0FBL0csQ0FESixDQUhKLEVBTUl4TSxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUN6RCxRQUFFLEVBQUU7QUFBTCxLQUZKLEVBR0l1QyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksSUFESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIrZ0QsaURBQXpCLEVBQW1DO0FBQUN4a0QsUUFBRSxFQUFFLGFBQUw7QUFBb0JtSixVQUFJLEVBQUUsYUFBMUI7QUFBeUNtTCxjQUFRLEVBQUVnTSxJQUFJLENBQUNoTSxRQUF4RDtBQUFrRXUwQixhQUFPLEVBQUVub0Msd0RBQWMsQ0FBQyxXQUFEO0FBQXpGLEtBQW5DLENBSEosQ0FISixFQVFJNkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDekQsUUFBRSxFQUFFO0FBQUwsS0FGSixFQUdJdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLFFBREosRUFFSTtBQUFDZ0wsV0FBSyxFQUFFO0FBQUNxc0Msb0JBQVksRUFBRSxhQUFmO0FBQThCMkosbUJBQVcsRUFBRTtBQUEzQyxPQUFSO0FBQXlFL2dELGVBQVMsRUFBRSxpQkFBcEY7QUFBdUdtN0IsYUFBTyxFQUFFLE1BQU07QUFDOUd2ZSxZQUFJLENBQUN1ZSxPQUFMLENBQWEsUUFBYjtBQUNIO0FBRkwsS0FGSixFQUtJLFFBTEosQ0FISixFQVVJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ2dMLFdBQUssRUFBRTtBQUFDcXNDLG9CQUFZLEVBQUUsR0FBZjtBQUFvQjRKLGtCQUFVLEVBQUUsbUJBQWhDO0FBQXFERCxtQkFBVyxFQUFFO0FBQWxFLE9BQVI7QUFBZ0cvZ0QsZUFBUyxFQUFFLGlCQUEzRztBQUE4SG03QixhQUFPLEVBQUUsTUFBTTtBQUNySXZlLFlBQUksQ0FBQ3VlLE9BQUwsQ0FBYSxNQUFiO0FBQ0g7QUFGTCxLQUZKLEVBS0ksTUFMSixDQVZKLEVBaUJJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxRQURKLEVBRUk7QUFBQ2dMLFdBQUssRUFBRTtBQUFDcXNDLG9CQUFZLEVBQUUsYUFBZjtBQUE4QjRKLGtCQUFVLEVBQUU7QUFBMUMsT0FBUjtBQUF3RWhoRCxlQUFTLEVBQUUsaUJBQW5GO0FBQXNHbTdCLGFBQU8sRUFBRSxNQUFNO0FBQzdHdmUsWUFBSSxDQUFDdWUsT0FBTCxDQUFhLFFBQWI7QUFDSDtBQUZMLEtBRkosRUFLSSxRQUxKLENBakJKLEVBd0JJdDhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxNQURKLEVBRUk7QUFBQ2dMLFdBQUssRUFBRTtBQUFDazJDLGdCQUFRLEVBQUUsTUFBWDtBQUFtQjdELGtCQUFVLEVBQUU7QUFBL0I7QUFBUixLQUZKLEVBR0ksb0NBSEosQ0F4QkosQ0FSSixDQU5KLENBSEcsQ0FBUDtBQWtESDs7QUFFRHhzQyxVQUFRLENBQUN0VSxFQUFELEVBQUs2b0MsT0FBTCxFQUFjO0FBQ2xCLFlBQVE3b0MsRUFBUjtBQUNJLFdBQUssYUFBTDtBQUNJVSxnRUFBYyxDQUFDLFdBQUQsQ0FBZCxHQUE4Qm1vQyxPQUE5QjtBQUNBTSxzRUFBUSxDQUFDaGlCLFlBQVQ7QUFDQTtBQUpSO0FBTUg7O0FBRUQwWCxTQUFPLENBQUM3K0IsRUFBRCxFQUFLO0FBQ1IsVUFBTXNnQixJQUFJLEdBQUcsSUFBYjs7QUFDQSxZQUFRdGdCLEVBQVI7QUFDSSxXQUFLLFFBQUw7QUFDSSxZQUFJa1IseURBQUcsQ0FBQ2tmLEtBQUosQ0FBVSxrQkFBVixDQUFKLEVBQW1DOVAsSUFBSSxDQUFDblUsS0FBTCxDQUFXK2pCLE1BQVg7QUFDbkMzdEIsMkRBQUksQ0FBQytxQixRQUFMLENBQWNzMkIsc0JBQWQsQ0FBcUN0akMsSUFBSSxDQUFDMmtDLElBQTFDO0FBQ0Eza0MsWUFBSSxDQUFDMmtDLElBQUwsQ0FBVWo0QyxNQUFWO0FBQ0E7O0FBQ0osV0FBSyxRQUFMO0FBQ0lzVCxZQUFJLENBQUN5aUMsU0FBTDtBQUNBOztBQUNKLFdBQUssTUFBTDtBQUNJemlDLFlBQUksQ0FBQzBpQyxPQUFMO0FBQ0E7QUFYUjtBQWFIOztBQUVERCxXQUFTLEdBQUc7QUFDUjd4Qyw2REFBRyxDQUFDSSxXQUFKLENBQWdCLFdBQWhCO0FBQ0FKLDZEQUFHLENBQUNDLFFBQUosQ0FBYSxXQUFiLEVBQTBCLEtBQUtneUMsTUFBTCxDQUFZOVgsT0FBWixDQUFvQndaLFFBQXBCLEVBQTFCO0FBQ0g7O0FBRUQ3QixTQUFPLEdBQUc7QUFDTnBnRCw4REFBUyxDQUFDOFIsU0FBVixDQUFvQixhQUFwQixFQUFtQ3NQLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEtBQUtrL0IsTUFBTCxDQUFZOVgsT0FBWixDQUFvQndaLFFBQXBCLEVBQVosRUFBNEMsT0FBNUMsRUFBcUQzZ0MsUUFBckQsQ0FBOEQsUUFBOUQsQ0FBbkM7QUFDSDs7QUFuS2tFLEM7Ozs7Ozs7Ozs7OztBQ1R2RTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1paEMsZUFBTixTQUE4QjVpRCxtREFBSSxDQUFDbXlDLGNBQW5DLENBQWtEO0FBQzdEeHhDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNqQixVQUFNQSxLQUFOO0FBQ0EsU0FBS2xDLEtBQUwsR0FBYTtBQUFDbTdDLGNBQVEsRUFBRTtBQUFYLEtBQWI7QUFDRDs7QUFFREMsbUJBQWlCLEdBQUc7QUFDbEIsU0FBS2pKLFFBQUwsQ0FBYztBQUFDZ0osY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNEOztBQUVEcDVDLFFBQU0sR0FBRztBQUNQLFFBQUksS0FBSy9CLEtBQUwsQ0FBV203QyxRQUFmLEVBQXlCLE9BQU83aUQsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUE0RCxpQkFBNUQsQ0FBUDtBQUN6QixXQUFPLEtBQUt5SSxLQUFMLENBQVdDLFFBQWxCO0FBQ0Q7O0FBYjREO0FBZ0JqRSxNQUFNdy9CLGNBQWMsR0FBR3VaLGVBQWUsQ0FBQ25oRCxTQUFoQixDQUEwQmdJLE1BQWpEO0FBQ0E1SyxNQUFNLENBQUNZLGNBQVAsQ0FBc0JtakQsZUFBZSxDQUFDbmhELFNBQXRDLEVBQWlELFFBQWpELEVBQTJEO0FBQ3ZENm5DLFlBQVUsRUFBRSxLQUQyQztBQUV2RGpuQyxjQUFZLEVBQUUsS0FGeUM7QUFHdkRnRyxLQUFHLEVBQUUsWUFBVztBQUFDRixXQUFPLENBQUN2SSxJQUFSLENBQWEscUdBQWI7QUFBcUgsR0FIL0U7QUFJdkRGLEtBQUcsRUFBRSxNQUFNMnBDO0FBSjRDLENBQTNELEU7Ozs7Ozs7Ozs7OztBQ25CQTtBQUFBO0FBQUE7QUFBQTtBQUVBLE1BQU16K0IsS0FBSyxHQUFHNUssbURBQUksQ0FBQzRLLEtBQW5CO0FBRWUsTUFBTW00QyxNQUFOLFNBQXFCbjRDLEtBQUssQ0FBQ0MsU0FBM0IsQ0FBcUM7QUFDaERwQixRQUFNLEdBQUc7QUFDTCxVQUFNaVYsSUFBSSxHQUFHLEtBQUs5VSxLQUFMLENBQVc4VSxJQUFYLElBQW1CLE1BQWhDO0FBQ0Esd0JBQU87QUFBSyxlQUFTLEVBQUUsS0FBSzlVLEtBQUwsQ0FBV3pJLFNBQVgsSUFBd0IsRUFBeEM7QUFBNEMsVUFBSSxFQUFDLG9CQUFqRDtBQUFzRSxhQUFPLEVBQUMsV0FBOUU7QUFBMEYsV0FBSyxFQUFFO0FBQUN1cEIsYUFBSyxFQUFFaE0sSUFBUjtBQUFjK1gsY0FBTSxFQUFFL1g7QUFBdEIsT0FBakc7QUFBOEgsYUFBTyxFQUFFLEtBQUs5VSxLQUFMLENBQVcweUI7QUFBbEosb0JBQ0s7QUFBTSxVQUFJLEVBQUMsTUFBWDtBQUFrQixPQUFDLEVBQUM7QUFBcEIsTUFETCxlQUM0QztBQUFNLE9BQUMsRUFBQztBQUFSLE1BRDVDLGVBRUs7QUFBTSxVQUFJLEVBQUMsTUFBWDtBQUFrQixPQUFDLEVBQUM7QUFBcEIsTUFGTCxDQUFQO0FBSUg7O0FBUCtDLEM7Ozs7Ozs7Ozs7OztBQ0pwRDtBQUFBO0FBQUE7QUFBQTtBQUVBLE1BQU0xeEIsS0FBSyxHQUFHNUssbURBQUksQ0FBQzRLLEtBQW5CO0FBRWUsTUFBTW80QyxTQUFOLFNBQXdCcDRDLEtBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFDbkRwQixRQUFNLEdBQUc7QUFDTCxVQUFNaVYsSUFBSSxHQUFHLEtBQUs5VSxLQUFMLENBQVc4VSxJQUFYLElBQW1CLE1BQWhDO0FBQ0Esd0JBQU87QUFBSyxlQUFTLEVBQUUsS0FBSzlVLEtBQUwsQ0FBV3pJLFNBQVgsSUFBd0IsRUFBeEM7QUFBNEMsVUFBSSxFQUFDLG9CQUFqRDtBQUFzRSxhQUFPLEVBQUMsV0FBOUU7QUFBMEYsV0FBSyxFQUFFO0FBQUN1cEIsYUFBSyxFQUFFaE0sSUFBUjtBQUFjK1gsY0FBTSxFQUFFL1g7QUFBdEI7QUFBakcsb0JBQ0s7QUFBTSxPQUFDLEVBQUM7QUFBUixNQURMLENBQVA7QUFHSDs7QUFOa0QsQzs7Ozs7Ozs7Ozs7O0FDSnZEO0FBQUE7QUFBQTtBQUFBO0FBRUEsTUFBTTlULEtBQUssR0FBRzVLLG1EQUFJLENBQUM0SyxLQUFuQjtBQUVlLE1BQU1xNEMsSUFBTixTQUFtQnI0QyxLQUFLLENBQUNDLFNBQXpCLENBQW1DO0FBQzlDcEIsUUFBTSxHQUFHO0FBQ0wsVUFBTWlWLElBQUksR0FBRyxLQUFLOVUsS0FBTCxDQUFXOFUsSUFBWCxJQUFtQixNQUFoQztBQUNBLHdCQUFPO0FBQUssZUFBUyxFQUFFLEtBQUs5VSxLQUFMLENBQVd6SSxTQUFYLElBQXdCLEVBQXhDO0FBQTRDLGFBQU8sRUFBQyxXQUFwRDtBQUFnRSxVQUFJLEVBQUMsb0JBQXJFO0FBQTBGLFdBQUssRUFBRTtBQUFDdXBCLGFBQUssRUFBRWhNLElBQVI7QUFBYytYLGNBQU0sRUFBRS9YO0FBQXRCLE9BQWpHO0FBQThILGFBQU8sRUFBRSxLQUFLOVUsS0FBTCxDQUFXMHlCO0FBQWxKLG9CQUNDO0FBQU0sT0FBQyxFQUFDO0FBQVIsTUFERCxlQUVDO0FBQU0sT0FBQyxFQUFDLGVBQVI7QUFBd0IsVUFBSSxFQUFDO0FBQTdCLE1BRkQsQ0FBUDtBQUlIOztBQVA2QyxDOzs7Ozs7Ozs7Ozs7QUNKbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQzs7OztBQUdTO0FBRVY7QUFFQSxNQUFNMXhCLEtBQUssR0FBRzVLLG1EQUFJLENBQUM0SyxLQUFuQjtBQUVlLE1BQU1tNkIsT0FBTixTQUFzQm42QixLQUFLLENBQUNDLFNBQTVCLENBQXNDO0FBQ2pEcEIsUUFBTSxHQUFHO0FBQ0wsVUFBTWlWLElBQUksR0FBRyxLQUFLOVUsS0FBTCxDQUFXOFUsSUFBWCxJQUFtQixNQUFoQztBQUNBLHdCQUFPO0FBQUssYUFBTyxFQUFDLFdBQWI7QUFBeUIsVUFBSSxFQUFDLG9CQUE5QjtBQUFtRCxlQUFTLEVBQUUsS0FBSzlVLEtBQUwsQ0FBV3pJLFNBQVgsSUFBd0IsRUFBdEY7QUFBMEYsV0FBSyxFQUFFO0FBQUN1cEIsYUFBSyxFQUFFaE0sSUFBUjtBQUFjK1gsY0FBTSxFQUFFL1g7QUFBdEIsT0FBakc7QUFBOEgsYUFBTyxFQUFFLEtBQUs5VSxLQUFMLENBQVcweUI7QUFBbEosb0JBQ0g7QUFBTSxPQUFDLEVBQUMsZUFBUjtBQUF3QixVQUFJLEVBQUM7QUFBN0IsTUFERyxlQUVIO0FBQU0sT0FBQyxFQUFDO0FBQVIsTUFGRyxDQUFQO0FBSUg7O0FBUGdELEM7Ozs7Ozs7Ozs7OztBQ1RyRDtBQUFBO0FBQUE7QUFBQTtBQUVBLE1BQU0xeEIsS0FBSyxHQUFHNUssbURBQUksQ0FBQzRLLEtBQW5CO0FBRWUsTUFBTWcxQyxNQUFOLFNBQXFCaDFDLEtBQUssQ0FBQ0MsU0FBM0IsQ0FBcUM7QUFDaERwQixRQUFNLEdBQUc7QUFDTCxVQUFNaVYsSUFBSSxHQUFHLEtBQUs5VSxLQUFMLENBQVc4VSxJQUFYLElBQW1CLE1BQWhDO0FBQ0Esd0JBQU87QUFBSyxlQUFTLEVBQUUsS0FBSzlVLEtBQUwsQ0FBV3pJLFNBQVgsSUFBd0IsRUFBeEM7QUFBNEMsVUFBSSxFQUFDLG9CQUFqRDtBQUFzRSxhQUFPLEVBQUMsV0FBOUU7QUFBMEYsV0FBSyxFQUFFO0FBQUN1cEIsYUFBSyxFQUFFaE0sSUFBUjtBQUFjK1gsY0FBTSxFQUFFL1g7QUFBdEI7QUFBakcsb0JBQ0s7QUFBTSxVQUFJLEVBQUMsTUFBWDtBQUFrQixPQUFDLEVBQUM7QUFBcEIsTUFETCxlQUVLO0FBQU0sT0FBQyxFQUFDO0FBQVIsTUFGTCxDQUFQO0FBSUg7O0FBUCtDLEM7Ozs7Ozs7Ozs7OztBQ0pwRDtBQUFBO0FBQUEsSUFBSXdrQyxZQUFZLEdBQUc3K0MsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM2K0MsV0FBckIsRUFBa0MsQ0FBbEMsQ0FBbkI7QUFFZSxNQUFNeGIsU0FBTixTQUF3Qi84QixLQUFLLENBQUNDLFNBQTlCLENBQXdDO0FBQ25EcEIsUUFBTSxHQUFFO0FBQ0osUUFBRyxDQUFDeTVDLFlBQUosRUFBaUJBLFlBQVksR0FBRzcrQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzYrQyxXQUFyQixFQUFrQyxDQUFsQyxDQUFmO0FBQ2pCLHdCQUFPO0FBQUssZUFBUyxFQUFFRCxZQUFZLENBQUNDO0FBQTdCLE1BQVA7QUFDSDs7QUFKa0QsQzs7Ozs7Ozs7Ozs7O0FDRnZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU12NEMsS0FBSyxHQUFHNUssbURBQUksQ0FBQzRLLEtBQW5CO0FBRUEsSUFBSXc0QywyQkFBSjtBQUNlLE1BQU1wYSxvQkFBTixTQUFtQ3ArQixLQUFLLENBQUNDLFNBQXpDLENBQW1EO0FBQzlEbEssYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUVBLFNBQUtsQyxLQUFMLEdBQWE7QUFDVHZFLFVBQUksRUFBRWdYLDBEQUFTLENBQUNDLGVBQVYsQ0FBMEIsS0FBMUIsS0FBb0MvYixvREFEakM7QUFFVHdKLFlBQU0sRUFBRTtBQUZDLEtBQWI7QUFLQSxTQUFLdzdDLE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFsQjs7QUFDQSxRQUFHLEtBQUs1N0MsS0FBTCxDQUFXdkUsSUFBWCxDQUFnQnFFLGNBQW5CLEVBQWtDO0FBQzlCLFdBQUtjLFdBQUw7QUFDSDs7QUFFRCxTQUFLaTdDLGVBQUwsR0FBdUIsSUFBSXBkLEdBQUosRUFBdkI7QUFDSDs7QUFFRHFkLG1CQUFpQixDQUFDM0wsSUFBRCxFQUFNO0FBQ25CLFNBQUswTCxlQUFMLENBQXFCM3NDLEdBQXJCLENBQXlCaWhDLElBQXpCO0FBQ0g7QUFFRDs7Ozs7O0FBSUE5bEMsVUFBUSxDQUFDK1MsT0FBRCxFQUFVdGxCLEtBQVYsRUFBZ0I7QUFDcEIsUUFBSWlrRCxjQUFjLEdBQUdDLFFBQVEsQ0FBQ3Q2QyxJQUFULENBQWM5RSxDQUFDLElBQUlBLENBQUMsQ0FBQzdHLEVBQUYsS0FBU3FuQixPQUFPLENBQUNsYixLQUFSLENBQWNuTSxFQUExQyxDQUFyQjtBQUVBLFNBQUtvOEMsUUFBTCxDQUFjO0FBQ1YxMkMsVUFBSSxFQUFFdEUsTUFBTSxDQUFDc1osTUFBUCxDQUFjL1oscURBQWQsRUFBMkIsS0FBS3NKLEtBQUwsQ0FBV3ZFLElBQXRDLEVBQTRDO0FBQzlDLFNBQUNzZ0QsY0FBYyxDQUFDaG1ELEVBQWhCLEdBQXFCLENBQUMsQ0FBQytCLEtBQUYsR0FBVUEsS0FBVixHQUFrQjtBQURPLE9BQTVDLENBREk7QUFJVnFJLFlBQU0sRUFBRSxLQUFLSCxLQUFMLENBQVdHO0FBSlQsS0FBZDs7QUFNQSxRQUFHaWQsT0FBTyxDQUFDbGIsS0FBUixDQUFjbk0sRUFBZCxLQUFxQixnQkFBeEIsRUFBeUM7QUFDckMsV0FBSzZLLFdBQUw7QUFDSDs7QUFFRDZSLDhEQUFTLENBQUNFLGVBQVYsQ0FBMEIsS0FBMUIsRUFBaUNqYyxxREFBakM7QUFDQSxTQUFLaWxELE9BQUwsQ0FBYW41QyxXQUFiO0FBQ0E3Qyx1RUFBa0IsQ0FBQ2dCLEdBQW5CLENBQXVCaksscURBQXZCO0FBQ0g7O0FBRURrSyxhQUFXLEdBQUU7QUFDVCxRQUFHLEtBQUtnN0MsVUFBTCxLQUFvQixJQUF2QixFQUE0QjtBQUN4QixVQUFJLzNCLEdBQUcsR0FBRyxLQUFLN2pCLEtBQUwsQ0FBV3ZFLElBQVgsQ0FBZ0JxRSxjQUExQjtBQUNBa1UsZ0JBQVUsQ0FBQyxNQUFNO0FBQ2IsWUFBRyxLQUFLaFUsS0FBTCxDQUFXdkUsSUFBWCxDQUFnQnFFLGNBQWhCLEtBQW1DK2pCLEdBQXRDLEVBQTBDO0FBQ3RDO0FBQ0g7O0FBQ0QsYUFBS2pqQixXQUFMO0FBQ0gsT0FMUyxFQUtQLElBTE8sQ0FBVjtBQU1IOztBQUNELFFBQUcsQ0FBQyxLQUFLWixLQUFMLENBQVd2RSxJQUFYLENBQWdCcUUsY0FBcEIsRUFBbUM7QUFDL0IsV0FBS3F5QyxRQUFMLENBQWM7QUFDVjEyQyxZQUFJLEVBQUUsS0FBS3VFLEtBQUwsQ0FBV3ZFLElBRFA7QUFFVjBFLGNBQU0sRUFBRTtBQUZFLE9BQWQ7QUFJQSxXQUFLcUMsV0FBTDtBQUNBLFdBQUtxNUMsZUFBTCxDQUFxQnQ1QyxPQUFyQixDQUE2QjNGLENBQUMsSUFBSUEsQ0FBQyxDQUFDNEYsV0FBRixFQUFsQztBQUNBO0FBQ0g7O0FBQ0QsU0FBS281QyxVQUFMLEdBQWtCLElBQWxCO0FBQ0FqOEMsdUVBQWtCLENBQUNpQixXQUFuQixDQUErQixLQUFLWixLQUFMLENBQVd2RSxJQUFYLENBQWdCcUUsY0FBL0MsRUFDQzZiLElBREQsQ0FDTXhiLE1BQU0sSUFBSTtBQUNaLFdBQUt5N0MsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFdBQUt6SixRQUFMLENBQWM7QUFDVjEyQyxZQUFJLEVBQUUsS0FBS3VFLEtBQUwsQ0FBV3ZFLElBRFA7QUFFVjBFLGNBQU0sRUFBRWhKLE1BQU0sQ0FBQ2lCLElBQVAsQ0FBWStILE1BQVosRUFBb0JwQixHQUFwQixDQUF3QnFNLENBQUMsSUFBSTtBQUNqQyxjQUFJNndDLEtBQUssR0FBRzk3QyxNQUFNLENBQUNpTCxDQUFELENBQWxCO0FBQ0EsaUJBQU87QUFDSHJWLGNBQUUsRUFBRWttRCxLQUFLLENBQUNsbUQsRUFEUDtBQUVIcUosZ0JBQUksRUFBRTY4QyxLQUFLLENBQUM3OEMsSUFGVDtBQUdIeEosZ0JBQUksRUFBRXFtRCxLQUFLLENBQUNybUQ7QUFIVCxXQUFQO0FBS0gsU0FQTztBQUZFLE9BQWQ7QUFXQSxXQUFLNE0sV0FBTDtBQUNBLFdBQUtxNUMsZUFBTCxDQUFxQnQ1QyxPQUFyQixDQUE2QjNGLENBQUMsSUFBSUEsQ0FBQyxDQUFDNEYsV0FBRixFQUFsQztBQUNILEtBaEJELEVBZ0JHeW5CLEtBaEJILENBZ0JTLE1BQU07QUFDWCxXQUFLMnhCLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxXQUFLekosUUFBTCxDQUFjO0FBQ1YxMkMsWUFBSSxFQUFFLEtBQUt1RSxLQUFMLENBQVd2RSxJQURQO0FBRVYwRSxjQUFNLEVBQUU7QUFGRSxPQUFkO0FBSUEsV0FBS3FDLFdBQUw7QUFDQSxXQUFLcTVDLGVBQUwsQ0FBcUJ0NUMsT0FBckIsQ0FBNkIzRixDQUFDLElBQUlBLENBQUMsQ0FBQzRGLFdBQUYsRUFBbEM7QUFDSCxLQXhCRDtBQXlCSDs7QUFFRDA1QyxlQUFhLENBQUN6Z0QsSUFBRCxFQUFNO0FBQ2YsU0FBSzAyQyxRQUFMLENBQWM7QUFDVjEyQztBQURVLEtBQWQ7QUFHSDs7QUFFRCxNQUFJNEgsT0FBSixHQUFhO0FBQ1QsV0FBT3E0QywyQkFBMkIsS0FBS0EsMkJBQTJCLEdBQUcsQ0FDakUvK0MsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUMwd0MsY0FBckIsRUFBcUMsQ0FBckMsQ0FEaUUsQ0FBbkMsQ0FBbEM7QUFHSDs7QUFFRHZyQyxRQUFNLEdBQUc7QUFDTCxRQUFJLENBQ0F5NUMsWUFEQSxJQUVBLEtBQUtuNEMsT0FGVDtBQUdBLFdBQU8sY0FDSCxvQkFBQyxzREFBRDtBQUFtQixXQUFLLEVBQUMsdUJBQXpCO0FBQWlELGNBQVEsRUFBRSxLQUFLbkIsS0FBTCxDQUFXcE0sUUFBdEU7QUFBZ0YsY0FBUSxFQUFFLEtBQUtvTSxLQUFMLENBQVdtSTtBQUFyRyxNQURHLGVBRUgsb0JBQUMsa0RBQUQsT0FGRyxlQUdILG9CQUFDLHNEQUFEO0FBQW1CLFVBQUksRUFBQztBQUF4QixNQUhHLGVBSUgsaUNBRUssS0FBSzh4QyxpQkFGVixDQUpHLGVBUUgsOENBQ0ksb0JBQUMsa0RBQUQsT0FESixlQUVJLG9CQUFDLHNEQUFEO0FBQW1CLFVBQUksRUFBQztBQUF4QixNQUZKLGVBSUksb0JBQUMsVUFBRDtBQUFZLGNBQVEsRUFBRTtBQUF0QixNQUpKLENBUkcsZUFjSDtBQUFLLGVBQVMsRUFBRVgsWUFBWSxDQUFDbE87QUFBN0IsTUFkRyxlQWVIO0FBQVEsV0FBSyxFQUFFO0FBQUM3b0MsZUFBTyxFQUFFO0FBQVYsT0FBZjtBQUFnQyxhQUFPLEVBQUV2UCxNQUFNLENBQUNrbkQ7QUFBaEQsd0JBZkcsZUFrQkg7QUFBUSxXQUFLLEVBQUU7QUFBQzMzQyxlQUFPLEVBQUU7QUFBVixPQUFmO0FBQWdDLGFBQU8sRUFBRSxNQUFNO0FBQzNDbzFCLHVEQUFNLENBQUNhLEtBQVAsQ0FBYXdWLFlBQWIsQ0FBMEIsNkNBQTFCO0FBQ0g7QUFGRCw2Q0FsQkcsQ0FBUDtBQXdCSDs7QUFFRCxNQUFJaU0saUJBQUosR0FBdUI7QUFDbkIsV0FBTyxLQUFLRSxrQkFBTCxLQUE0QixLQUFLQSxrQkFBTCxHQUEwQkwsUUFBUSxDQUFDajlDLEdBQVQsQ0FBYW5DLENBQUMsSUFBSTtBQUMzRSxVQUFHQSxDQUFDLENBQUNoSCxJQUFGLEtBQVcsTUFBZCxFQUFxQjtBQUNqQiw0QkFBTyxvQkFBQyxTQUFEO0FBQVcsaUJBQU8sRUFBRWdILENBQXBCO0FBQXVCLGlCQUFPLEVBQUUsSUFBaEM7QUFBc0MsWUFBRSxFQUFFQSxDQUFDLENBQUM3RztBQUE1QyxVQUFQO0FBQ0gsT0FGRCxNQUVNLElBQUc2RyxDQUFDLENBQUNoSCxJQUFGLEtBQVcsUUFBZCxFQUF1QjtBQUN6QixZQUFJMG1ELEtBQUssR0FBRyxjQUFDLG9CQUFDLFdBQUQ7QUFBYSxpQkFBTyxFQUFFMS9DLENBQXRCO0FBQXlCLGlCQUFPLEVBQUUsSUFBbEM7QUFBd0MsWUFBRSxFQUFFQSxDQUFDLENBQUM3RztBQUE5QyxVQUFELENBQVo7QUFBaUU7Ozs7Ozs7QUFNakUsZUFBT3VtRCxLQUFQO0FBQ0gsT0FSSyxNQVFBLElBQUcxL0MsQ0FBQyxDQUFDaEgsSUFBRixLQUFXLFFBQWQsRUFBdUI7QUFDekIsWUFBRyxDQUFDLGNBQUQsRUFBaUIsY0FBakIsRUFBaUNzRixRQUFqQyxDQUEwQzBCLENBQUMsQ0FBQzdHLEVBQTVDLENBQUgsRUFBbUQ7QUFDL0MsOEJBQU8sb0JBQUMsV0FBRDtBQUFhLG1CQUFPLEVBQUU2RyxDQUF0QjtBQUF5QixtQkFBTyxFQUFFLElBQWxDO0FBQXdDLGNBQUUsRUFBRUEsQ0FBQyxDQUFDN0csRUFBOUM7QUFBa0QsbUJBQU8sRUFBRSxDQUFDO0FBQUMrQixtQkFBSyxFQUFFLE1BQVI7QUFBZ0IwdkIsbUJBQUssRUFBRTtBQUF2QixhQUFELEVBQXNDb1AsTUFBdEMsQ0FBNkMsS0FBSzUyQixLQUFMLENBQVdHLE1BQVgsQ0FBa0JwQixHQUFsQixDQUFzQm5DLENBQUMsSUFBSTtBQUN0SSxxQkFBTztBQUNIOUUscUJBQUssRUFBRSxXQUFTOEUsQ0FBQyxDQUFDN0csRUFEZjtBQUVIeXhCLHFCQUFLLEVBQUU1cUIsQ0FBQyxDQUFDd0M7QUFGTixlQUFQO0FBSUgsYUFMOEcsQ0FBN0M7QUFBM0QsWUFBUDtBQU1ILFNBUEQsTUFPSztBQUNELGlCQUFPLGlCQUFQO0FBQ0g7QUFDSjtBQUNKLEtBdkI0RCxDQUF0RCxDQUFQO0FBd0JIOztBQTlKNkQ7QUFnS2xFLE1BQU00OEMsUUFBUSxHQUFHLENBQ2I7QUFDSXJtRCxPQUFLLEVBQUUsZ0JBRFg7QUFFSUksSUFBRSxFQUFFLGdCQUZSO0FBR0lILE1BQUksRUFBRSxRQUhWO0FBSUl3aUQsYUFBVyxFQUFFO0FBSmpCLENBRGEsRUFPYjtBQUNJemlELE9BQUssRUFBRSxNQURYO0FBRUlJLElBQUUsRUFBRSxNQUZSO0FBR0lILE1BQUksRUFBRSxNQUhWO0FBSUl3aUQsYUFBVyxFQUFFO0FBSmpCLENBUGEsRUFhYjtBQUNJemlELE9BQUssRUFBRSxTQURYO0FBRUlJLElBQUUsRUFBRSxTQUZSO0FBR0lILE1BQUksRUFBRSxNQUhWO0FBSUl3aUQsYUFBVyxFQUFFO0FBSmpCLENBYmEsRUFtQmI7QUFDSXppRCxPQUFLLEVBQUUsT0FEWDtBQUVJSSxJQUFFLEVBQUUsT0FGUjtBQUdJSCxNQUFJLEVBQUUsTUFIVjtBQUlJd2lELGFBQVcsRUFBRTtBQUpqQixDQW5CYSxFQXlCYjtBQUNJemlELE9BQUssRUFBRSxpQkFEWDtBQUVJSSxJQUFFLEVBQUUsa0JBRlI7QUFHSUgsTUFBSSxFQUFFLFFBSFY7O0FBSUksTUFBSXdpRCxXQUFKLEdBQWlCO0FBQ2IsV0FBT3hoRCxJQUFJLENBQUNDLEdBQUwsRUFBUDtBQUNIOztBQU5MLENBekJhLEVBaUNiO0FBQ0lsQixPQUFLLEVBQUUsWUFEWDtBQUVJSSxJQUFFLEVBQUUsY0FGUjtBQUdJSCxNQUFJLEVBQUU7QUFIVixDQWpDYSxFQXNDYjtBQUNJRCxPQUFLLEVBQUUsWUFEWDtBQUVJSSxJQUFFLEVBQUUsY0FGUjtBQUdJSCxNQUFJLEVBQUU7QUFIVixDQXRDYSxDQUFqQjtBQTZDQSxJQUFJMm1ELGdCQUFKOztBQUNBLE1BQU1DLFNBQU4sU0FBd0J0NUMsS0FBSyxDQUFDODVCLGFBQTlCLENBQTRDO0FBQ3hDLE1BQUkzNUIsT0FBSixHQUFhO0FBQ1QsUUFBR2s1QyxnQkFBZ0IsSUFBSUEsZ0JBQWdCLENBQUMsQ0FBRCxDQUF2QyxFQUEyQyxPQUFPQSxnQkFBUDtBQUMzQyxXQUFPQSxnQkFBZ0IsR0FBRyxDQUN0QjUvQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzYvQyxhQUFyQixFQUFvQyxDQUFwQyxDQURzQixFQUV0QjkvQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzB3QyxjQUFyQixFQUFxQyxDQUFyQyxDQUZzQixFQUd0QjN3QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzJ2QyxlQUFyQixFQUFzQyxDQUF0QyxDQUhzQixFQUl0QjV2QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzZ2QyxhQUFyQixFQUFvQyxDQUFwQyxDQUpzQixFQUt0Qjl2QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQytpQixNQUFyQixFQUE2QixDQUE3QixDQUxzQixFQU10QmhqQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzgvQyxXQUFyQixFQUFrQyxDQUFsQyxDQU5zQixFQU90Qi8vQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQysvQyxTQUFyQixFQUFnQyxDQUFoQyxDQVBzQixFQVF0QmhnRCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dnRCxNQUFGLElBQVloZ0QsQ0FBQyxDQUFDaWdELE1BQWpDLEVBQXlDLENBQXpDLENBUnNCLENBQTFCO0FBVUg7O0FBRUQ1akQsYUFBVyxDQUFDaUosS0FBRCxFQUFPO0FBQ2QsVUFBTUEsS0FBTjtBQUNBLFFBQUlrYixPQUFPLEdBQUcsS0FBS2xiLEtBQUwsQ0FBV2tiLE9BQXpCO0FBQ0EsU0FBS3BkLEtBQUwsR0FBYTtBQUNUdkUsVUFBSSxFQUFFLEtBQUt5RyxLQUFMLENBQVcySSxPQUFYLENBQW1CN0ssS0FBbkIsQ0FBeUJ2RSxJQUF6QixDQUE4QjJoQixPQUFPLENBQUNybkIsRUFBdEM7QUFERyxLQUFiO0FBSUEsU0FBSyttRCxLQUFMLGdCQUFhLG9CQUFDLE1BQUQsQ0FBUSxTQUFSLENBQWtCLEdBQWxCLENBQXNCLFVBQXRCLENBQWlDLE1BQWpDLENBQXdDLFNBQXhDO0FBQWtELGlCQUFXLEVBQUUxL0IsT0FBTyxDQUFDZzdCLFdBQXZFO0FBQW9GLFVBQUksRUFBRWg3QixPQUFPLENBQUNybkIsRUFBbEc7QUFBc0csV0FBSyxFQUFFLEtBQUtpSyxLQUFMLENBQVd2RSxJQUF4SDtBQUE4SCxjQUFRLEVBQUczRCxLQUFELElBQVc7QUFDNUosYUFBS3E2QyxRQUFMLENBQWM7QUFDVjEyQyxjQUFJLEVBQUUzRDtBQURJLFNBQWQ7O0FBR0EsWUFBRyxDQUFDLEtBQUtpbEQsVUFBTixJQUFvQixLQUFLQSxVQUFMLEdBQWtCbm1ELElBQUksQ0FBQ0MsR0FBTCxLQUFhLEdBQXRELEVBQTBEO0FBQ3RELGVBQUtxTCxLQUFMLENBQVcySSxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQ3ZTLEtBQWxDO0FBQ0EsZUFBS2lsRCxVQUFMLEdBQWtCbm1ELElBQUksQ0FBQ0MsR0FBTCxFQUFsQjtBQUNILFNBSEQsTUFHTSxJQUFHLENBQUMsS0FBS21tRCxRQUFULEVBQWtCO0FBQ3BCLGVBQUtBLFFBQUwsR0FBZ0JocEMsVUFBVSxDQUFDLE1BQU07QUFDN0IsaUJBQUs5UixLQUFMLENBQVcySSxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQyxLQUFLckssS0FBTCxDQUFXdkUsSUFBN0M7QUFDQSxpQkFBS3VoRCxRQUFMLEdBQWdCLElBQWhCO0FBQ0EsaUJBQUtELFVBQUwsR0FBa0JubUQsSUFBSSxDQUFDQyxHQUFMLEVBQWxCO0FBQ0gsV0FKeUIsRUFJdkIsR0FKdUIsQ0FBMUI7QUFLSDtBQUNKLE9BZFk7QUFjVixVQUFJLEVBQUM7QUFkSyxNQUFiO0FBZUg7O0FBRURrTCxRQUFNLEdBQUU7QUFDSixRQUFJcWIsT0FBTyxHQUFHLEtBQUtsYixLQUFMLENBQVdrYixPQUF6QjtBQUVBLFFBQUksQ0FDQTYvQixTQURBLEVBRUF6QixZQUZBLEVBR0FsUCxhQUhBLEVBSUFFLFdBSkEsRUFLQUUsVUFMQSxFQU1Bd1EsVUFOQSxFQU9BQyxXQVBBLEVBUUFDLFdBUkEsSUFTQSxLQUFLLzVDLE9BVFQ7QUFXQSx3QkFBUTtBQUFLLGVBQVMsRUFBRTQ1QyxTQUFTLENBQUNJLEdBQVYsR0FBYyxHQUFkLEdBQWtCN0IsWUFBWSxDQUFDbE87QUFBL0Msb0JBQ0o7QUFBSyxlQUFTLEVBQUcsR0FBRTJQLFNBQVMsQ0FBQzUxQixJQUFLLElBQUc2MUIsVUFBVSxDQUFDSSxTQUFVO0FBQTFELG9CQUNJO0FBQUksZUFBUyxFQUFFOVEsV0FBVyxDQUFDQyxhQUFaLEdBQTBCLEdBQTFCLEdBQThCQyxVQUFVLENBQUNPLE1BQXpDLEdBQWdELEdBQWhELEdBQW9EWCxhQUFhLENBQUNZLEVBQWxFLEdBQXFFLEdBQXJFLEdBQXlFWixhQUFhLENBQUNDO0FBQXRHLE9BQ0tudkIsT0FBTyxDQUFDem5CLEtBRGIsQ0FESixFQUlLLEtBQUttbkQsS0FKVixDQURJLGVBT0osb0JBQUMsT0FBRCxPQVBJLENBQVI7QUFTSDs7QUE5RHVDOztBQWlFNUMsSUFBSVMsa0JBQUo7O0FBQ0EsTUFBTUMsV0FBTixTQUEwQnQ2QyxLQUFLLENBQUM4NUIsYUFBaEMsQ0FBOEM7QUFDMUMsTUFBSTM1QixPQUFKLEdBQWE7QUFDVCxXQUFPazZDLGtCQUFrQixLQUFLQSxrQkFBa0IsR0FBRyxDQUMvQzVnRCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzYvQyxhQUFyQixFQUFvQyxDQUFwQyxDQUQrQyxFQUUvQzkvQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzB3QyxjQUFyQixFQUFxQyxDQUFyQyxDQUYrQyxFQUcvQzN3QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzJ2QyxlQUFyQixFQUFzQyxDQUF0QyxDQUgrQyxFQUkvQzV2QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzZ2QyxhQUFyQixFQUFvQyxDQUFwQyxDQUorQyxFQUsvQzl2QyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQytpQixNQUFyQixFQUE2QixDQUE3QixDQUwrQyxFQU0vQ2hqQixTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzgvQyxXQUFyQixFQUFrQyxDQUFsQyxDQU4rQyxFQU8vQy8vQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQysvQyxTQUFyQixFQUFnQyxDQUFoQyxDQVArQyxFQVEvQ2hnRCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2dnRCxNQUFGLElBQVloZ0QsQ0FBQyxDQUFDaWdELE1BQWpDLEVBQXlDLENBQXpDLENBUitDLEVBUy9DbGdELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNmdELGdCQUFyQixFQUF1QyxDQUF2QyxDQVQrQyxDQUExQixDQUF6QjtBQVdIOztBQUVEeGtELGFBQVcsQ0FBQ2lKLEtBQUQsRUFBTztBQUNkLFVBQU1BLEtBQU47QUFDQSxRQUFJa2IsT0FBTyxHQUFHLEtBQUtsYixLQUFMLENBQVdrYixPQUF6QjtBQUNBLFNBQUtwZCxLQUFMLEdBQWE7QUFDVHZFLFVBQUksRUFBRSxLQUFLeUcsS0FBTCxDQUFXMkksT0FBWCxDQUFtQjdLLEtBQW5CLENBQXlCdkUsSUFBekIsQ0FBOEIyaEIsT0FBTyxDQUFDcm5CLEVBQXRDO0FBREcsS0FBYjtBQUlBLFNBQUsrbUQsS0FBTCxnQkFBYSxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxNQUFqQyxDQUF3QyxTQUF4QztBQUFrRCxpQkFBVyxFQUFFMS9CLE9BQU8sQ0FBQ2c3QixXQUF2RTtBQUFvRixVQUFJLEVBQUVoN0IsT0FBTyxDQUFDcm5CLEVBQWxHO0FBQXNHLFdBQUssRUFBRSxLQUFLaUssS0FBTCxDQUFXdkUsSUFBeEg7QUFBOEgsVUFBSSxFQUFDLFFBQW5JO0FBQTRJLGNBQVEsRUFBRSxDQUFDM0QsS0FBRCxFQUFRc0gsSUFBUixFQUFjMDlDLEtBQWQsS0FBd0I7QUFDdkxobEQsYUFBSyxHQUFHQSxLQUFLLENBQUNnRSxPQUFOLENBQWMsU0FBZCxFQUF5QixFQUF6QixDQUFSOztBQUNBLFlBQUdoRSxLQUFLLElBQUksS0FBS2tJLEtBQUwsQ0FBV3ZFLElBQXZCLEVBQTRCO0FBQ3hCcWhELGVBQUssQ0FBQ1ksUUFBTixDQUFlNWxELEtBQWY7QUFDQTtBQUNIOztBQUVELFlBQUcsQ0FBQyxLQUFLaWxELFVBQU4sSUFBb0IsS0FBS0EsVUFBTCxHQUFrQm5tRCxJQUFJLENBQUNDLEdBQUwsS0FBYSxHQUF0RCxFQUEwRDtBQUN0RCxlQUFLcUwsS0FBTCxDQUFXMkksT0FBWCxDQUFtQlIsUUFBbkIsQ0FBNEIsSUFBNUIsRUFBa0N2UyxLQUFsQztBQUNBLGVBQUtpbEQsVUFBTCxHQUFrQm5tRCxJQUFJLENBQUNDLEdBQUwsRUFBbEI7QUFDSCxTQUhELE1BR00sSUFBRyxDQUFDLEtBQUttbUQsUUFBVCxFQUFrQjtBQUNwQixlQUFLQSxRQUFMLEdBQWdCaHBDLFVBQVUsQ0FBQyxNQUFNO0FBQzdCLGlCQUFLOVIsS0FBTCxDQUFXMkksT0FBWCxDQUFtQlIsUUFBbkIsQ0FBNEIsSUFBNUIsRUFBa0MsS0FBS3JLLEtBQUwsQ0FBV3ZFLElBQTdDO0FBQ0EsaUJBQUt1aEQsUUFBTCxHQUFnQixJQUFoQjtBQUNBLGlCQUFLRCxVQUFMLEdBQWtCbm1ELElBQUksQ0FBQ0MsR0FBTCxFQUFsQjtBQUNILFdBSnlCLEVBSXZCLEdBSnVCLENBQTFCO0FBS0g7O0FBQ0QsYUFBS3M3QyxRQUFMLENBQWM7QUFDVjEyQyxjQUFJLEVBQUUzRDtBQURJLFNBQWQ7QUFHSCxPQXBCWTtBQW9CVixVQUFJLEVBQUM7QUFwQkssTUFBYjtBQXFCSDs7QUFFRGlLLFFBQU0sR0FBRTtBQUNKLFFBQUlxYixPQUFPLEdBQUcsS0FBS2xiLEtBQUwsQ0FBV2tiLE9BQXpCO0FBRUEsUUFBSSxDQUNBNi9CLFNBREEsRUFFQXpCLFlBRkEsRUFHQWxQLGFBSEEsRUFJQUUsV0FKQSxFQUtBRSxVQUxBLEVBTUF3USxVQU5BLElBT0EsS0FBSzc1QyxPQVBUO0FBVUEsd0JBQVE7QUFBSyxlQUFTLEVBQUU0NUMsU0FBUyxDQUFDSSxHQUFWLEdBQWMsR0FBZCxHQUFrQjdCLFlBQVksQ0FBQ2xPO0FBQS9DLG9CQUNKO0FBQUssZUFBUyxFQUFHLEdBQUUyUCxTQUFTLENBQUM1MUIsSUFBSyxJQUFHNjFCLFVBQVUsQ0FBQ0ksU0FBVTtBQUExRCxvQkFDSTtBQUFJLGVBQVMsRUFBRTlRLFdBQVcsQ0FBQ0MsYUFBWixHQUEwQixHQUExQixHQUE4QkMsVUFBVSxDQUFDTyxNQUF6QyxHQUFnRCxHQUFoRCxHQUFvRFgsYUFBYSxDQUFDWSxFQUFsRSxHQUFxRSxHQUFyRSxHQUF5RVosYUFBYSxDQUFDQztBQUF0RyxPQUNLbnZCLE9BQU8sQ0FBQ3puQixLQURiLENBREosRUFJSyxLQUFLbW5ELEtBSlYsRUFLSzEvQixPQUFPLENBQUNybkIsRUFBUixLQUFlLGtCQUFmLGdCQUNELG9CQUFDLFNBQUQsQ0FBVyxHQUFYLENBQWUsVUFBZixDQUEwQixNQUExQixDQUFpQyxNQUFqQztBQUF3QyxhQUFPLEVBQUUsTUFBTTtBQUNuRFoscUJBQWEsQ0FBQ3dvRCxTQUFkLENBQXdCajJCLElBQXhCLENBQTZCOXdCLElBQUksQ0FBQ0MsR0FBTCxLQUFXLEVBQXhDO0FBQ0gsT0FGRDtBQUVHLFdBQUssRUFBQztBQUZULGdDQURDLEdBR2tGLElBUnZGLENBREksZUFXSixvQkFBQyxPQUFELE9BWEksQ0FBUjtBQWFIOztBQXZFeUM7O0FBMEU5QyxJQUFJK21ELGtCQUFKOztBQUNBLE1BQU1DLFdBQU4sU0FBMEIzNkMsS0FBSyxDQUFDODVCLGFBQWhDLENBQThDO0FBQzFDL2pDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBTztBQUNkLFVBQU1BLEtBQU47QUFDQSxRQUFJa2IsT0FBTyxHQUFHLEtBQUtsYixLQUFMLENBQVdrYixPQUF6QjtBQUNBLFNBQUtwZCxLQUFMLEdBQWE7QUFDVHZFLFVBQUksRUFBRSxLQUFLeUcsS0FBTCxDQUFXMkksT0FBWCxDQUFtQjdLLEtBQW5CLENBQXlCdkUsSUFBekIsQ0FBOEIyaEIsT0FBTyxDQUFDcm5CLEVBQXRDLElBQTRDLFdBQVMsS0FBS21NLEtBQUwsQ0FBVzJJLE9BQVgsQ0FBbUI3SyxLQUFuQixDQUF5QnZFLElBQXpCLENBQThCMmhCLE9BQU8sQ0FBQ3JuQixFQUF0QyxDQUFyRCxHQUFpRztBQUQ5RixLQUFiO0FBR0EsU0FBS21NLEtBQUwsQ0FBVzJJLE9BQVgsQ0FBbUJpeEMsaUJBQW5CLENBQXFDLElBQXJDO0FBQ0g7O0FBRUR6eEMsVUFBUSxDQUFDdlMsS0FBRCxFQUFPO0FBQ1gsUUFBRyxDQUFDLEtBQUtpbEQsVUFBTixJQUFvQixLQUFLQSxVQUFMLEdBQWtCbm1ELElBQUksQ0FBQ0MsR0FBTCxLQUFhLEdBQXRELEVBQTBEO0FBQ3RELFdBQUtxTCxLQUFMLENBQVcySSxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQ3ZTLEtBQUssS0FBSyxNQUFWLEdBQW1CLElBQW5CLEdBQTBCQSxLQUFLLENBQUNnRSxPQUFOLENBQWMsUUFBZCxFQUF3QixFQUF4QixDQUE1RDtBQUNBLFdBQUtpaEQsVUFBTCxHQUFrQm5tRCxJQUFJLENBQUNDLEdBQUwsRUFBbEI7QUFDSCxLQUhELE1BR00sSUFBRyxDQUFDLEtBQUttbUQsUUFBVCxFQUFrQjtBQUNwQixXQUFLQSxRQUFMLEdBQWdCaHBDLFVBQVUsQ0FBQyxNQUFNO0FBQzdCLGFBQUs5UixLQUFMLENBQVcySSxPQUFYLENBQW1CUixRQUFuQixDQUE0QixJQUE1QixFQUFrQyxLQUFLckssS0FBTCxDQUFXdkUsSUFBWCxLQUFvQixNQUFwQixHQUE2QixJQUE3QixHQUFvQyxLQUFLdUUsS0FBTCxDQUFXdkUsSUFBWCxDQUFnQkssT0FBaEIsQ0FBd0IsUUFBeEIsRUFBa0MsRUFBbEMsQ0FBdEU7QUFDQSxhQUFLa2hELFFBQUwsR0FBZ0IsSUFBaEI7QUFDQSxhQUFLRCxVQUFMLEdBQWtCbm1ELElBQUksQ0FBQ0MsR0FBTCxFQUFsQjtBQUNILE9BSnlCLEVBSXZCLEdBSnVCLENBQTFCO0FBS0g7O0FBQ0QsU0FBS3M3QyxRQUFMLENBQWM7QUFDVjEyQyxVQUFJLEVBQUUzRDtBQURJLEtBQWQ7QUFHQSxTQUFLMEssV0FBTDtBQUNIOztBQUVELE1BQUlhLE9BQUosR0FBYTtBQUNULFdBQU91NkMsa0JBQWtCLEtBQUtBLGtCQUFrQixHQUFHLENBQy9DamhELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNi9DLGFBQXJCLEVBQW9DLENBQXBDLENBRCtDLEVBRS9DOS9DLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMHdDLGNBQXJCLEVBQXFDLENBQXJDLENBRitDLEVBRy9DM3dDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMnZDLGVBQXJCLEVBQXNDLENBQXRDLENBSCtDLEVBSS9DNXZDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNnZDLGFBQXJCLEVBQW9DLENBQXBDLENBSitDLEVBSy9DOXZDLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDK2lCLE1BQXJCLEVBQTZCLENBQTdCLENBTCtDLEVBTS9DaGpCLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDOC9DLFdBQXJCLEVBQWtDLENBQWxDLENBTitDLENBQTFCLENBQXpCO0FBUUg7O0FBRUQzNkMsUUFBTSxHQUFFO0FBQ0osUUFBSXFiLE9BQU8sR0FBRyxLQUFLbGIsS0FBTCxDQUFXa2IsT0FBekI7QUFFQSxRQUFJLENBQ0E2L0IsU0FEQSxFQUVBekIsWUFGQSxFQUdBbFAsYUFIQSxFQUlBRSxXQUpBLEVBS0FFLFVBTEEsRUFNQXdRLFVBTkEsSUFPQSxLQUFLNzVDLE9BUFQ7QUFTQSxRQUFJNkUsT0FBTyxHQUFHLEtBQUtoRyxLQUFMLENBQVcySSxPQUFYLENBQW1CN0ssS0FBbkIsQ0FBeUJHLE1BQXpCLENBQWdDcEIsR0FBaEMsQ0FBb0NuQyxDQUFDLElBQUk7QUFDbkQsYUFBTztBQUNIOUUsYUFBSyxFQUFFLFdBQVM4RSxDQUFDLENBQUM3RyxFQURmO0FBRUh5eEIsYUFBSyxFQUFFNXFCLENBQUMsQ0FBQ3dDO0FBRk4sT0FBUDtBQUlILEtBTGEsQ0FBZDtBQU9BOEksV0FBTyxDQUFDa2dCLE9BQVIsQ0FBZ0I7QUFDWnR3QixXQUFLLEVBQUUsTUFESztBQUVaMHZCLFdBQUssRUFBRTtBQUZLLEtBQWhCO0FBS0Esd0JBQVE7QUFBSyxlQUFTLEVBQUV5MUIsU0FBUyxDQUFDSSxHQUFWLEdBQWMsR0FBZCxHQUFrQjdCLFlBQVksQ0FBQ2xPO0FBQS9DLG9CQUNKO0FBQUssZUFBUyxFQUFHLEdBQUUyUCxTQUFTLENBQUM1MUIsSUFBSyxJQUFHNjFCLFVBQVUsQ0FBQ0ksU0FBVTtBQUExRCxvQkFDSTtBQUFJLGVBQVMsRUFBRTlRLFdBQVcsQ0FBQ0MsYUFBWixHQUEwQixHQUExQixHQUE4QkMsVUFBVSxDQUFDTyxNQUF6QyxHQUFnRCxHQUFoRCxHQUFvRFgsYUFBYSxDQUFDWSxFQUFsRSxHQUFxRSxHQUFyRSxHQUF5RVosYUFBYSxDQUFDQztBQUF0RyxPQUNLbnZCLE9BQU8sQ0FBQ3puQixLQURiLENBREosZUFJSSxvQkFBQyxNQUFELENBQVEsU0FBUixDQUFrQixHQUFsQixDQUFzQixVQUF0QixDQUFpQyxNQUFqQyxDQUF3QyxRQUF4QztBQUFpRCxXQUFLLEVBQUUsS0FBS3FLLEtBQUwsQ0FBV3ZFLElBQW5FO0FBQXlFLGFBQU8sRUFBRXlNLE9BQWxGO0FBQTJGLGNBQVEsRUFBRSxLQUFLbUMsUUFBTCxDQUFjNVAsSUFBZCxDQUFtQixJQUFuQjtBQUFyRyxNQUpKLENBREksZUFRSixvQkFBQyxPQUFELE9BUkksQ0FBUjtBQVVIOztBQXhFeUM7O0FBMkU5QyxJQUFJcWpELGNBQWMsR0FBRyxFQUFyQjs7QUFDQSxNQUFNQyxPQUFOLFNBQXNCNzZDLEtBQUssQ0FBQzg1QixhQUE1QixDQUEwQztBQUN0QyxNQUFJMzVCLE9BQUosR0FBYTtBQUNULFdBQU95NkMsY0FBYyxJQUFFQSxjQUFjLENBQUMsQ0FBRCxDQUE5QixHQUFvQ0EsY0FBcEMsR0FBc0RBLGNBQWMsR0FBRyxDQUMxRW5oRCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ29oRCxPQUFGLElBQWE3bUQsTUFBTSxDQUFDaUIsSUFBUCxDQUFZd0UsQ0FBWixFQUFlZixNQUFmLEtBQTBCLENBQTFELEVBQTZELENBQTdELENBRDBFLEVBRTFFYyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3FoRCxjQUFyQixFQUFxQyxDQUFyQyxDQUYwRSxDQUE5RTtBQUlIOztBQUVEbDhDLFFBQU0sR0FBRTtBQUNKLFFBQUksQ0FDQWk4QyxPQURBLEVBRUFDLGNBRkEsSUFHQSxLQUFLNTZDLE9BSFQ7QUFLQSx3QkFBTztBQUFLLFdBQUssRUFBRyxHQUFFMjZDLE9BQU8sQ0FBQ0EsT0FBUSxJQUFHQyxjQUFjLENBQUNBLGNBQWU7QUFBaEUsTUFBUDtBQUNIOztBQWZxQzs7QUFrQjFDLE1BQU1DLGFBQU4sU0FBNEJoN0MsS0FBSyxDQUFDQyxTQUFsQyxDQUE0QztBQUN4Q3BCLFFBQU0sR0FBRTtBQUNKLFFBQUlrN0MsU0FBUyxHQUFHdGdELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNi9DLGFBQXJCLEVBQW9DLENBQXBDLENBQWhCO0FBQ0EsUUFBSWpCLFlBQVksR0FBRzcrQyxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQzB3QyxjQUFyQixFQUFxQyxDQUFyQyxDQUFuQjtBQUNBLFFBQUk0UCxVQUFVLEdBQUd2Z0QsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM4L0MsV0FBckIsRUFBa0MsQ0FBbEMsQ0FBakI7QUFFQSx3QkFBUTtBQUFLLGVBQVMsRUFBRU8sU0FBUyxDQUFDSSxHQUFWLEdBQWMsR0FBZCxHQUFrQjdCLFlBQVksQ0FBQ2xPO0FBQS9DLG9CQUNKO0FBQUssZUFBUyxFQUFHLEdBQUUyUCxTQUFTLENBQUM1MUIsSUFBSyxJQUFHNjFCLFVBQVUsQ0FBQ0ksU0FBVTtBQUExRCxvQkFDSSxvQkFBQyxTQUFELENBQVcsR0FBWCxDQUFlLFVBQWYsQ0FBMEIsTUFBMUIsQ0FBaUMsTUFBakM7QUFBd0MsYUFBTyxFQUFFLEtBQUtwN0MsS0FBTCxDQUFXMHlCLE9BQTVEO0FBQXFFLFdBQUssRUFBQztBQUEzRSxPQUNLLEtBQUsxeUIsS0FBTCxDQUFXdk0sS0FEaEIsQ0FESixDQURJLENBQVI7QUFPSDs7QUFidUM7O0FBZ0I1QyxNQUFNd29ELFVBQU4sU0FBeUJqN0MsS0FBSyxDQUFDQyxTQUEvQixDQUF5QztBQUNyQ2xLLGFBQVcsQ0FBQ2lKLEtBQUssR0FBRyxFQUFULEVBQVk7QUFDbkIsVUFBTUEsS0FBTjtBQUNBLFNBQUtsQyxLQUFMLEdBQWE7QUFDVG8rQyxZQUFNLEVBQUU7QUFEQyxLQUFiO0FBR0EsU0FBS3JZLElBQUwsR0FBWSxFQUFaO0FBRUEsU0FBSzdqQyxLQUFMLENBQVdwTSxRQUFYLENBQW9CNmxELE9BQXBCLEdBQThCLElBQTlCO0FBQ0g7O0FBRUQwQyxXQUFTLENBQUM3TixHQUFELEVBQUs7QUFDVixRQUFJOE4sVUFBVSxHQUFHLEtBQUt0K0MsS0FBTCxDQUFXbytDLE1BQTVCO0FBQ0EsUUFBR0UsVUFBVSxLQUFLOU4sR0FBRyxDQUFDdHVDLEtBQUosQ0FBVW5NLEVBQTVCLEVBQStCO0FBRS9CLFNBQUtnd0MsSUFBTCxDQUFVeGpDLE9BQVYsQ0FBa0IzRixDQUFDLElBQUk7QUFDbkJBLE9BQUMsQ0FBQzJoRCxTQUFGLENBQVksS0FBWjtBQUNILEtBRkQ7QUFHQS9OLE9BQUcsQ0FBQytOLFNBQUosQ0FBYyxJQUFkO0FBQ0EsU0FBS3BNLFFBQUwsQ0FBYztBQUNWaU0sWUFBTSxFQUFFNU4sR0FBRyxDQUFDdHVDLEtBQUosQ0FBVW5NO0FBRFIsS0FBZDtBQUdIOztBQUVEZ00sUUFBTSxHQUFFO0FBQ0osd0JBQVE7QUFBSyxlQUFTLEVBQUM7QUFBZixvQkFDSjtBQUFLLGVBQVMsRUFBQyxXQUFmO0FBQTJCLFdBQUssRUFBRTtBQUFDeThDLFlBQUksRUFBRTtBQUFQO0FBQWxDLG9CQUNJLG9CQUFDLEdBQUQ7QUFBSyxhQUFPLEVBQUUsSUFBZDtBQUFvQixXQUFLLEVBQUMsY0FBMUI7QUFBeUMsUUFBRSxFQUFDO0FBQTVDLE1BREosZUFFSSxvQkFBQyxHQUFEO0FBQUssYUFBTyxFQUFFLElBQWQ7QUFBb0IsV0FBSyxFQUFDLGFBQTFCO0FBQXdDLFFBQUUsRUFBQztBQUEzQyxNQUZKLENBREksZUFLSixvQkFBQyxvQkFBRDtBQUFzQixhQUFPLEVBQUUsS0FBSzdDLE9BQXBDO0FBQTZDLFdBQUssRUFBRSxLQUFLMzdDLEtBQUwsQ0FBV3krQyxHQUEvRDtBQUFvRSxXQUFLLEVBQUU7QUFBQzlDLGVBQU8sRUFBRTtBQUFWLE9BQTNFO0FBQTRGLFNBQUcsRUFBRSxLQUFLMzdDLEtBQUwsQ0FBV28rQztBQUE1RyxNQUxJLENBQVI7QUFPSDs7QUFFRE0sVUFBUSxDQUFDbE8sR0FBRCxFQUFLO0FBQ1QsV0FBTyxLQUFLeHdDLEtBQUwsQ0FBV28rQyxNQUFYLEtBQXNCNU4sR0FBN0I7QUFDSDs7QUFFRCxNQUFJbUwsT0FBSixHQUFhO0FBQ1QsUUFBRyxLQUFLMzdDLEtBQUwsQ0FBV28rQyxNQUFYLEtBQXNCLFNBQXpCLEVBQW1DLE9BQU9PLE9BQVA7QUFDbkMsV0FBT0MsTUFBUDtBQUNIOztBQXpDb0M7O0FBNEN6QyxNQUFNQyxHQUFOLFNBQWtCMzdDLEtBQUssQ0FBQ0MsU0FBeEIsQ0FBa0M7QUFDOUJsSyxhQUFXLENBQUNpSixLQUFELEVBQU87QUFDZCxVQUFNQSxLQUFOO0FBRUEsU0FBS2xDLEtBQUwsR0FBYTtBQUNUbytDLFlBQU0sRUFBRWw4QyxLQUFLLENBQUN5NUMsT0FBTixDQUFjK0MsUUFBZCxDQUF1Qng4QyxLQUFLLENBQUNuTSxFQUE3QjtBQURDLEtBQWI7QUFHQW1NLFNBQUssQ0FBQ3k1QyxPQUFOLENBQWM1VixJQUFkLENBQW1CMWpDLElBQW5CLENBQXdCLElBQXhCO0FBQ0g7O0FBRURrOEMsV0FBUyxDQUFDRyxRQUFELEVBQVU7QUFDZixTQUFLdk0sUUFBTCxDQUFjO0FBQ1ZpTSxZQUFNLEVBQUUsQ0FBQyxDQUFDTTtBQURBLEtBQWQ7QUFHSDs7QUFFRDM4QyxRQUFNLEdBQUU7QUFDSixRQUFJdEksU0FBUyxHQUFJLFlBQWpCOztBQUNBLFFBQUcsS0FBS3VHLEtBQUwsQ0FBV28rQyxNQUFkLEVBQXFCO0FBQ2pCM2tELGVBQVMsSUFBSyxtQkFBZDtBQUNILEtBRkQsTUFFSztBQUNEQSxlQUFTLElBQUsscUJBQWQ7QUFDSDs7QUFDRCx3QkFBUTtBQUFLLGVBQVMsRUFBRUEsU0FBaEI7QUFBMkIsYUFBTyxFQUFFLE1BQUk7QUFDNUMsYUFBS3lJLEtBQUwsQ0FBV3k1QyxPQUFYLENBQW1CMEMsU0FBbkIsQ0FBNkIsSUFBN0I7QUFDSDtBQUZPLE9BR0gsS0FBS244QyxLQUFMLENBQVd2TSxLQUhSLENBQVI7QUFLSDs7QUE1QjZCOztBQStCbEMsSUFBSW1wRCxZQUFKOztBQUNBLE1BQU1DLG9CQUFOLFNBQW1DNzdDLEtBQUssQ0FBQ0MsU0FBekMsQ0FBbUQ7QUFDL0NpNEMsbUJBQWlCLENBQUNsbkMsR0FBRCxFQUFNOHFDLE9BQU4sRUFBYztBQUMzQnYrQyxXQUFPLENBQUNtTSxLQUFSLENBQWNzSCxHQUFkLEVBQW1COHFDLE9BQW5CO0FBQ0EsU0FBSzdNLFFBQUwsQ0FBYztBQUNWdmxDLFdBQUssRUFBRTtBQURHLEtBQWQ7QUFHSDs7QUFDRDdLLFFBQU0sR0FBRTtBQUNKLFFBQUcsQ0FBQyxLQUFLL0IsS0FBVCxFQUFlO0FBQ1gsV0FBS0EsS0FBTCxHQUFhO0FBQ1Q0TSxhQUFLLEVBQUU7QUFERSxPQUFiO0FBR0g7O0FBQ0QsUUFBRyxDQUFDLEtBQUs1TSxLQUFMLENBQVc0TSxLQUFmLEVBQXFCO0FBQ2pCLFVBQUc7QUFDQyxjQUFNK3VDLE9BQU8sR0FBRyxJQUFJLEtBQUt6NUMsS0FBTCxDQUFXeTVDLE9BQWYsQ0FBdUIsS0FBS3o1QyxLQUFMLENBQVdBLEtBQWxDLENBQWhCO0FBQ0F5NUMsZUFBTyxDQUFDeEosUUFBUixDQUFpQixLQUFLandDLEtBQUwsQ0FBV2xDLEtBQTVCO0FBQ0EsZUFBTzI3QyxPQUFPLENBQUM1NUMsTUFBUixFQUFQO0FBQ0gsT0FKRCxDQUlDLE9BQU1tUyxHQUFOLEVBQVU7QUFDUHpULGVBQU8sQ0FBQ21NLEtBQVIsQ0FBY3NILEdBQWQ7QUFDQSxhQUFLbFUsS0FBTCxDQUFXNE0sS0FBWCxHQUFtQixJQUFuQjtBQUNBLGVBQU8sS0FBSzdLLE1BQUwsRUFBUDtBQUNIO0FBQ0osS0FWRCxNQVVLO0FBQ0QrOEMsa0JBQVksR0FBR0EsWUFBWSxJQUFJeG1ELG1EQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDcWlELGVBQUYsSUFBcUJyaUQsQ0FBQyxDQUFDc2lELFVBQXJELENBQS9COztBQUNBLFVBQUcsQ0FBQ0osWUFBSixFQUFpQjtBQUNiN21ELDhEQUFLLENBQUNxRyxTQUFOLENBQWdCLG1FQUFoQjtBQUNBLGVBQU8sSUFBUDtBQUNIOztBQUNELDBCQUFPO0FBQUssYUFBSyxFQUFFO0FBQ2Z1b0MsZ0JBQU0sRUFBRTtBQURPO0FBQVosc0JBR0g7QUFBSyxhQUFLLEVBQUU7QUFDUjloQyx5QkFBZSxFQUFFLDJCQURUO0FBRVI2ckMsaUJBQU8sRUFBRSxXQUZEO0FBR1JDLHNCQUFZLEVBQUU7QUFITixTQUFaO0FBSUcsaUJBQVMsRUFBRyxxQkFBb0JpTyxZQUFZLENBQUNJLFVBQVc7QUFKM0Qsc0JBS0k7QUFBSyxpQkFBUyxFQUFFSixZQUFZLENBQUNHLGVBQTdCO0FBQThDLGFBQUssRUFBRTtBQUNqRGxqQyxtQkFBUyxFQUFFO0FBRHNDO0FBQXJELFFBTEosZUFVSTtBQUFLLGlCQUFTLEVBQUUraUMsWUFBWSxDQUFDSztBQUE3Qiw0QkFWSixlQVdJO0FBQUcsaUJBQVMsRUFBRUwsWUFBWSxDQUFDTTtBQUEzQix1RkFFSTtBQUFHLGlCQUFTLEVBQUcsR0FBRTltRCxtREFBSSxDQUFDb3lDLGFBQUwsQ0FBbUI5QyxNQUFPLElBQUd0dkMsbURBQUksQ0FBQ295QyxhQUFMLENBQW1CN0Msc0JBQXVCLEVBQXhGO0FBQTJGLFlBQUksRUFBQyxRQUFoRztBQUF5RyxnQkFBUSxFQUFFLENBQW5IO0FBQXNILGVBQU8sRUFBRSxNQUFNO0FBQ2pJdnZDLDZEQUFJLENBQUNpeUMsTUFBTDtBQUNIO0FBRkQsMEJBRkosbUJBWEosQ0FIRyxDQUFQO0FBeUJIO0FBQ0o7O0FBdkQ4Qzs7QUEwRG5ELElBQUk4VSxhQUFKO0FBQ0EsSUFBSUMsbUJBQUo7QUFDQSxJQUFJQyxXQUFKOztBQUNBLE1BQU1YLE1BQU4sU0FBcUIxN0MsS0FBSyxDQUFDQyxTQUEzQixDQUFxQztBQUNqQyxNQUFJRSxPQUFKLEdBQWE7QUFDVCxXQUFPZzhDLGFBQWEsS0FBS0EsYUFBYSxHQUFHLENBQ3JDL21ELG1EQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVc1QsV0FBVixLQUEwQixZQUFyRSxDQURxQyxFQUVyQzdYLG1EQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVUyxjQUFyRCxDQUZxQyxDQUFyQixDQUFwQjtBQUlIOztBQUVEMmtDLGNBQVksR0FBRTtBQUNWLFFBQUksQ0FDQXVkLFVBREEsRUFFQW5pRCxVQUZBLElBR0EsS0FBS2dHLE9BSFQ7QUFLQSxVQUFNMlksSUFBSSxHQUFHM2UsVUFBVSxDQUFDUixPQUFYLENBQW1CUyxjQUFuQixFQUFiO0FBQ0EsV0FBTzRGLEtBQUssQ0FBQzFKLGFBQU4sQ0FBb0IsTUFBTTtBQUM3QixVQUFJaW1ELE9BQU8sR0FBR0QsVUFBVSxDQUFDM2lELE9BQVgsQ0FBbUI7QUFDN0JpdkMsY0FBTSxFQUFFOXZCLElBQUksQ0FBQ2ptQixFQURnQjtBQUU3QnE5QixlQUFPLEVBQUUsSUFGb0I7QUFHN0Jzc0IsaUJBQVMsRUFBRSxJQUhrQjtBQUk3QkMsOEJBQXNCLEVBQUU7QUFKSyxPQUFuQixDQUFkO0FBTUFMLHlCQUFtQixHQUFHRyxPQUFPLENBQUM3cEQsSUFBOUI7QUFDQTJwRCxpQkFBVyxHQUFHRSxPQUFPLENBQUN2OUMsS0FBdEI7QUFDQSxhQUFPLEtBQUtILE1BQUwsRUFBUDtBQUNILEtBVk0sRUFVSixJQVZJLENBQVA7QUFXSDs7QUFFREEsUUFBTSxHQUFFO0FBQ0osUUFBRyxDQUFDdTlDLG1CQUFKLEVBQXdCLE9BQU8sS0FBS3JkLFlBQUwsRUFBUDtBQUN4QixRQUFJLENBQ0EyZCxXQURBLEVBRUF2aUQsVUFGQSxJQUdBLEtBQUtnRyxPQUhUO0FBS0EsVUFBTTJZLElBQUksR0FBRzNlLFVBQVUsQ0FBQ1IsT0FBWCxDQUFtQlMsY0FBbkIsRUFBYjtBQUVBLFFBQUk3QixJQUFJLEdBQUd0RSxNQUFNLENBQUNzWixNQUFQLENBQWMsRUFBZCxFQUFrQjlaLG9EQUFsQixFQUE4QixLQUFLdUwsS0FBTCxDQUFXeTVDLE9BQVgsQ0FBbUJ6NUMsS0FBbkIsQ0FBeUJwTSxRQUF6QixDQUFrQ2tLLEtBQWxDLENBQXdDdkUsSUFBdEUsQ0FBWDs7QUFDQSxVQUFNK0UsUUFBUSxHQUFJLFlBQVU7QUFDeEIsVUFBRyxDQUFDLEtBQUtaLElBQVQsRUFBYyxPQUFPLElBQVA7QUFDZCxVQUFJQSxJQUFJLEdBQUc7QUFDUFIsWUFBSSxFQUFFLEtBQUtRLElBQUwsQ0FBVVIsSUFBVixJQUFrQnpJLG9EQUFVLENBQUN5SSxJQUQ1QjtBQUVQVSxzQkFBYyxFQUFFLEtBQUtGLElBQUwsQ0FBVUUsY0FBVixJQUE0Qm5KLG9EQUFVLENBQUNtSixjQUZoRDtBQUdQQyxlQUFPLEVBQUUsS0FBS0gsSUFBTCxDQUFVRyxPQUFWLElBQXFCeEYsU0FIdkI7QUFJUHlGLGFBQUssRUFBRSxLQUFLSixJQUFMLENBQVVJLEtBQVYsSUFBbUJ6RixTQUpuQjtBQUtQMEYsa0JBQVUsRUFBRSxLQUFLTCxJQUFMLENBQVUsa0JBQVYsSUFBZ0M7QUFDeENNLGVBQUssRUFBRSxLQUFLTixJQUFMLENBQVUsa0JBQVY7QUFEaUMsU0FBaEMsR0FFUnJGLFNBUEc7QUFRUDRGLGNBQU0sRUFBRSxLQUFLUCxJQUFMLENBQVUsY0FBVixJQUE0QjtBQUNoQ1EscUJBQVcsRUFBRSxLQUFLUixJQUFMLENBQVUsY0FBVixDQURtQjtBQUVoQ1MscUJBQVcsRUFBRSxLQUFLVCxJQUFMLENBQVUsY0FBVixLQUE2QnJGO0FBRlYsU0FBNUIsR0FHSkEsU0FYRztBQVlQM0UsWUFBSSxFQUFFO0FBWkMsT0FBWDtBQWNBLGFBQU9nSyxJQUFQO0FBQ0gsS0FqQmdCLENBaUJkb0MsSUFqQmMsQ0FpQlQ7QUFDSnBDLFVBQUksRUFBRW5FO0FBREYsS0FqQlMsQ0FBakI7O0FBcUJBLFVBQU1va0QsTUFBTSxHQUFHLElBQUlQLG1CQUFKLENBQXdCbm9ELE1BQU0sQ0FBQ3NaLE1BQVAsQ0FBYyxFQUFkLEVBQWtCOHVDLFdBQWxCLEVBQStCO0FBQ2xFLytDLGNBQVEsRUFBRUEsUUFEd0Q7QUFFbEVzckMsWUFBTSxFQUFFOXZCLElBQUksQ0FBQ2ptQjtBQUZxRCxLQUEvQixDQUF4QixFQUdYZ00sTUFIVyxHQUdGRyxLQUhFLENBR0lDLFFBSG5CLENBL0JJLENBa0N3QjtBQUU1Qjs7QUFDQSxVQUFNaWtCLFNBQVMsZ0JBQUcsMkJBQVNseEIsTUFBTSxDQUFDc0gsU0FBUCxDQUFpQnFGLEdBQWpCLENBQXFCbXBCLENBQXJCLENBQXVCODBCLGlCQUF2QixDQUF5Q0QsTUFBTSxDQUFDMzlDLEtBQWhELEVBQXVELENBQUMsU0FBRCxFQUFZLGVBQVosQ0FBdkQsQ0FBVCxDQUFsQjtBQUVBLHdCQUFPO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FDRmtrQixTQURFLENBQVA7QUFHSDs7QUF0RWdDOztBQXlFckMsSUFBSTI1QixjQUFKO0FBQ0EsSUFBSUMsb0JBQUo7QUFDQSxJQUFJQyxZQUFKO0FBQ0EsSUFBSUMscUJBQUo7O0FBQ0EsTUFBTXZCLE9BQU4sU0FBc0J6N0MsS0FBSyxDQUFDQyxTQUE1QixDQUFzQztBQUNsQyxNQUFJRSxPQUFKLEdBQWE7QUFDVCxXQUFPMDhDLGNBQWMsS0FBS0EsY0FBYyxHQUFHLENBQ3ZDem5ELG1EQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVc1QsV0FBVixLQUEwQixhQUFyRSxDQUR1QyxFQUV2QzdYLG1EQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxPQUFGLElBQWFELENBQUMsQ0FBQ0MsT0FBRixDQUFVUyxjQUFyRCxDQUZ1QyxDQUF0QixDQUFyQjtBQUlIOztBQUVEeUUsUUFBTSxHQUFFO0FBQ0osUUFBSSxDQUNBbytDLFdBREEsRUFFQTlpRCxVQUZBLElBR0EsS0FBS2dHLE9BSFQ7QUFLQSxVQUFNMlksSUFBSSxHQUFHM2UsVUFBVSxDQUFDUixPQUFYLENBQW1CUyxjQUFuQixFQUFiOztBQUNBLFFBQUcsQ0FBQzBpRCxvQkFBSixFQUF5QjtBQUNyQixZQUFNUCxPQUFPLEdBQUcsSUFBSVUsV0FBVyxDQUFDdGpELE9BQWhCLENBQXdCO0FBQ3BDbWYsWUFBSSxFQUFFQTtBQUQ4QixPQUF4QixFQUViamEsTUFGYSxFQUFoQjtBQUdBbStDLDJCQUFxQixHQUFHVCxPQUFPLENBQUM3cEQsSUFBaEM7QUFDQSxZQUFNd3FELE9BQU8sR0FBRyxJQUFJWCxPQUFPLENBQUM3cEQsSUFBWixDQUFpQjZwRCxPQUFPLENBQUN2OUMsS0FBekIsRUFBZ0NILE1BQWhDLEVBQWhCO0FBQ0EsWUFBTXMrQyxPQUFPLEdBQUdELE9BQU8sQ0FBQ3hxRCxJQUFSLENBQWFtTSxNQUFiLENBQW9CcStDLE9BQU8sQ0FBQ2wrQyxLQUE1QixFQUFtQyxJQUFuQyxDQUFoQjtBQUNBLFlBQU1vK0MsT0FBTyxHQUFHLElBQUlELE9BQU8sQ0FBQ3pxRCxJQUFaLENBQWlCeXFELE9BQU8sQ0FBQ24rQyxLQUF6QixFQUFnQ0gsTUFBaEMsRUFBaEI7QUFDQWkrQywwQkFBb0IsR0FBR00sT0FBTyxDQUFDMXFELElBQS9CO0FBQ0g7O0FBQ0QsUUFBRyxDQUFDb3FELG9CQUFKLEVBQXlCLE1BQU0sSUFBSWovQyxLQUFKLENBQVcsbURBQVgsQ0FBTjtBQUV6QixRQUFJdEYsSUFBSSxHQUFHdEUsTUFBTSxDQUFDc1osTUFBUCxDQUFjLEVBQWQsRUFBa0I5WixvREFBbEIsRUFBOEIsS0FBS3VMLEtBQUwsQ0FBV3k1QyxPQUFYLENBQW1CejVDLEtBQW5CLENBQXlCcE0sUUFBekIsQ0FBa0NrSyxLQUFsQyxDQUF3Q3ZFLElBQXRFLENBQVg7O0FBQ0EsVUFBTStFLFFBQVEsR0FBSSxZQUFVO0FBQ3hCLFVBQUcsQ0FBQyxLQUFLWixJQUFULEVBQWMsT0FBTyxJQUFQO0FBQ2QsVUFBSUEsSUFBSSxHQUFHO0FBQ1BSLFlBQUksRUFBRSxLQUFLUSxJQUFMLENBQVVSLElBQVYsSUFBa0J6SSxvREFBVSxDQUFDeUksSUFENUI7QUFFUFUsc0JBQWMsRUFBRSxLQUFLRixJQUFMLENBQVVFLGNBQVYsSUFBNEJuSixvREFBVSxDQUFDbUosY0FGaEQ7QUFHUEMsZUFBTyxFQUFFLEtBQUtILElBQUwsQ0FBVUcsT0FBVixJQUFxQnhGLFNBSHZCO0FBSVB5RixhQUFLLEVBQUUsS0FBS0osSUFBTCxDQUFVSSxLQUFWLElBQW1CekYsU0FKbkI7QUFLUDBGLGtCQUFVLEVBQUUsS0FBS0wsSUFBTCxDQUFVLGtCQUFWLElBQWdDO0FBQ3hDTSxlQUFLLEVBQUUsS0FBS04sSUFBTCxDQUFVLGtCQUFWO0FBRGlDLFNBQWhDLEdBRVJyRixTQVBHO0FBUVA0RixjQUFNLEVBQUUsS0FBS1AsSUFBTCxDQUFVLGNBQVYsSUFBNEI7QUFDaENRLHFCQUFXLEVBQUUsS0FBS1IsSUFBTCxDQUFVLGNBQVYsQ0FEbUI7QUFFaENTLHFCQUFXLEVBQUUsS0FBS1QsSUFBTCxDQUFVLGNBQVYsS0FBNkJyRjtBQUZWLFNBQTVCLEdBR0pBLFNBWEc7QUFZUDNFLFlBQUksRUFBRTtBQVpDLE9BQVg7QUFjQSxhQUFPZ0ssSUFBUDtBQUNILEtBakJnQixDQWlCZG9DLElBakJjLENBaUJUO0FBQ0pwQyxVQUFJLEVBQUVuRTtBQURGLEtBakJTLENBQWpCOztBQXFCQXdrRCxnQkFBWSxHQUFHLElBQUlDLHFCQUFKLENBQTBCO0FBQ3JDbGtDLFVBQUksRUFBRUEsSUFEK0I7QUFFckNqSCxXQUFLLEVBQUUsTUFBTSxDQUFFO0FBRnNCLEtBQTFCLEVBR1poVCxNQUhZLEdBR0hHLEtBSFo7QUFJQSxVQUFNcStDLE9BQU8sR0FBRyxJQUFJUCxvQkFBSixDQUF5QjdvRCxNQUFNLENBQUNzWixNQUFQLENBQWMsRUFBZCxFQUFrQnd2QyxZQUFsQixFQUFnQztBQUNyRXovQyxjQUFRLEVBQUVBO0FBRDJELEtBQWhDLENBQXpCLEVBRVp1QixNQUZZLEdBRUhHLEtBRkcsQ0FFR0MsUUFGbkIsQ0E3Q0ksQ0ErQ3dCOztBQUU1Qm8rQyxXQUFPLENBQUNyK0MsS0FBUixDQUFjc0MsS0FBZCxHQUFzQjtBQUNsQndlLFdBQUssRUFBRTtBQURXLEtBQXRCO0FBSUEsd0JBQU87QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNGdTlCLE9BREUsQ0FBUDtBQUdIOztBQWhFaUMsQzs7Ozs7Ozs7Ozs7O0FDNXFCdEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUEsSUFBSUMsWUFBSjtBQUNlLE1BQU12a0IsaUJBQU4sU0FBZ0MzakMsbURBQUksQ0FBQ215QyxjQUFyQyxDQUFvRDtBQUUvRHh4QyxhQUFXLENBQUNpSixLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS3F3QyxlQUFMO0FBQ0EsU0FBS3g5QixLQUFMLEdBQWEsS0FBS0EsS0FBTCxDQUFXdGEsSUFBWCxDQUFnQixJQUFoQixDQUFiO0FBQ0EsU0FBS2dtRCxjQUFMLEdBQXNCLEtBQUtBLGNBQUwsQ0FBb0JobUQsSUFBcEIsQ0FBeUIsSUFBekIsQ0FBdEI7QUFDQSxTQUFLb0UsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWXBFLElBQVosQ0FBaUIsSUFBakIsQ0FBZDtBQUNBLFNBQUtpbUQsYUFBTCxHQUFxQixLQUFLQSxhQUFMLENBQW1Cam1ELElBQW5CLENBQXdCLElBQXhCLENBQXJCO0FBQ0EsU0FBS2ttRCxlQUFMLEdBQXVCLEtBQUtBLGVBQUwsQ0FBcUJsbUQsSUFBckIsQ0FBMEIsSUFBMUIsQ0FBdkI7QUFDQSxTQUFLNkgsSUFBTCxHQUFZLEtBQUtBLElBQUwsQ0FBVTdILElBQVYsQ0FBZSxJQUFmLENBQVo7QUFDQSxTQUFLbW1ELE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWFubUQsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBRUEsU0FBS29tRCxVQUFMLEdBQWtCdm9ELG1EQUFJLENBQUNtSixjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDLENBQUMsV0FBRCxDQUEzQyxDQUFsQjtBQUNBLFNBQUt1NEMsY0FBTCxHQUFzQnhvRCxtREFBSSxDQUFDbUosY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLGtCQUFELEVBQXFCLGlCQUFyQixDQUEzQyxDQUF0QjtBQUNBLFNBQUswaEMsYUFBTCxHQUFxQjN4QyxtREFBSSxDQUFDbUosY0FBTCxDQUFvQjhHLHNCQUFwQixDQUEyQyxDQUFDLGNBQUQsQ0FBM0MsQ0FBckI7QUFDQSxTQUFLdzRDLGdCQUFMLEdBQXdCem9ELG1EQUFJLENBQUNtSixjQUFMLENBQW9COEcsc0JBQXBCLENBQTJDLENBQUMsaUJBQUQsQ0FBM0MsQ0FBeEI7QUFFQSxTQUFLeTRDLEtBQUwsR0FBYSxFQUFiO0FBQ0g7O0FBRURuOUMsbUJBQWlCLEdBQUc7QUFDaEIsU0FBSzg4QyxlQUFMO0FBQ0g7O0FBRURwTyxpQkFBZSxHQUFHO0FBQ2QsU0FBS3Z5QyxLQUFMLEdBQWE7QUFDVGloRCxzQkFBZ0IsRUFBRSxDQUFDLENBRFY7QUFFVHRyRCxXQUFLLEVBQUUsWUFGRTtBQUdUdXJELGFBQU8sRUFBRSxJQUhBO0FBSVRDLGFBQU8sRUFBRSxFQUpBO0FBS1R2ekIsVUFBSSxFQUFFLElBTEc7QUFNVHd6QixnQkFBVSxFQUFFO0FBQ1JwaEQsYUFBSyxFQUFFLENBREM7QUFFUmdjLFlBQUksRUFBRTtBQUZFLE9BTkg7QUFVVHVCLGFBQU8sRUFBRSxLQUFLOGpDLGFBQUwsQ0FBbUIsQ0FBbkIsQ0FWQTtBQVdUMWxCLFdBQUssRUFBRTtBQVhFLEtBQWI7QUFhSDs7QUFFRDVtQixPQUFLLEdBQUc7QUFDSixTQUFLN1MsS0FBTCxDQUFXNlMsS0FBWDtBQUNIOztBQUVEbFcsUUFBTSxDQUFDc25CLEtBQUQsRUFBUThpQixLQUFSLEVBQWU7QUFDakIsVUFBTTV5QixJQUFJLEdBQUcsSUFBYjtBQUNBaXJDLFNBQUssQ0FBRSxHQUFFanJDLElBQUksQ0FBQ2tyQyxjQUFlLEdBQUVwN0IsS0FBTSxHQUFFQSxLQUFLLEdBQUcsYUFBSCxHQUFtQixhQUFjLEVBQXhFLEVBQTJFO0FBQzVFcGMsWUFBTSxFQUFFO0FBRG9FLEtBQTNFLENBQUwsQ0FFRzRSLElBRkgsQ0FFUSxNQUFNME4sR0FBTixJQUFhO0FBQ2pCLFVBQUdBLEdBQUcsQ0FBQ08sTUFBSixLQUFlLEdBQWxCLEVBQXNCLE1BQU0sTUFBTVAsR0FBRyxDQUFDbnFCLElBQUosRUFBWjtBQUN0QixVQUFJekQsSUFBSSxHQUFHLE1BQU00dEIsR0FBRyxDQUFDUyxJQUFKLEVBQWpCO0FBRUEsVUFBSXEzQixPQUFPLEdBQUcxbEQsSUFBSSxDQUFDazNCLE9BQUwsQ0FBYTJCLE1BQWIsQ0FBb0IsQ0FBQ0gsR0FBRCxFQUFNcXRCLE1BQU4sS0FBaUI7QUFDL0NBLGNBQU0sQ0FBQ0MsTUFBUCxHQUFnQixLQUFoQjtBQUNBdHRCLFdBQUcsQ0FBQzl4QixJQUFKLENBQVNtL0MsTUFBVCxFQUYrQyxDQUcvQzs7QUFDQSxlQUFPcnRCLEdBQVA7QUFDSCxPQUxhLEVBS1gsRUFMVyxDQUFkOztBQU9BLFVBQUksQ0FBQzhVLEtBQUwsRUFBWTtBQUNSa1ksZUFBTyxHQUFHOXFDLElBQUksQ0FBQ3JXLEtBQUwsQ0FBV21oRCxPQUFYLENBQW1CdnFCLE1BQW5CLENBQTBCdXFCLE9BQTFCLENBQVY7QUFDSCxPQUZELE1BR0ssQ0FDRDtBQUNIOztBQUVELFVBQUlPLEdBQUcsR0FBR2ptRCxJQUFJLENBQUN1YixJQUFMLEdBQVl2YixJQUFJLENBQUN1ZSxJQUEzQjtBQUNBdmUsVUFBSSxDQUFDbXlCLElBQUwsR0FBYSxTQUFROHpCLEdBQUksRUFBekI7QUFDQSxVQUFJcnJDLElBQUksQ0FBQ3JXLEtBQUwsQ0FBVzJoRCxJQUFmLEVBQXFCbG1ELElBQUksQ0FBQ215QixJQUFMLElBQWMsU0FBUXZYLElBQUksQ0FBQ3JXLEtBQUwsQ0FBVzJoRCxJQUFLLEVBQXRDO0FBQ3JCLFVBQUl0ckMsSUFBSSxDQUFDclcsS0FBTCxDQUFXaWhELGdCQUFmLEVBQWlDeGxELElBQUksQ0FBQ215QixJQUFMLElBQWMsYUFBWXZYLElBQUksQ0FBQ3VyQyxlQUFMLENBQXFCdnJDLElBQUksQ0FBQ3JXLEtBQUwsQ0FBV2loRCxnQkFBaEMsQ0FBa0QsRUFBNUU7O0FBQ2pDLFVBQUlTLEdBQUcsSUFBSWptRCxJQUFJLENBQUNvbUQsS0FBaEIsRUFBdUI7QUFDbkJILFdBQUcsR0FBR2ptRCxJQUFJLENBQUNvbUQsS0FBWDtBQUNBcG1ELFlBQUksQ0FBQ215QixJQUFMLEdBQVksSUFBWjtBQUNIOztBQUVELFVBQUlqNEIsS0FBSyxHQUFJLGFBQVkrckQsR0FBSSxPQUFNam1ELElBQUksQ0FBQ29tRCxLQUFNLGVBQWN4ckMsSUFBSSxDQUFDdXJDLGVBQUwsQ0FBcUJ2ckMsSUFBSSxDQUFDclcsS0FBTCxDQUFXaWhELGdCQUFoQyxDQUFrRCxFQUE5RztBQUNBLFVBQUk1cUMsSUFBSSxDQUFDclcsS0FBTCxDQUFXMmhELElBQWYsRUFBcUJoc0QsS0FBSyxJQUFLLFFBQU8wZ0IsSUFBSSxDQUFDclcsS0FBTCxDQUFXMmhELElBQUssRUFBakM7QUFFckJ0ckMsVUFBSSxDQUFDODdCLFFBQUwsQ0FBYztBQUNWK08sZUFBTyxFQUFFLEtBREM7QUFFVnZyRCxhQUFLLEVBQUVBLEtBRkc7QUFHVndyRCxlQUFPLEVBQUVBLE9BSEM7QUFJVnZ6QixZQUFJLEVBQUVueUIsSUFBSSxDQUFDbXlCO0FBSkQsT0FBZDtBQU1ILEtBdENELEVBc0NHM0QsS0F0Q0gsQ0FzQ1UvVixHQUFELElBQVM7QUFDZHpULGFBQU8sQ0FBQ21NLEtBQVIsQ0FBY3NILEdBQWQ7QUFDQSxhQUFPbUMsSUFBSSxDQUFDODdCLFFBQUwsQ0FBYztBQUNqQitPLGVBQU8sRUFBRSxLQURRO0FBRWpCdnJELGFBQUssRUFBRTtBQUZVLE9BQWQsQ0FBUDtBQUlILEtBNUNEO0FBNkNIOztBQUVELFFBQU0yTSxJQUFOLENBQVd3L0MsVUFBWCxFQUF1QjtBQUNuQixRQUFJQSxVQUFVLENBQUM1L0MsS0FBWCxDQUFpQjYvQyxNQUFyQixFQUE2QixPQUFPLEtBQUs5WCxhQUFMLENBQW1CK1gsWUFBbkIsQ0FBZ0NGLFVBQVUsQ0FBQzUvQyxLQUFYLENBQWlCKy9DLFdBQWpELENBQVA7QUFFN0IsVUFBTVgsS0FBSyxDQUFFLEdBQUUsS0FBS1ksWUFBYSxJQUFHSixVQUFVLENBQUM1L0MsS0FBWCxDQUFpQnMvQyxNQUFqQixDQUF3QlcsVUFBVyxFQUE1RCxFQUE4RDtBQUNyRXA0QyxZQUFNLEVBQUUsS0FENkQ7QUFFckVxNEMsaUJBQVcsRUFBRSxTQUZ3RDtBQUdyRXJJLFVBQUksRUFBRSxNQUgrRDtBQUlyRXh2QixhQUFPLEVBQUU7QUFDTCxrQkFBVSxrQkFETDtBQUVMLHdCQUFnQjtBQUZYO0FBSjRELEtBQTlELENBQVg7QUFVQXUzQixjQUFVLENBQUMzUCxRQUFYLENBQW9CO0FBQUNzUCxZQUFNLEVBQUU7QUFBVCxLQUFwQjtBQUNIOztBQUVEYixTQUFPLEdBQUc7QUFDTixVQUFNdnFDLElBQUksR0FBRyxJQUFiO0FBQ0EsVUFBTW5PLE9BQU8sR0FBR21PLElBQUksQ0FBQ2dzQyxhQUFyQjtBQUNBbjZDLFdBQU8sQ0FBQzB2QixDQUFSLEdBQVl2eEIsSUFBSSxDQUFDaThDLEtBQUwsQ0FBV3B0RCxNQUFNLENBQUNxdEQsT0FBUCxHQUFpQnJ0RCxNQUFNLENBQUN1UixVQUFQLEdBQW9CLENBQXJDLEdBQXlDeUIsT0FBTyxDQUFDOGEsS0FBUixHQUFnQixDQUFwRSxDQUFaO0FBQ0E5YSxXQUFPLENBQUMydkIsQ0FBUixHQUFZeHhCLElBQUksQ0FBQ2k4QyxLQUFMLENBQVdwdEQsTUFBTSxDQUFDc3RELE9BQVAsR0FBaUJ0dEQsTUFBTSxDQUFDMFIsV0FBUCxHQUFxQixDQUF0QyxHQUEwQ3NCLE9BQU8sQ0FBQzZtQixNQUFSLEdBQWlCLENBQXRFLENBQVo7QUFFQSxVQUFNMHpCLEdBQUcsR0FBR3BzQyxJQUFJLENBQUNxc0MsVUFBTCxHQUFrQixLQUFLajNDLG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQm91QixNQUFwQixDQUEyQjhvQixhQUFoQyxFQUErQ3o2QyxPQUEvQyxDQUE5QjtBQUNBLFVBQU1sTixHQUFHLEdBQUcsNkdBQVo7QUFDQXluRCxPQUFHLENBQUNHLFdBQUosQ0FBZ0JuekIsRUFBaEIsQ0FBbUIsY0FBbkIsRUFBbUMsQ0FBQ0MsS0FBRCxFQUFRMTBCLEdBQVIsS0FBZ0I7QUFDL0MsVUFBSUEsR0FBRyxJQUFJLHNDQUFYLEVBQW1EO0FBQ25EeW5ELFNBQUcsQ0FBQzF0QyxLQUFKO0FBQ0FzQixVQUFJLENBQUNzcUMsZUFBTDtBQUNILEtBSkQ7QUFLQThCLE9BQUcsQ0FBQ0ksT0FBSixDQUFZN25ELEdBQVo7QUFDQXluRCxPQUFHLENBQUNLLG9CQUFKLENBQXlCLEtBQXpCO0FBQ0g7O0FBRUQsTUFBSVQsYUFBSixHQUFvQjtBQUNoQixXQUFPO0FBQ0hyL0IsV0FBSyxFQUFFLEdBREo7QUFFSCtMLFlBQU0sRUFBRSxHQUZMO0FBR0hocUIscUJBQWUsRUFBRSxTQUhkO0FBSUhvbUMsVUFBSSxFQUFFLElBSkg7QUFLSDRYLGVBQVMsRUFBRSxLQUxSO0FBTUhDLGlCQUFXLEVBQUUsS0FOVjtBQU9IQyxpQkFBVyxFQUFFLEtBUFY7QUFRSEMsaUJBQVcsRUFBRSxJQVJWO0FBU0hwZ0IsV0FBSyxFQUFFLElBVEo7QUFVSHFnQixZQUFNLEVBQUUsS0FWTDtBQVdIQyxvQkFBYyxFQUFFO0FBQ1pDLHVCQUFlLEVBQUU7QUFETDtBQVhiLEtBQVA7QUFlSDs7QUFFRCxNQUFJQyxRQUFKLEdBQWU7QUFDWCxVQUFNOUIsTUFBTSxHQUFHO0FBQ1hwaUQsVUFBSSxFQUFFLGVBREs7QUFFWG1rRCxZQUFNLEVBQUUsUUFGRztBQUdYQyxhQUFPLEVBQUUsUUFIRTtBQUlYaGxCLGdCQUFVLEVBQUUsQ0FBQyxXQUFELEVBQWMsYUFBZCxFQUE2QixTQUE3QixDQUpEO0FBS1gvb0MsaUJBQVcsRUFBRSwrQ0FMRjtBQU1YMHNELGdCQUFVLEVBQUUsbUJBTkQ7QUFPWHNCLGFBQU8sRUFBRSwwRkFQRTtBQVFYQyxnQkFBVSxFQUFFLElBUkQ7QUFTWHpCLGlCQUFXLEVBQUUsa0JBVEY7QUFVWEYsWUFBTSxFQUFFO0FBVkcsS0FBZjtBQVlBLFVBQU00QixPQUFPLEdBQUc7QUFDWnZrRCxVQUFJLEVBQUUsV0FETTtBQUVabWtELFlBQU0sRUFBRSxNQUZJO0FBR1pDLGFBQU8sRUFBRSxNQUhHO0FBSVpobEIsZ0JBQVUsRUFBRSxDQUFDLFdBQUQsRUFBYyxhQUFkLEVBQTZCLFNBQTdCLENBSkE7QUFLWi9vQyxpQkFBVyxFQUFFLDJDQUxEO0FBTVowc0QsZ0JBQVUsRUFBRSxvQkFOQTtBQU9ac0IsYUFBTyxFQUFFLGtDQVBHO0FBUVpDLGdCQUFVLEVBQUUsSUFSQTtBQVNaekIsaUJBQVcsRUFBRSxTQVREO0FBVVpGLFlBQU0sRUFBRTtBQVZJLEtBQWhCO0FBWUEsVUFBTTZCLFNBQVMsR0FBRyxLQUFLN0MsZ0JBQUwsQ0FBc0I4QyxvQkFBdEIsRUFBbEI7QUFDQSxVQUFNQyxXQUFXLEdBQUcsS0FBS2hELGNBQUwsQ0FBb0JpRCxlQUF4QztBQUNBLFdBQU8sQ0FDSHpyRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCd3FELG1EQUF6QixFQUFxQztBQUFDeEMsWUFBTSxFQUFFbUMsT0FBVDtBQUFrQjVCLFlBQU0sRUFBRSxJQUExQjtBQUFnQ3ovQyxVQUFJLEVBQUUsS0FBS0EsSUFBM0M7QUFBaURzaEQsZUFBUyxFQUFFQSxTQUE1RDtBQUF1RUssY0FBUSxFQUFFSCxXQUFXLENBQUN6OUMsSUFBSSxDQUFDNjlDLEtBQUwsQ0FBVzc5QyxJQUFJLENBQUN5aUIsTUFBTCxLQUFnQixDQUEzQixDQUFEO0FBQTVGLEtBQXJDLENBREcsRUFFSHh3QixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCd3FELG1EQUF6QixFQUFxQztBQUFDeEMsWUFBTSxFQUFFQSxNQUFUO0FBQWlCTyxZQUFNLEVBQUUsSUFBekI7QUFBK0J6L0MsVUFBSSxFQUFFLEtBQUtBLElBQTFDO0FBQWdEc2hELGVBQVMsRUFBRUEsU0FBM0Q7QUFBc0VLLGNBQVEsRUFBRUgsV0FBVyxDQUFDejlDLElBQUksQ0FBQzY5QyxLQUFMLENBQVc3OUMsSUFBSSxDQUFDeWlCLE1BQUwsS0FBZ0IsQ0FBM0IsQ0FBRDtBQUEzRixLQUFyQyxDQUZHLENBQVA7QUFJSDs7QUFFRCxNQUFJeTRCLGNBQUosR0FBcUI7QUFDakIsV0FBTyxtQ0FBUDtBQUNIOztBQUVELE1BQUlXLFlBQUosR0FBbUI7QUFDZixXQUFPLDhCQUFQO0FBQ0g7O0FBRUQsTUFBSWlDLGVBQUosR0FBc0I7QUFDbEIsV0FBTyx5Q0FBUDtBQUNIOztBQUVELFFBQU14RCxlQUFOLEdBQXdCO0FBQ3BCLFVBQU10cUMsSUFBSSxHQUFHLElBQWI7O0FBQ0EsUUFBSTtBQUNBLFlBQU0rdEMsUUFBUSxHQUFHLE1BQU05QyxLQUFLLENBQUUsc0NBQUYsRUFBd0M7QUFDaEV2M0MsY0FBTSxFQUFFLEtBRHdEO0FBRWhFcTRDLG1CQUFXLEVBQUUsU0FGbUQ7QUFHaEVySSxZQUFJLEVBQUUsTUFIMEQ7QUFJaEV4dkIsZUFBTyxFQUFFO0FBQ0wsb0JBQVUsa0JBREw7QUFFTCwwQkFBZ0I7QUFGWDtBQUp1RCxPQUF4QyxDQUE1QjtBQVNBLFlBQU1yckIsSUFBSSxHQUFHLE1BQU1rbEQsUUFBUSxDQUFDbGxELElBQVQsRUFBbkI7O0FBQ0EsVUFBRyxDQUFDQSxJQUFKLEVBQVM7QUFDTG1YLFlBQUksQ0FBQzg3QixRQUFMLENBQWM7QUFDVng4QyxlQUFLLEVBQUUsc0NBREc7QUFFVnVyRCxpQkFBTyxFQUFFLElBRkM7QUFHVkQsMEJBQWdCLEVBQUUsQ0FBQyxDQUhUO0FBSVZHLG9CQUFVLEVBQUU7QUFDUnBoRCxpQkFBSyxFQUFFLENBREM7QUFFUmdjLGdCQUFJLEVBQUU7QUFGRTtBQUpGLFNBQWQ7QUFTQTtBQUNIOztBQUNELFlBQU12Z0IsSUFBSSxHQUFHb1gsSUFBSSxDQUFDQyxLQUFMLENBQVc1VCxJQUFYLENBQWI7QUFDQW1YLFVBQUksQ0FBQzg3QixRQUFMLENBQWM7QUFDVjhPLHdCQUFnQixFQUFFLENBRFI7QUFFVkcsa0JBQVUsRUFBRTtBQUNScGhELGVBQUssRUFBRSxDQURDO0FBRVJnYyxjQUFJLEVBQUV2Z0I7QUFGRTtBQUZGLE9BQWQ7QUFPQTRhLFVBQUksQ0FBQ3hYLE1BQUwsQ0FBWSxFQUFaLEVBQWdCLElBQWhCO0FBQ0gsS0FoQ0QsQ0FpQ0EsT0FBTytOLEtBQVAsRUFBYztBQUNWbk0sYUFBTyxDQUFDbU0sS0FBUixDQUFjQSxLQUFkO0FBQ0F5SixVQUFJLENBQUM4N0IsUUFBTCxDQUFjO0FBQ1Z4OEMsYUFBSyxFQUFFLHNDQURHO0FBRVZ1ckQsZUFBTyxFQUFFLElBRkM7QUFHVkQsd0JBQWdCLEVBQUUsQ0FBQyxDQUhUO0FBSVZHLGtCQUFVLEVBQUU7QUFDUnBoRCxlQUFLLEVBQUUsQ0FEQztBQUVSZ2MsY0FBSSxFQUFFO0FBRkU7QUFKRixPQUFkO0FBU0g7QUFDSjs7QUFFRGphLFFBQU0sR0FBRztBQUNMLFNBQUtpL0MsS0FBTCxDQUFXeitDLE9BQVgsQ0FBb0IzRixDQUFELElBQU9BLENBQUMsRUFBM0I7QUFDQTRqRCxnQkFBWSxHQUFHQSxZQUFZLElBQUlsb0QsbURBQUksQ0FBQ21KLGNBQUwsQ0FBb0JtSCxpQkFBcEIsQ0FBc0MsY0FBdEMsQ0FBL0I7QUFDQSxXQUFPdFEsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDekQsUUFBRSxFQUFFO0FBQUwsS0FBaEMsRUFDSHVDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ3pELFFBQUUsRUFBRTtBQUFMLEtBQWhDLEVBQW1EdUMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QmduRCxZQUF6QixFQUF1QztBQUN0RjZELGtCQUFZLEVBQUc5bUMsT0FBRCxJQUFhO0FBQ3ZCLGFBQUtrakMsY0FBTCxDQUFvQixLQUFLWSxhQUFMLENBQW1CM3JDLE9BQW5CLENBQTJCNkgsT0FBM0IsQ0FBcEI7QUFDSCxPQUhxRjtBQUl0Rm1oQixjQUFRLEVBQUUsS0FBS0EsUUFKdUU7QUFLdEZ0akIsYUFBTyxFQUFFLEtBQUtyRyxLQUx3RTtBQU10RndJLGFBQU8sRUFBRSxLQUFLdmQsS0FBTCxDQUFXdWQ7QUFOa0UsS0FBdkMsQ0FBbkQsQ0FERyxDQUFQO0FBVUg7O0FBRUQsTUFBSW1oQixRQUFKLEdBQWM7QUFDVixRQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUNBQSxZQUFRLENBQUNyOEIsSUFBVCxDQUFjO0FBQ1ZrYixhQUFPLEVBQUUsUUFEQztBQUVWaUssV0FBSyxFQUFFO0FBRkcsS0FBZCxFQUdHO0FBQ0NqSyxhQUFPLEVBQUU7QUFEVixLQUhILEVBS0c7QUFDQ0EsYUFBTyxFQUFFLFFBRFY7QUFFQzFPLGFBQU8sRUFBRSxLQUFLeTFDLFdBQUwsQ0FBaUI3cEQsSUFBakIsQ0FBc0IsSUFBdEIsRUFBNEIsTUFBTSxJQUFsQyxFQUF3QyxLQUFLaW1ELGFBQTdDO0FBRlYsS0FMSCxFQVFHO0FBQ0NuakMsYUFBTyxFQUFFO0FBRFYsS0FSSCxFQVVHO0FBQ0NBLGFBQU8sRUFBRSxRQURWO0FBRUNpSyxXQUFLLEVBQUU7QUFGUixLQVZILEVBYUcsR0FBRyxLQUFLbzZCLGVBQUwsQ0FBcUI3aUQsR0FBckIsQ0FBeUIsQ0FBQ2pILEtBQUQsRUFBUThLLEtBQVIsS0FBa0I7QUFDN0MsYUFBTztBQUNIMmEsZUFBTyxFQUFFLEtBQUs4akMsYUFBTCxDQUFtQnorQyxLQUFuQixDQUROO0FBRUg0a0IsYUFBSyxFQUFFMXZCLEtBRko7QUFHSCtXLGVBQU8sRUFBRSxLQUFLbFEsT0FBTCxDQUFhbEUsSUFBYixDQUFrQixJQUFsQixFQUF3QixNQUFNLElBQTlCO0FBSE4sT0FBUDtBQUtILEtBTkssQ0FiTixFQW1CSTtBQUNBOGlCLGFBQU8sRUFBRTtBQURULEtBbkJKLEVBcUJHO0FBQ0NBLGFBQU8sRUFBRSxRQURWO0FBRUMxTyxhQUFPLEVBQUUsS0FBSzVQO0FBRmYsS0FyQkgsRUF3Qkc7QUFDQ3NlLGFBQU8sRUFBRSxRQURWO0FBRUMxTyxhQUFPLEVBQUUsS0FBS3V5QyxVQUFMLENBQWdCM21ELElBQWhCLENBQXFCLElBQXJCLEVBQTJCLE1BQU0sSUFBakM7QUFGVixLQXhCSDtBQTRCQSxXQUFPaWtDLFFBQVA7QUFDSDs7QUFFRDRsQixhQUFXLENBQUNDLE9BQUQsRUFBVTdELGFBQVYsRUFBeUI7QUFDaEMsVUFBTSxDQUFDNW9ELEtBQUQsRUFBUTRsRCxRQUFSLElBQW9CcGxELG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXdVYsUUFBWCxDQUFvQixFQUFwQixDQUExQjtBQUNBLFdBQU9qOUIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNILEtBREcsRUFFSDtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZHLEVBR0huQixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRSw2QkFBWjtBQUEyQytLLFdBQUssRUFBRTtBQUFDd2UsYUFBSyxFQUFFLE9BQVI7QUFBaUI2ekIsa0JBQVUsRUFBRTtBQUE3QjtBQUFsRCxLQUZKLEVBR0l2K0MsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixPQUF6QixFQUFrQztBQUM5Qnc2QyxTQUFHLEVBQUd3USxVQUFELElBQWlCRCxPQUFPLEdBQUd0UixJQUFWLENBQWV3UixXQUFmLEdBQTZCRCxVQURyQjtBQUU5QnJNLGVBQVMsRUFBRXVJLGFBRm1CO0FBRzlCcjJDLGNBQVEsRUFBR3pOLENBQUQsSUFBTztBQUNiOGdELGdCQUFRLENBQUM5Z0QsQ0FBQyxDQUFDd2YsTUFBRixDQUFTdGtCLEtBQVYsQ0FBUjtBQUNILE9BTDZCO0FBTTlCbEMsVUFBSSxFQUFFLE1BTndCO0FBTzlCNkQsZUFBUyxFQUFFLGVBUG1CO0FBUTlCMitDLGlCQUFXLEVBQUUsV0FSaUI7QUFTOUJzTSxlQUFTLEVBQUUsSUFUbUI7QUFVOUI1c0QsV0FBSyxFQUFFQTtBQVZ1QixLQUFsQyxDQUhKLENBSEcsQ0FBUDtBQW9CSDs7QUFFRDRvRCxlQUFhLENBQUM5akQsQ0FBRCxFQUFJO0FBQ2IsVUFBTXlaLElBQUksR0FBRyxJQUFiO0FBQ0EsUUFBSUEsSUFBSSxDQUFDclcsS0FBTCxDQUFXa2hELE9BQVgsSUFBc0J0a0QsQ0FBQyxDQUFDNkcsS0FBRixLQUFZLEVBQXRDLEVBQTBDO0FBQzFDNFMsUUFBSSxDQUFDODdCLFFBQUwsQ0FBYztBQUNWK08sYUFBTyxFQUFFLElBREM7QUFFVnZyRCxXQUFLLEVBQUUsWUFGRztBQUdWZ3NELFVBQUksRUFBRS9rRCxDQUFDLENBQUN3ZixNQUFGLENBQVN0a0I7QUFITCxLQUFkO0FBS0EsUUFBSXF1QixLQUFLLEdBQUksU0FBUXZwQixDQUFDLENBQUN3ZixNQUFGLENBQVN0a0IsS0FBTSxFQUFwQzs7QUFDQSxRQUFJdWUsSUFBSSxDQUFDclcsS0FBTCxDQUFXaWhELGdCQUFYLEtBQWdDLENBQXBDLEVBQXVDO0FBQ25DOTZCLFdBQUssSUFBSyxhQUFZOVAsSUFBSSxDQUFDdXJDLGVBQUwsQ0FBcUJ2ckMsSUFBSSxDQUFDclcsS0FBTCxDQUFXaWhELGdCQUFoQyxDQUFrRCxFQUF4RTtBQUNIOztBQUNENXFDLFFBQUksQ0FBQ3hYLE1BQUwsQ0FBWXNuQixLQUFaLEVBQW1CLElBQW5CO0FBQ0g7O0FBRUQsTUFBSWs3QixhQUFKLEdBQW1CO0FBQ2YsV0FBTyxLQUFLTyxlQUFMLENBQXFCN2lELEdBQXJCLENBQXlCbkMsQ0FBQyxJQUFJQSxDQUFDLENBQUMzQixXQUFGLEdBQWdCYSxPQUFoQixDQUF3QixXQUF4QixFQUFxQyxHQUFyQyxDQUE5QixDQUFQO0FBQ0g7O0FBRUQsTUFBSThsRCxlQUFKLEdBQXNCO0FBQ2xCLFdBQU8sQ0FBQyxLQUFELEVBQVEsV0FBUixFQUFxQixXQUFyQixFQUFrQyxnQkFBbEMsRUFBb0QsWUFBcEQsRUFBa0UsV0FBbEUsRUFBK0UsZ0JBQS9FLEVBQWlHLGVBQWpHLEVBQWtILGtCQUFsSCxFQUFzSSxPQUF0SSxFQUErSSxXQUEvSSxFQUE0SixVQUE1SixFQUF3SyxhQUF4SyxFQUF1TCxPQUF2TCxDQUFQO0FBQ0g7O0FBRURuQixnQkFBYyxDQUFDMXFELEVBQUQsRUFBSztBQUNmLFVBQU1zZ0IsSUFBSSxHQUFHLElBQWI7QUFDQSxRQUFJQSxJQUFJLENBQUNyVyxLQUFMLENBQVdraEQsT0FBZixFQUF3QjtBQUN4QjdxQyxRQUFJLENBQUM4N0IsUUFBTCxDQUFjO0FBQ1YrTyxhQUFPLEVBQUUsSUFEQztBQUVWRCxzQkFBZ0IsRUFBRWxyRCxFQUZSO0FBR1ZKLFdBQUssRUFBRSxZQUhHO0FBSVZnc0QsVUFBSSxFQUFFLElBSkk7QUFLVnBrQyxhQUFPLEVBQUVsSCxJQUFJLENBQUNnckMsYUFBTCxDQUFtQnRyRCxFQUFuQjtBQUxDLEtBQWQ7O0FBT0EsUUFBSUEsRUFBRSxLQUFLLENBQVgsRUFBYztBQUNWc2dCLFVBQUksQ0FBQ3hYLE1BQUwsQ0FBWSxFQUFaLEVBQWdCLElBQWhCO0FBQ0E7QUFDSDs7QUFDRHdYLFFBQUksQ0FBQ3hYLE1BQUwsQ0FBYSxhQUFZd1gsSUFBSSxDQUFDdXJDLGVBQUwsQ0FBcUI3ckQsRUFBckIsQ0FBeUIsRUFBbEQsRUFBcUQsSUFBckQ7QUFDSDs7QUFFRDRJLFNBQU8sQ0FBQzRsRCxPQUFELEVBQVU7QUFDYixVQUFNbHVDLElBQUksR0FBR2t1QyxPQUFPLEVBQXBCO0FBQ0FsdUMsUUFBSSxDQUFDa2YsUUFBTDtBQUNBLFVBQU1xdUIsU0FBUyxHQUFHdnRDLElBQUksQ0FBQzBxQyxnQkFBTCxDQUFzQjhDLG9CQUF0QixFQUFsQjtBQUNBLFVBQU1DLFdBQVcsR0FBR3p0QyxJQUFJLENBQUN5cUMsY0FBTCxDQUFvQmlELGVBQXhDO0FBQ0EsUUFBSTF0QyxJQUFJLENBQUNyVyxLQUFMLENBQVdvaEQsVUFBWCxDQUFzQnBoRCxLQUF0QixLQUFnQyxDQUFwQyxFQUF1QyxPQUFPMUgsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QjZjLElBQUksQ0FBQ3N1QyxZQUFMLENBQWtCbHFELElBQWxCLENBQXVCLElBQXZCLEVBQTZCOHBELE9BQTdCLENBQXpCLENBQVA7QUFDdkMsUUFBSUssWUFBWSxHQUFHam9ELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNjdDLG9CQUFyQixFQUEyQyxDQUEzQyxDQUFuQjtBQUNBLFdBQU8sQ0FBQ25nRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0osS0FESSxFQUVKO0FBQUN3NkMsU0FBRyxFQUFHQSxHQUFELElBQVM7QUFDVjM5QixZQUFJLENBQUM0OEIsSUFBTCxDQUFVdDBDLE9BQVYsR0FBb0JxMUMsR0FBckI7QUFDSCxPQUZEO0FBRUduOEMsU0FBRyxFQUFFLElBRlI7QUFFYzRCLGVBQVMsRUFBRW1yRCxZQUFZLENBQUNwTSxhQUFiLEdBQTJCLEdBQTNCLEdBQStCb00sWUFBWSxDQUFDcE0sYUFBNUMsR0FBMEQ7QUFGbkYsS0FGSSxFQUtKbGdELG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUI4Z0Qsc0RBQXpCLEVBQXdDO0FBQUNwN0MsVUFBSSxFQUFFbVgsSUFBSSxDQUFDclcsS0FBTCxDQUFXcks7QUFBbEIsS0FBeEMsQ0FMSSxFQU1KMGdCLElBQUksQ0FBQ2l0QyxRQU5ELEVBT0pqdEMsSUFBSSxDQUFDclcsS0FBTCxDQUFXbWhELE9BQVgsQ0FBbUJwaUQsR0FBbkIsQ0FBd0J5aUQsTUFBRCxJQUFZO0FBQy9CLGFBQU9scEQsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QndxRCxtREFBekIsRUFBcUM7QUFBQ25zRCxXQUFHLEVBQUUycEQsTUFBTSxDQUFDVyxVQUFiO0FBQXlCWCxjQUFNLEVBQUVBLE1BQWpDO0FBQXlDbC9DLFlBQUksRUFBRStULElBQUksQ0FBQy9ULElBQXBEO0FBQTBEc2hELGlCQUFTLEVBQUVBLFNBQXJFO0FBQWdGSyxnQkFBUSxFQUFFSCxXQUFXLENBQUN6OUMsSUFBSSxDQUFDNjlDLEtBQUwsQ0FBVzc5QyxJQUFJLENBQUN5aUIsTUFBTCxLQUFnQixDQUEzQixDQUFEO0FBQXJHLE9BQXJDLENBQVA7QUFDSCxLQUZELENBUEksRUFVSnpTLElBQUksQ0FBQ3JXLEtBQUwsQ0FBVzR0QixJQUFYLElBQW1CdDFCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDZixRQURlLEVBRWY7QUFBQzVELFVBQUksRUFBRSxRQUFQO0FBQWlCZy9CLGFBQU8sRUFBRSxNQUFNO0FBQ3hCLFlBQUl2ZSxJQUFJLENBQUNyVyxLQUFMLENBQVdraEQsT0FBZixFQUF3QjtBQUFPN3FDLFlBQUksQ0FBQzg3QixRQUFMLENBQWM7QUFBQytPLGlCQUFPLEVBQUU7QUFBVixTQUFkO0FBQWdDN3FDLFlBQUksQ0FBQ3hYLE1BQUwsQ0FBWXdYLElBQUksQ0FBQ3JXLEtBQUwsQ0FBVzR0QixJQUF2QixFQUE2QixLQUE3QjtBQUNsRSxPQUZMO0FBRU9uMEIsZUFBUyxFQUFFLG1DQUZsQjtBQUV1RCtLLFdBQUssRUFBRTtBQUFDd2UsYUFBSyxFQUFFLE1BQVI7QUFBZ0JqSCxpQkFBUyxFQUFFLE1BQTNCO0FBQW1DcTJCLG9CQUFZLEVBQUU7QUFBakQ7QUFGOUQsS0FGZSxFQUtmOTVDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJNGMsSUFBSSxDQUFDclcsS0FBTCxDQUFXa2hELE9BQVgsR0FBcUIsU0FBckIsR0FBaUMsV0FIckMsQ0FMZSxDQVZmLEVBcUJKN3FDLElBQUksQ0FBQ3JXLEtBQUwsQ0FBV21oRCxPQUFYLENBQW1CdGxELE1BQW5CLEdBQTRCLENBQTVCLElBQWlDdkQsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QjhnRCxzREFBekIsRUFBd0M7QUFBQ3A3QyxVQUFJLEVBQUVtWCxJQUFJLENBQUNyVyxLQUFMLENBQVdySztBQUFsQixLQUF4QyxDQXJCN0IsQ0FBRCxDQUFQO0FBdUJIOztBQUVEZ3ZELGNBQVksQ0FBQ0osT0FBRCxFQUFVO0FBQ2xCLFVBQU1sdUMsSUFBSSxHQUFHa3VDLE9BQU8sRUFBcEIsQ0FEa0IsQ0FFbEI7O0FBQ0EsUUFBSUssWUFBWSxHQUFHam9ELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDNjdDLG9CQUFyQixFQUEyQyxDQUEzQyxDQUFuQjtBQUNBLFdBQU8sQ0FBQ25nRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0osS0FESSxFQUVKO0FBQUMzQixTQUFHLEVBQUUsS0FBTjtBQUFhbThDLFNBQUcsRUFBR0EsR0FBRCxJQUFVMzlCLElBQUksQ0FBQzQ4QixJQUFMLENBQVV0MEMsT0FBVixHQUFvQnExQyxHQUFoRDtBQUFzRHY2QyxlQUFTLEVBQUVtckQsWUFBWSxDQUFDcE0sYUFBYixHQUEyQixHQUEzQixHQUErQm9NLFlBQVksQ0FBQ3BNLGFBQTVDLEdBQTBEO0FBQTNILEtBRkksRUFHSmxnRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksSUFESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSSxzQ0FISixFQUlJbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLFFBREosRUFFSTtBQUNJbzdCLGFBQU8sRUFBRXZlLElBQUksQ0FBQ3VxQyxPQURsQjtBQUVJaHJELFVBQUksRUFBRSxRQUZWO0FBR0k2RCxlQUFTLEVBQUUsbUNBSGY7QUFJSStLLFdBQUssRUFBRTtBQUNIYSxlQUFPLEVBQUUsY0FETjtBQUVIdy9DLGlCQUFTLEVBQUUsTUFGUjtBQUdIaE8sa0JBQVUsRUFBRSxNQUhUO0FBSUhpTyxrQkFBVSxFQUFFO0FBSlQ7QUFKWCxLQUZKLEVBYUl4c0QsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksU0FISixDQWJKLENBSkosQ0FISSxFQTBCRDRjLElBQUksQ0FBQ2l0QyxRQTFCSixDQUFELENBQVA7QUE0Qkg7O0FBRURya0QsUUFBTSxHQUFHO0FBQ0wsV0FBTzNHLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGRyxFQUdIbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEdBREosRUFFSTtBQUFDMmlCLFVBQUksRUFBRSw0QkFBUDtBQUFxQ0MsWUFBTSxFQUFFO0FBQTdDLEtBRkosRUFHSSxvQkFISixDQUhHLENBQVA7QUFTSDs7QUFFRG1aLFVBQVEsR0FBRTtBQUNOLFVBQU0veUIsV0FBVyxHQUFHZ3pCLHFFQUFjLEVBQWxDO0FBQ0FsOUIsdURBQUksQ0FBQzRLLEtBQUwsQ0FBVzZoRCxTQUFYLENBQXFCLE1BQU07QUFDdkIsWUFBTTMwQixRQUFRLEdBQUcsTUFBTTtBQUNuQjV0QixtQkFBVztBQUNkLE9BRkQ7O0FBR0EsV0FBS3crQyxLQUFMLENBQVczK0MsSUFBWCxDQUFnQit0QixRQUFoQjtBQUNBLGFBQU8sTUFBTTtBQUNULGNBQU14dEIsS0FBSyxHQUFHLEtBQUtvK0MsS0FBTCxDQUFXbitDLFNBQVgsQ0FBcUJqRyxDQUFDLElBQUlBLENBQUMsS0FBR3d6QixRQUE5QixDQUFkO0FBQ0EsWUFBR3h0QixLQUFLLEdBQUcsQ0FBWCxFQUFhO0FBQ2IsYUFBS28rQyxLQUFMLENBQVdsK0MsTUFBWCxDQUFrQkYsS0FBbEIsRUFBeUIsQ0FBekI7QUFDSCxPQUpEO0FBS0gsS0FWRCxFQVVHLEVBVkg7QUFXSDs7QUFFRHcrQyxZQUFVLENBQUNtRCxPQUFELEVBQVU7QUFDaEIsVUFBTWx1QyxJQUFJLEdBQUdrdUMsT0FBTyxFQUFwQjtBQUNBbHVDLFFBQUksQ0FBQ2tmLFFBQUw7QUFDQSxVQUFNO0FBQUM2ckI7QUFBRCxRQUFlL3FDLElBQUksQ0FBQ3JXLEtBQTFCO0FBQ0EsUUFBSW9oRCxVQUFVLENBQUNwaEQsS0FBWCxLQUFxQixDQUF6QixFQUE0QixPQUFPMUgsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixNQUF6QixFQUFpQyxJQUFqQyxDQUFQO0FBRTVCLFdBQU9sQixtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0gsTUFERyxFQUVILElBRkcsRUFHSGxCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJ3ckQsd0RBQXpCLEVBQTBDLElBQTFDLENBSEcsRUFJSDFzRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksTUFESixFQUVJO0FBQUNnTCxXQUFLLEVBQUU7QUFBQ2dNLGFBQUssRUFBRSxTQUFSO0FBQW1Ca3FDLGdCQUFRLEVBQUUsTUFBN0I7QUFBcUM3RCxrQkFBVSxFQUFFO0FBQWpEO0FBQVIsS0FGSixFQUdJLGdCQUhKLEVBSUssR0FBRXVLLFVBQVUsQ0FBQ3BsQyxJQUFYLENBQWdCemQsUUFBUyxJQUFHNmlELFVBQVUsQ0FBQ3BsQyxJQUFYLENBQWdCeGQsYUFBYyxFQUpqRSxDQUpHLEVBVUhsRyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNnTCxXQUFLLEVBQUU7QUFBQ29zQyxlQUFPLEVBQUU7QUFBVjtBQUFSLEtBRkosRUFHSXQ0QyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksUUFESixFQUVJO0FBQUNnTCxXQUFLLEVBQUU7QUFBQ3dlLGFBQUssRUFBRSxNQUFSO0FBQWdCNmhDLGlCQUFTLEVBQUU7QUFBM0IsT0FBUjtBQUE0Q2p2RCxVQUFJLEVBQUUsUUFBbEQ7QUFBNEQ2RCxlQUFTLEVBQUU7QUFBdkUsS0FGSixFQUdJbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUUsb0JBQVo7QUFBa0NtN0IsYUFBTyxFQUFFdmUsSUFBSSxDQUFDdXFDO0FBQWhELEtBRkosRUFHSSxXQUhKLENBSEosQ0FISixDQVZHLENBQVA7QUF3Qkg7O0FBMWQ4RCxDOzs7Ozs7Ozs7Ozs7QUNUbkU7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNcUUsY0FBTixTQUE2QjNzRCxtREFBSSxDQUFDbXlDLGNBQWxDLENBQWlEO0FBQzVEeHhDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxRQUFJLENBQUMsS0FBS0EsS0FBTCxDQUFXcy9DLE1BQVgsQ0FBa0JpQyxPQUF2QixFQUFnQyxLQUFLdmhELEtBQUwsQ0FBV3MvQyxNQUFYLENBQWtCaUMsT0FBbEIsR0FBNEIsS0FBS3ZoRCxLQUFMLENBQVcraEQsUUFBdkM7QUFDaEMsU0FBS2prRCxLQUFMLEdBQWE7QUFDVGtsRCxnQkFBVSxFQUFFLEtBREg7QUFFVHpELFlBQU0sRUFBRSxLQUFLdi9DLEtBQUwsQ0FBVzBoRCxTQUFYLENBQXFCMW9ELFFBQXJCLENBQThCLEtBQUtnSCxLQUFMLENBQVdzL0MsTUFBWCxDQUFrQlcsVUFBaEQ7QUFGQyxLQUFiO0FBSUg7O0FBRURwZ0QsUUFBTSxHQUFHO0FBQ0wsVUFBTTtBQUFDeS9DO0FBQUQsUUFBVyxLQUFLdC9DLEtBQXRCO0FBQ0EsUUFBSWlqRCxVQUFVLEdBQUd4b0QsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUN3b0QsSUFBRixJQUFVeG9ELENBQUMsQ0FBQ3lvRCxXQUEvQixFQUE0QyxDQUE1QyxDQUFqQjtBQUNBLFFBQUluSSxVQUFVLEdBQUd2Z0QsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUMwZ0QsU0FBRixJQUFlMWdELENBQUMsQ0FBQzBvRCxrQkFBcEMsRUFBd0QsQ0FBeEQsQ0FBakI7QUFDQSxRQUFJQyxVQUFVLEdBQUc1b0QsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUM0b0QsTUFBRixJQUFZLENBQUM1b0QsQ0FBQyxDQUFDNm9ELG1CQUFsQyxFQUF1RCxDQUF2RCxDQUFqQjtBQUNBLFdBQU9udEQsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNILEtBREcsRUFDSTtBQUNQO0FBQUNDLGVBQVMsRUFBRyxHQUFFMHJELFVBQVUsQ0FBQ0MsSUFBSyxJQUFHRCxVQUFVLENBQUNFLFdBQVksSUFBRzFvRCxTQUFTLENBQUMzRSxHQUFWLENBQWM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2l6QyxhQUFyQixFQUFvQyxDQUFwQyxFQUF1Q0EsYUFBYyxrQkFBaUIyUixNQUFNLENBQUNPLE1BQVAsR0FBZ0Isd0JBQWhCLEdBQTJDLEVBQUc7QUFBaEwsS0FGRyxFQUdIO0FBQ0k7QUFDQTtBQUNBenBELHVEQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ3c2QyxTQUFHLEVBQUUsS0FBTjtBQUFhdjZDLGVBQVMsRUFBRSxpQkFBeEI7QUFBMkNveEIsU0FBRyxFQUFFMjJCLE1BQU0sQ0FBQ2lDLE9BQXZEO0FBQWdFaUMsYUFBTyxFQUFFLEtBQUtDLFdBQUwsQ0FBaUJsckQsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBekU7QUFBc0dtckQsZUFBUyxFQUFFO0FBQWpILEtBQWhDLENBTkQsRUFPQ3R0RCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRXlqRCxVQUFVLENBQUNJLFNBQVgsR0FBcUI7QUFBakMsS0FGSixFQUdJaGxELG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFeWpELFVBQVUsQ0FBQzJJLFVBQVgsR0FBc0IsR0FBdEIsR0FBMEJOLFVBQVUsQ0FBQ0MsTUFBckMsR0FBNEM7QUFBeEQsS0FGSixFQUdJbHRELG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxJQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJK25ELE1BQU0sQ0FBQ3BpRCxJQUhYLENBSEosRUFRSTlHLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxJQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJK25ELE1BQU0sQ0FBQ2dDLE9BSFgsRUFJSSxVQUpKLENBUkosQ0FISixFQWtCSWxyRCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRXlqRCxVQUFVLENBQUMySSxVQUFYLEdBQXNCLEdBQXRCLEdBQTBCTixVQUFVLENBQUNDO0FBQWpELEtBRkosRUFHSWx0RCxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSW5CLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdRK25ELE1BQU0sQ0FBQy9yRCxXQUhmLENBSEosQ0FISixDQWxCSixFQStCSTZDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUUsaUNBQVo7QUFBK0MrSyxXQUFLLEVBQUU7QUFBQ2c2QyxZQUFJLEVBQUU7QUFBUDtBQUF0RCxLQUZKLEVBR0lnRCxNQUFNLENBQUNoakIsVUFBUCxDQUFrQmw4QixJQUFsQixDQUF1QixJQUF2QixDQUhKLENBSEosRUFRSSxLQUFLdEMsS0FBTCxDQUFXeWhELE1BQVgsSUFBcUJucEQsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNqQixRQURpQixFQUVqQjtBQUFDNUQsVUFBSSxFQUFFLFFBQVA7QUFBaUI2RCxlQUFTLEVBQUUsZ0dBQTVCO0FBQThIK0ssV0FBSyxFQUFFO0FBQUNxZ0QsaUJBQVMsRUFBRSxNQUFaO0FBQW9COW9DLGlCQUFTLEVBQUUsS0FBL0I7QUFBc0NoWCx1QkFBZSxFQUFFO0FBQXZEO0FBQXJJLEtBRmlCLEVBR2pCek0sbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUNJLEtBREosRUFFSTtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUZKLEVBR0ksUUFISixDQUhpQixDQVJ6QixFQWlCSStuRCxNQUFNLENBQUM1MEMsS0FBUCxJQUFnQnRVLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDWixRQURZLEVBRVo7QUFBQzVELFVBQUksRUFBRSxRQUFQO0FBQWlCNkQsZUFBUyxFQUFFLDhGQUE1QjtBQUE0SCtLLFdBQUssRUFBRTtBQUFDcWdELGlCQUFTLEVBQUUsTUFBWjtBQUFvQjlvQyxpQkFBUyxFQUFFLEtBQS9CO0FBQXNDaFgsdUJBQWUsRUFBRTtBQUF2RDtBQUFuSSxLQUZZLEVBR1p6TSxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQ0ksS0FESixFQUVJO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBRkosRUFHSSxPQUhKLENBSFksQ0FqQnBCLEVBMEJJLENBQUMrbkQsTUFBTSxDQUFDNTBDLEtBQVIsSUFBaUIsQ0FBQyxLQUFLNU0sS0FBTCxDQUFXeWhELE1BQTdCLElBQXVDbnBELG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDbkMsUUFEbUMsRUFFbkM7QUFBQzVELFVBQUksRUFBRSxRQUFQO0FBQWlCNkQsZUFBUyxFQUFFLDhFQUE1QjtBQUE0RytLLFdBQUssRUFBRTtBQUFDcWdELGlCQUFTLEVBQUUsTUFBWjtBQUFvQjlvQyxpQkFBUyxFQUFFO0FBQS9CLE9BQW5IO0FBQTBKNlksYUFBTyxFQUFFLE1BQU07QUFBQyxhQUFLdHlCLElBQUw7QUFBYTtBQUF2TCxLQUZtQyxFQUduQ2hLLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxLQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGSixFQUdJLE1BSEosQ0FIbUMsQ0ExQjNDLENBL0JKLENBUEQsQ0EyRUg7QUEzRUcsS0FBUDtBQTZFSDs7QUFFRGtzRCxhQUFXLEdBQUc7QUFDVixTQUFLempELEtBQUwsQ0FBV3MvQyxNQUFYLENBQWtCaUMsT0FBbEIsR0FBNEIsS0FBS3ZoRCxLQUFMLENBQVcraEQsUUFBdkM7QUFDQSxTQUFLOVIsUUFBTCxDQUFjO0FBQUMrUyxnQkFBVSxFQUFFO0FBQWIsS0FBZDtBQUNIOztBQUVENWlELE1BQUksR0FBRztBQUNILFNBQUtKLEtBQUwsQ0FBV0ksSUFBWCxDQUFnQixJQUFoQixFQURHLENBRUg7QUFDSDs7QUF0RzJELEM7Ozs7Ozs7Ozs7OztBQ0ZoRTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU13akQsY0FBTixTQUE2Qnh0RCxtREFBSSxDQUFDbXlDLGNBQWxDLENBQWlEO0FBQzVEeHhDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFREgsUUFBTSxHQUFHO0FBQ0wsV0FBT3pKLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFDL0J1c0QsV0FBSyxFQUFFLDRCQUR3QjtBQUUvQnB1QixhQUFPLEVBQUUsV0FGc0I7QUFHL0JJLFVBQUksRUFBRSxTQUh5QjtBQUkvQnQrQixlQUFTLEVBQUUsZUFBZSxLQUFLeUksS0FBTCxDQUFXekksU0FKTjtBQUsvQm03QixhQUFPLEVBQUUsS0FBSzF5QixLQUFMLENBQVcweUIsT0FMVztBQU0vQnB3QixXQUFLLEVBQUU7QUFBQ3dlLGFBQUssRUFBRSxLQUFLOWdCLEtBQUwsQ0FBVzhVLElBQVgsSUFBbUIsTUFBM0I7QUFBbUMrWCxjQUFNLEVBQUUsS0FBSzdzQixLQUFMLENBQVc4VSxJQUFYLElBQW1CO0FBQTlEO0FBTndCLEtBQWhDLEVBUUgxZSxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUNtN0IsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FSRyxFQVNIcjhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ3UrQixVQUFJLEVBQUUsTUFBUDtBQUFlcEQsT0FBQyxFQUFFO0FBQWxCLEtBQWpDLENBVEcsQ0FBUDtBQVdIOztBQWpCMkQsQzs7Ozs7Ozs7Ozs7O0FDRmhFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFZSxNQUFNcXhCLDBCQUFOLFNBQXlDMXRELG1EQUFJLENBQUNteUMsY0FBOUMsQ0FBNkQ7QUFFeEV4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVESCxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtHLEtBQUwsQ0FBV3c4QixRQUFYLENBQW9CMy9CLEdBQXBCLENBQXdCLENBQUN3ZSxPQUFELEVBQVUvTyxDQUFWLEtBQWdCO0FBQzNDLGFBQU8sQ0FDSEEsQ0FBQyxLQUFLLENBQU4sR0FBVWxXLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUJ5bUMsa0RBQXpCLEVBQW9DLEVBQXBDLENBQVYsR0FBb0QsSUFEakQsRUFFSDNuQyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCeXNELHNEQUF6QixFQUF3Qzl1RCxNQUFNLENBQUNzWixNQUFQLENBQWMsRUFBZCxFQUFrQjhNLE9BQWxCLEVBQTJCO0FBQUNsVCxnQkFBUSxFQUFFLEtBQUtuSSxLQUFMLENBQVdtSTtBQUF0QixPQUEzQixDQUF4QyxDQUZHLENBQVA7QUFJSCxLQUxNLENBQVA7QUFNSDs7QUFidUUsQzs7Ozs7Ozs7Ozs7O0FDTDVFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBLElBQUl5bEMsVUFBSjtBQUNBLElBQUlvVyxVQUFKO0FBQ0EsSUFBSUMsY0FBSjtBQUNlLE1BQU1DLGlCQUFOLFNBQWdDOXRELG1EQUFJLENBQUNteUMsY0FBckMsQ0FBb0Q7QUFFL0R4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUVBLFNBQUtsQyxLQUFMLEdBQWE7QUFDVDRNLFdBQUssRUFBRTtBQURFLEtBQWI7QUFHSDs7QUFFRHk1QyxtQkFBaUIsR0FBRztBQUNoQixVQUFNO0FBQUMxd0QsV0FBRDtBQUFRRyxjQUFSO0FBQWtCcW1DO0FBQWxCLFFBQTRCLEtBQUtqNkIsS0FBdkM7QUFDQSxVQUFNb2tELGVBQWUsR0FBR25xQixNQUFNLEdBQUc3akMsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixRQUF6QixFQUFtQztBQUFDM0IsU0FBRyxFQUFFLGNBQU47QUFBc0I0QixlQUFTLEVBQUUsVUFBakM7QUFBNkNtN0IsYUFBTyxFQUFFdUgsTUFBTSxDQUFDdkg7QUFBN0QsS0FBbkMsRUFBMEd1SCxNQUFNLENBQUN4bUMsS0FBakgsQ0FBSCxHQUE2SCxJQUEzSjtBQUNBLFdBQU8sQ0FBQzJDLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUI4Z0Qsc0RBQXpCLEVBQXdDO0FBQUNwN0MsVUFBSSxFQUFFdko7QUFBUCxLQUF4QyxDQUFELEVBQ0Myd0QsZUFERCxFQUVDeHdELFFBQVEsQ0FBQ2lKLEdBQVQsQ0FBYXFlLE9BQU8sSUFBSTtBQUNwQixhQUFPOWtCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIybUMsK0NBQXpCLEVBQWlDO0FBQUNwcUMsVUFBRSxFQUFFcW5CLE9BQU8sQ0FBQ3JuQixFQUFiO0FBQWlCOEIsV0FBRyxFQUFFdWxCLE9BQU8sQ0FBQ3JuQixFQUE5QjtBQUFrQzBGLFlBQUksRUFBRTJoQixPQUF4QztBQUFpRHdoQixlQUFPLEVBQUVub0Msd0RBQWMsQ0FBQzJtQixPQUFPLENBQUNybkIsRUFBVCxDQUF4RTtBQUFzRnNVLGdCQUFRLEVBQUUsQ0FBQ3RVLEVBQUQsRUFBSzZvQyxPQUFMLEtBQWlCO0FBQ3JKLGVBQUsxOEIsS0FBTCxDQUFXbUksUUFBWCxDQUFvQnRVLEVBQXBCLEVBQXdCNm9DLE9BQXhCO0FBQ0g7QUFGdUMsT0FBakMsQ0FBUDtBQUdILEtBSkQsQ0FGRCxDQUFQO0FBT0g7O0FBRUR3YyxtQkFBaUIsQ0FBQ2xuQyxHQUFELEVBQU04cUMsT0FBTixFQUFjO0FBQzNCditDLFdBQU8sQ0FBQ0MsR0FBUixDQUFZd1QsR0FBWixFQUFpQjhxQyxPQUFqQjtBQUNBLFNBQUs3TSxRQUFMLENBQWM7QUFDVnZsQyxXQUFLLEVBQUU7QUFERyxLQUFkO0FBR0g7O0FBRUQ3SyxRQUFNLEdBQUU7QUFDSixRQUFHLEtBQUsvQixLQUFMLENBQVc0TSxLQUFkLEVBQW9CO0FBQ2hCLFVBQUc7QUFDQyxlQUFPLEtBQUt5NUMsaUJBQUwsRUFBUDtBQUNILE9BRkQsQ0FFQyxPQUFNenBELENBQU4sRUFBUTtBQUNMNkQsZUFBTyxDQUFDbU0sS0FBUixDQUFjaFEsQ0FBZDtBQUNBLGVBQU8sSUFBUDtBQUNIO0FBQ0osS0FQRCxNQU9LO0FBQ0QsVUFBRztBQUNDLFlBQUcsQ0FBQ2t6QyxVQUFKLEVBQWVBLFVBQVUsR0FBR3gzQyxtREFBSSxDQUFDbUosY0FBTCxDQUFvQkMsSUFBcEIsQ0FBeUI5RSxDQUFDLElBQUlBLENBQUMsQ0FBQ296QyxXQUFoQyxDQUFiO0FBQ2YsWUFBRyxDQUFDa1csVUFBSixFQUFlQSxVQUFVLEdBQUc1dEQsbURBQUksQ0FBQ21KLGNBQUwsQ0FBb0JDLElBQXBCLENBQXlCOUUsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLE9BQUYsSUFBYUQsQ0FBQyxDQUFDQyxPQUFGLENBQVVzVCxXQUFWLEtBQTBCLFlBQXJFLENBQWI7QUFDZixZQUFHLENBQUNnMkMsY0FBSixFQUFtQkEsY0FBYyxHQUFHN3RELG1EQUFJLENBQUNtSixjQUFMLENBQW9CQyxJQUFwQixDQUF5QjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMnBELElBQUYsSUFBVyxDQUFDM3BELENBQUMsQ0FBQ3dwQixTQUFILElBQWdCLENBQUN4cEIsQ0FBQyxDQUFDNHBELGlCQUE1RCxDQUFqQjtBQUVuQixZQUFJcmtELFFBQVEsR0FBRyxFQUFmOztBQUNBLFlBQUcsS0FBS0QsS0FBTCxDQUFXek0sV0FBZCxFQUEwQjtBQUN0QjBNLGtCQUFRLENBQUNFLElBQVQsZUFBYyxvQkFBQyxVQUFELENBQVksUUFBWjtBQUFxQixnQkFBSSxFQUFDLGFBQTFCO0FBQXdDLHNCQUFVLEVBQUU7QUFBcEQsYUFDVCxLQUFLSCxLQUFMLENBQVd6TSxXQURGLENBQWQsZUFFd0Isb0JBQUMsa0RBQUQsT0FGeEI7QUFHSDs7QUFDRDBNLGdCQUFRLENBQUNFLElBQVQsQ0FBYyxHQUFHLEtBQUtILEtBQUwsQ0FBV3BNLFFBQVgsQ0FBb0JpSixHQUFwQixDQUF3QnFlLE9BQU8sSUFBSTtBQUNoRCxjQUFJcG5CLElBQUksR0FBRyxDQUNQb25CLE9BQU8sQ0FBQ2xlLElBREQsQ0FBWDs7QUFHQSxjQUFHa2UsT0FBTyxDQUFDL21CLFlBQVgsRUFBd0I7QUFDcEJMLGdCQUFJLENBQUNxTSxJQUFMLGVBQVU7QUFBSyx1QkFBUyxFQUFFOGpELGNBQWMsQ0FBQ0k7QUFBL0IsZ0NBQVY7QUFDSDs7QUFDRCw4QkFBTyxvQkFBQyxVQUFELENBQVksT0FBWjtBQUFvQixvQkFBUSxFQUFHem9ELEVBQUQsSUFBUTtBQUN6QyxtQkFBS29FLEtBQUwsQ0FBV21JLFFBQVgsQ0FBb0IrUyxPQUFPLENBQUNybkIsRUFBNUIsRUFBZ0MrSCxFQUFFLENBQUNzZSxNQUFILENBQVV3aUIsT0FBMUM7QUFDQSxtQkFBS3A4QixXQUFMO0FBQ0gsYUFITTtBQUdKLGVBQUcsRUFBRTRhLE9BQU8sQ0FBQ3JuQixFQUhUO0FBR2EsaUJBQUssRUFBRVUsd0RBQWMsQ0FBQzJtQixPQUFPLENBQUNybkIsRUFBVCxDQUhsQztBQUdnRCxxQkFBUyxFQUFFOE8sa0JBQWtCLENBQUNDLEdBQW5CLENBQXVCO0FBQ3JGc3RDLDBCQUFZLEVBQUU7QUFEdUUsYUFBdkIsQ0FIM0Q7QUFLSCxvQkFBUSxFQUFFLEtBTFA7QUFLYyxzQkFBVSxFQUFFLEtBTDFCO0FBTUgsZ0JBQUksRUFBRThULFVBQVUsQ0FBQ3JwRCxPQUFYLENBQW1Cd3FDLEtBQW5CLENBQXlCb2YsT0FONUI7QUFNcUMsaUJBQUssRUFBRVAsVUFBVSxDQUFDcnBELE9BQVgsQ0FBbUIwTyxNQUFuQixDQUEwQms3QyxPQU50RTtBQU0rRSxnQkFBSSxFQUFFcnBDLE9BQU8sQ0FBQ3BuQjtBQU43RixhQU9GQSxJQVBFLENBQVA7QUFTSCxTQWhCZ0IsQ0FBakI7QUFpQkEsNEJBQU8sb0JBQUMsVUFBRCxDQUFZLFdBQVo7QUFBd0IsYUFBRyxFQUFDLElBQTVCO0FBQWlDLGVBQUssRUFBRSxLQUFLa00sS0FBTCxDQUFXdk07QUFBbkQsV0FDRndNLFFBREUsQ0FBUDtBQUdILE9BL0JELENBK0JDLE9BQU12RixDQUFOLEVBQVE7QUFDTDZELGVBQU8sQ0FBQ21NLEtBQVIsQ0FBY2hRLENBQWQ7QUFDQTArQixvQkFBWSxDQUFDLE1BQUk7QUFDYixlQUFLNlcsUUFBTCxDQUFjO0FBQ1Z2bEMsaUJBQUssRUFBRTtBQURHLFdBQWQ7QUFHSCxTQUpXLENBQVo7QUFLQSxlQUFPLElBQVA7QUFDSDtBQUNKO0FBQ0o7O0FBL0U4RCxDOzs7Ozs7Ozs7Ozs7QUNWbkU7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNODVDLGlCQUFOLFNBQWdDcHVELG1EQUFJLENBQUNteUMsY0FBckMsQ0FBb0Q7QUFDL0R4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNILEdBSDhELENBSW5FOzs7QUFDSUgsUUFBTSxHQUFHO0FBQ0wsV0FBT3pKLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSCxJQURHLEVBRUg7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FGRyxFQUdILEtBQUt5SSxLQUFMLENBQVdoRCxJQUhSLENBQVA7QUFLSDs7QUFYOEQsQzs7Ozs7Ozs7Ozs7O0FDRm5FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBLElBQUl5bkQsVUFBVSxHQUFHLEVBQWpCOztBQUNBLFNBQVNDLFlBQVQsQ0FBc0J4bkQsSUFBdEIsRUFBMkI7QUFDdkIsTUFBSTNGLFNBQVMsR0FBR2t0RCxVQUFVLENBQUNqbEQsSUFBWCxDQUFnQjlFLENBQUMsSUFBSUEsQ0FBQyxDQUFDa1IsVUFBRixDQUFhMU8sSUFBSSxHQUFDLEdBQWxCLENBQXJCLENBQWhCO0FBQ0EsTUFBRzNGLFNBQUgsRUFBYSxPQUFPQSxTQUFQO0FBQ2JBLFdBQVMsR0FBR2tELFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDd0MsSUFBRCxDQUFwQixFQUE0QixDQUE1QixFQUErQkEsSUFBL0IsQ0FBWjtBQUNBdW5ELFlBQVUsQ0FBQ3RrRCxJQUFYLENBQWdCNUksU0FBaEI7QUFDQSxTQUFPQSxTQUFQO0FBQ0g7O0FBRWMsTUFBTW90RCxVQUFOLFNBQXlCdnVELG1EQUFJLENBQUNteUMsY0FBOUIsQ0FBNkM7QUFFeER4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUttSSxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBYzVQLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEI7QUFDSDs7QUFFRDRQLFVBQVEsR0FBRztBQUNQLFNBQUtuSSxLQUFMLENBQVcwOEIsT0FBWCxHQUFxQixDQUFDLEtBQUsxOEIsS0FBTCxDQUFXMDhCLE9BQWpDO0FBQ0EsU0FBSzE4QixLQUFMLENBQVdtSSxRQUFYLENBQW9CLEtBQUtuSSxLQUFMLENBQVduTSxFQUEvQixFQUFtQyxLQUFLbU0sS0FBTCxDQUFXMDhCLE9BQTlDO0FBQ0g7O0FBRUQ3OEIsUUFBTSxHQUFHO0FBQ0wsUUFBSTtBQUFDN0MsVUFBRDtBQUFPbEo7QUFBUCxRQUFlLEtBQUtrTSxLQUFMLENBQVd6RyxJQUE5Qjs7QUFDQSxRQUFHLENBQUNrckQsVUFBVSxDQUFDamxELElBQVgsQ0FBZ0I5RSxDQUFDLElBQUlBLENBQUMsQ0FBQ2tSLFVBQUYsQ0FBYSxPQUFiLENBQXJCLENBQUosRUFBZ0Q7QUFDNUM2NEMsZ0JBQVUsQ0FBQ3RrRCxJQUFYLENBQWdCMUYsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUMycEQsSUFBRixJQUFXLENBQUMzcEQsQ0FBQyxDQUFDd3BCLFNBQUgsSUFBZ0IsQ0FBQ3hwQixDQUFDLENBQUM0cEQsaUJBQWpELEVBQXFFLENBQXJFLEVBQXdFRCxJQUF4RjtBQUNIOztBQUNELFFBQUcsS0FBS3JrRCxLQUFMLENBQVd6RyxJQUFYLENBQWdCcEYsWUFBbkIsRUFBZ0M7QUFDNUJMLFVBQUksR0FBRyxDQUNIQSxJQURHLEVBRUhrTixLQUFLLENBQUMxSixhQUFOLENBQW9CLEtBQXBCLEVBQTJCO0FBQUNDLGlCQUFTLEVBQUVtdEQsWUFBWSxDQUFDLE1BQUQ7QUFBeEIsT0FBM0IsRUFBOEQsZ0JBQTlELENBRkcsQ0FBUDtBQUlIOztBQUNELFdBQU90dUQsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUNIbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFoQyxFQUNJbkIsbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixJQUF6QixFQUErQjtBQUFDM0IsU0FBRyxFQUFFLE9BQU47QUFBZTRCLGVBQVMsRUFBRTtBQUExQixLQUEvQixFQUFzSHlGLElBQXRILENBREosRUFFSTVHLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIybUMsMERBQXpCLEVBQWlDO0FBQUN0b0MsU0FBRyxFQUFFLFFBQU47QUFBZ0J3UyxjQUFRLEVBQUUsS0FBS0EsUUFBL0I7QUFBeUN1MEIsYUFBTyxFQUFFLEtBQUsxOEIsS0FBTCxDQUFXMDhCO0FBQTdELEtBQWpDLENBRkosQ0FERyxFQUtIdG1DLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsS0FBekIsRUFBZ0M7QUFBQ0MsZUFBUyxFQUFFLDZDQUFaO0FBQTJEK0ssV0FBSyxFQUFFO0FBQUNnNkMsWUFBSSxFQUFFO0FBQVA7QUFBbEUsS0FBaEMsRUFBdUh4b0QsSUFBdkgsQ0FMRyxDQUFQO0FBT0g7O0FBOUJ1RCxDOzs7Ozs7Ozs7Ozs7QUNaNUQ7QUFBQTtBQUFBO0FBQUE7QUFFZSxNQUFNOHdELG1CQUFOLFNBQWtDeHVELG1EQUFJLENBQUNteUMsY0FBdkMsQ0FBc0Q7QUFDakV4eEMsYUFBVyxDQUFDaUosS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNIOztBQUVESCxRQUFNLEdBQUc7QUFDTCxXQUFPekosbURBQUksQ0FBQzBuQixLQUFMLENBQVd4bUIsYUFBWCxDQUF5QixLQUF6QixFQUFnQztBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUFoQyxDQUFQO0FBQ0g7O0FBUGdFLEM7Ozs7Ozs7Ozs7OztBQ0ZyRTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7OztBQVlBO0FBQ0E7QUFDQSxJQUFJc3RELGNBQUo7O0FBQ0EsU0FBU0MsaUJBQVQsR0FBNEI7QUFDM0IsTUFBR0QsY0FBSCxFQUFrQixPQUFPQSxjQUFQO0FBQ2xCLFNBQU9BLGNBQWMsR0FBR3RsRCwrREFBYyxDQUFDNmUsV0FBZixDQUEyQixTQUEzQixFQUFzQyxjQUF0QyxDQUF4QjtBQUNBOztBQUNELElBQUkybUMsYUFBSjs7QUFDQSxTQUFTQyxnQkFBVCxHQUEyQjtBQUMxQixNQUFHRCxhQUFILEVBQWlCLE9BQU9BLGFBQVA7QUFDakIsU0FBT0EsYUFBYSxHQUFHeGxELCtEQUFjLENBQUM2ZSxXQUFmLENBQTJCLE9BQTNCLEVBQW9DLGdCQUFwQyxDQUF2QjtBQUNBOztBQUVELE1BQU02bUMsUUFBUSxHQUFHLFVBQVNDLFdBQVQsRUFBc0I7QUFDbkMsUUFBTUMsU0FBUyxHQUFHRCxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUzNEMsV0FBZixLQUErQjI0QyxXQUFXLENBQUMxNEMsS0FBWixDQUFrQixDQUFsQixDQUFqRDtBQUNBLFFBQU00NEMsWUFBWSxHQUFHTixpQkFBaUIsR0FBSSxVQUFTSyxTQUFVLEVBQXZCLENBQXRDO0FBQ0EsTUFBSUMsWUFBSixFQUFrQixPQUFPQSxZQUFQO0FBQ2xCLFNBQU8sSUFBUDtBQUNILENBTEQ7O0FBT0EsTUFBTUMsV0FBVyxHQUFHLFVBQVNILFdBQVQsRUFBc0I7QUFDdEMsU0FBT0QsUUFBUSxDQUFDQyxXQUFELENBQVIsR0FBd0IsSUFBeEIsR0FBK0IsS0FBdEM7QUFDSCxDQUZEOztBQUlBLE1BQU1JLElBQUksR0FBRyxVQUFTMXZELEtBQVQsRUFBZ0I7QUFDekIsU0FBUSxHQUFFQSxLQUFNLElBQWhCO0FBQ0gsQ0FGRDs7QUFJZSxNQUFNaS9DLGVBQU4sQ0FBc0I7QUFDcEM7Ozs7Ozs7Ozs7OztBQVlBOTlDLGFBQVcsQ0FBQzZQLElBQUQsRUFBTzVKLElBQVAsRUFBYWdKLE9BQU8sR0FBRyxFQUF2QixFQUEyQjtBQUNyQyxVQUFNO0FBQUMxRCxXQUFLLEdBQUcsT0FBVDtBQUFrQjBYLFVBQUksR0FBRyxLQUF6QjtBQUFnQ3VyQyxpQkFBVyxHQUFHLEtBQTlDO0FBQXFENytCLGNBQVEsR0FBRyxLQUFoRTtBQUF1RW91QixrQkFBWSxHQUFHO0FBQXRGLFFBQThGOXVDLE9BQXBHO0FBQ0EsU0FBS1ksSUFBTCxHQUFZQSxJQUFJLFlBQVlDLE1BQWhCLEdBQXlCRCxJQUFJLENBQUMsQ0FBRCxDQUE3QixHQUFtQ0EsSUFBL0M7QUFDTSxTQUFLMGUsS0FBTCxHQUFhdG9CLElBQWI7QUFDQSxTQUFLc0YsS0FBTCxHQUFhQSxLQUFLLENBQUN2SixXQUFOLEVBQWI7QUFDTixTQUFLaWhCLElBQUwsR0FBWUEsSUFBSSxDQUFDamhCLFdBQUwsRUFBWjtBQUNNLFNBQUt3c0QsV0FBTCxHQUFtQkEsV0FBbkI7QUFDQSxTQUFLNytCLFFBQUwsR0FBZ0JBLFFBQWhCO0FBRUEsUUFBSSxDQUFDMitCLFdBQVcsQ0FBQyxLQUFLcnJDLElBQU4sQ0FBaEIsRUFBNkIsT0FBT2prQixzREFBSyxDQUFDaWMsR0FBTixDQUFVLGlCQUFWLEVBQThCLFFBQU8sS0FBS2dJLElBQUssa0JBQS9DLENBQVA7QUFDbkMsUUFBSSxDQUFDcXJDLFdBQVcsQ0FBQyxLQUFLL2lELEtBQU4sQ0FBaEIsRUFBOEIsT0FBT3ZNLHNEQUFLLENBQUNpYyxHQUFOLENBQVUsaUJBQVYsRUFBOEIsU0FBUSxLQUFLMVAsS0FBTSxrQkFBakQsQ0FBUDtBQUU5QixTQUFLcUssT0FBTCxHQUFldFYsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQWY7QUFDQSxTQUFLcVYsT0FBTCxDQUFhcFYsU0FBYixHQUF5Qnl0RCxnQkFBZ0IsR0FBR3ZsRCxLQUFuQixHQUEyQixHQUEzQixHQUFpQ3VsRCxnQkFBZ0IsR0FBR25oQyxxQkFBN0U7QUFFQSxTQUFLMmhDLGNBQUwsR0FBc0JudUQsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQXRCO0FBQ0EsU0FBS2t1RCxjQUFMLENBQW9CanVELFNBQXBCLEdBQWlDLEdBQUV1dEQsaUJBQWlCLEdBQUdwUSxPQUFRLElBQUd1USxRQUFRLENBQUMsS0FBSzNpRCxLQUFOLENBQWEsRUFBdkY7QUFFQSxTQUFLbWpELFlBQUwsR0FBb0JwdUQsUUFBUSxDQUFDQyxhQUFULENBQXVCLEtBQXZCLENBQXBCO0FBQ0EsU0FBS211RCxZQUFMLENBQWtCbHVELFNBQWxCLEdBQThCdXRELGlCQUFpQixHQUFHWSxjQUFsRDtBQUVBLFVBQU1DLGNBQWMsR0FBR3R1RCxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBdkI7QUFDQXF1RCxrQkFBYyxDQUFDcHVELFNBQWYsR0FBMkJ1dEQsaUJBQWlCLEdBQUdjLGNBQS9DO0FBRUEsU0FBS0osY0FBTCxDQUFvQmpoQyxNQUFwQixDQUEyQm9oQyxjQUEzQjtBQUNBLFNBQUtILGNBQUwsQ0FBb0JqaEMsTUFBcEIsQ0FBMkIsS0FBS2toQyxZQUFoQztBQUNBLFNBQUs5NEMsT0FBTCxDQUFhNFgsTUFBYixDQUFvQixLQUFLaWhDLGNBQXpCOztBQUVBLFFBQUcxUSxZQUFILEVBQWdCO0FBQ2YsV0FBS2x1QyxJQUFMLENBQVVoRixnQkFBVixDQUEyQixZQUEzQixFQUF5QyxNQUFNO0FBQzlDLFlBQUksS0FBSzhrQixRQUFULEVBQW1CO0FBQ25CLGFBQUt1aUIsSUFBTDtBQUVBLGNBQU0xYSxRQUFRLEdBQUcsSUFBSTFTLGdCQUFKLENBQXNCQyxTQUFELElBQWU7QUFDcERBLG1CQUFTLENBQUN6YixPQUFWLENBQW1CMmIsUUFBRCxJQUFjO0FBQy9CLGtCQUFNd1MsS0FBSyxHQUFHM2lCLEtBQUssQ0FBQ2lNLElBQU4sQ0FBV2tFLFFBQVEsQ0FBQ3lTLFlBQXBCLENBQWQ7QUFDQSxrQkFBTUMsV0FBVyxHQUFHRixLQUFLLENBQUNoYixPQUFOLENBQWMsS0FBSzVNLElBQW5CLElBQTJCLENBQUMsQ0FBaEQ7QUFDQSxrQkFBTStuQixXQUFXLEdBQUdILEtBQUssQ0FBQy9FLElBQU4sQ0FBVzBDLE1BQU0sSUFBSUEsTUFBTSxDQUFDL2UsUUFBUCxDQUFnQixLQUFLeEcsSUFBckIsQ0FBckIsQ0FBcEI7O0FBQ0EsZ0JBQUk4bkIsV0FBVyxJQUFJQyxXQUFuQixFQUFnQztBQUMvQixtQkFBS3FhLElBQUw7QUFDQXphLHNCQUFRLENBQUNrVSxVQUFUO0FBQ0E7QUFDRCxXQVJEO0FBU0EsU0FWZ0IsQ0FBakI7QUFZQWxVLGdCQUFRLENBQUM1UixPQUFULENBQWlCdGxCLFFBQVEsQ0FBQ0csSUFBMUIsRUFBZ0M7QUFBQ3FsQixpQkFBTyxFQUFFLElBQVY7QUFBZ0JELG1CQUFTLEVBQUU7QUFBM0IsU0FBaEM7QUFDQSxPQWpCRDtBQW1CQSxXQUFLaFcsSUFBTCxDQUFVaEYsZ0JBQVYsQ0FBMkIsWUFBM0IsRUFBeUMsTUFBTTtBQUM5QyxhQUFLb25DLElBQUw7QUFDQSxPQUZEO0FBR0E7QUFDRTtBQUVEOzs7QUFDQSxNQUFJOWtCLFNBQUosR0FBZ0I7QUFDbEIsV0FBTzdzQixRQUFRLENBQUM2SCxhQUFULENBQXVCLE1BQUluSixzREFBSyxDQUFDc0osUUFBTixDQUFlNUUsU0FBUyxDQUFDM0UsR0FBVixDQUFjNEUsQ0FBQyxJQUFJQSxDQUFDLENBQUNtckQsT0FBckIsRUFBOEIsQ0FBOUIsRUFBaUNBLE9BQWhELENBQUosR0FBNkQsTUFBN0QsR0FBb0U5dkQsc0RBQUssQ0FBQ3NKLFFBQU4sQ0FBZTVFLFNBQVMsQ0FBQzNFLEdBQVYsQ0FBYzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDeXBCLGNBQXJCLEVBQXFDLENBQXJDLEVBQXdDQSxjQUF2RCxDQUEzRixDQUFQO0FBQ0E7QUFDRTs7O0FBQ0EsTUFBSTJoQyxZQUFKLEdBQW1CO0FBQUUsV0FBTyxLQUFLbC9DLElBQUwsQ0FBVXdtQixxQkFBVixHQUFrQ3JxQixHQUFsQyxHQUF3QyxLQUFLNEosT0FBTCxDQUFhdWdCLFlBQXJELElBQXFFLENBQTVFO0FBQWdGO0FBQ3JHOzs7QUFDQSxNQUFJNjRCLFlBQUosR0FBbUI7QUFBRSxXQUFPLEtBQUtuL0MsSUFBTCxDQUFVd21CLHFCQUFWLEdBQWtDcnFCLEdBQWxDLEdBQXdDLEtBQUs2RCxJQUFMLENBQVVzbUIsWUFBbEQsR0FBaUUsS0FBS3ZnQixPQUFMLENBQWF1Z0IsWUFBOUUsSUFBOEZuM0Isc0RBQUssQ0FBQ3lPLFlBQTNHO0FBQTBIO0FBQy9JOzs7QUFDQSxNQUFJd2hELFdBQUosR0FBa0I7QUFBRSxXQUFPLEtBQUtwL0MsSUFBTCxDQUFVd21CLHFCQUFWLEdBQWtDbHFCLElBQWxDLEdBQXlDLEtBQUt5SixPQUFMLENBQWFxZ0IsV0FBdEQsSUFBcUUsQ0FBNUU7QUFBZ0Y7QUFDcEc7OztBQUNILE1BQUlpNUIsWUFBSixHQUFtQjtBQUFFLFdBQU8sS0FBS3IvQyxJQUFMLENBQVV3bUIscUJBQVYsR0FBa0NscUIsSUFBbEMsR0FBeUMsS0FBSzBELElBQUwsQ0FBVW9tQixXQUFuRCxHQUFpRSxLQUFLcmdCLE9BQUwsQ0FBYXFnQixXQUE5RSxJQUE2RmozQixzREFBSyxDQUFDbU8sV0FBMUc7QUFBd0g7QUFFMUk7OztBQUNIOGtDLE1BQUksR0FBRztBQUNBLFNBQUtyOEIsT0FBTCxDQUFhOUwsTUFBYjtBQUNBLFNBQUsya0QsY0FBTCxDQUFvQmp1RCxTQUFwQixHQUFnQyxLQUFLMnVELFVBQXJDO0FBQ047QUFFRTs7O0FBQ0hqZCxNQUFJLEdBQUc7QUFDQSxTQUFLdWMsY0FBTCxDQUFvQmp1RCxTQUFwQixHQUFpQyxHQUFFdXRELGlCQUFpQixHQUFHcFEsT0FBUSxJQUFHdVEsUUFBUSxDQUFDLEtBQUszaUQsS0FBTixDQUFhLEVBQXZGO0FBQ04sU0FBS21qRCxZQUFMLENBQWtCMzRCLFdBQWxCLEdBQWdDLEtBQUt4SCxLQUFyQztBQUNBLFNBQUtwQixTQUFMLENBQWVLLE1BQWYsQ0FBc0IsS0FBSzVYLE9BQTNCOztBQUVBLFFBQUksS0FBS3FOLElBQUwsSUFBYSxLQUFqQixFQUF3QjtBQUN2QixVQUFJLEtBQUs4ckMsWUFBTCxJQUFzQixDQUFDLEtBQUtBLFlBQU4sSUFBc0IsS0FBS1AsV0FBckQsRUFBbUUsS0FBS1ksU0FBTCxHQUFuRSxLQUNLLEtBQUtDLFNBQUw7QUFDTDs7QUFFRCxRQUFJLEtBQUtwc0MsSUFBTCxJQUFhLFFBQWpCLEVBQTJCO0FBQzFCLFVBQUksS0FBSytyQyxZQUFMLElBQXNCLENBQUMsS0FBS0EsWUFBTixJQUFzQixLQUFLUixXQUFyRCxFQUFtRSxLQUFLYSxTQUFMLEdBQW5FLEtBQ0ssS0FBS0QsU0FBTDtBQUNMOztBQUVELFFBQUksS0FBS25zQyxJQUFMLElBQWEsTUFBakIsRUFBeUI7QUFDeEIsVUFBSSxLQUFLZ3NDLFdBQUwsSUFBcUIsQ0FBQyxLQUFLQSxXQUFOLElBQXFCLEtBQUtULFdBQW5ELEVBQWlFLEtBQUtjLFFBQUwsR0FBakUsS0FDSyxLQUFLQyxTQUFMO0FBQ0w7O0FBRUQsUUFBSSxLQUFLdHNDLElBQUwsSUFBYSxPQUFqQixFQUEwQjtBQUN6QixVQUFJLEtBQUtpc0MsWUFBTCxJQUFzQixDQUFDLEtBQUtBLFlBQU4sSUFBc0IsS0FBS1YsV0FBckQsRUFBbUUsS0FBS2UsU0FBTCxHQUFuRSxLQUNLLEtBQUtELFFBQUw7QUFDTDtBQUNEO0FBRUU7OztBQUNIRixXQUFTLEdBQUc7QUFDWCxTQUFLWCxjQUFMLENBQW9CemxELFNBQXBCLENBQThCaU4sR0FBOUIsQ0FBa0NpNEMsUUFBUSxDQUFDLEtBQUQsQ0FBMUM7QUFDQSxTQUFLdDRDLE9BQUwsQ0FBYXJLLEtBQWIsQ0FBbUJ1TSxXQUFuQixDQUErQixLQUEvQixFQUFzQ3kyQyxJQUFJLENBQUMsS0FBSzErQyxJQUFMLENBQVV3bUIscUJBQVYsR0FBa0NycUIsR0FBbEMsR0FBd0MsS0FBSzRKLE9BQUwsQ0FBYXVnQixZQUFyRCxHQUFvRSxFQUFyRSxDQUExQztBQUNBLFNBQUtxNUIsa0JBQUw7QUFDQTtBQUVFOzs7QUFDSEgsV0FBUyxHQUFHO0FBQ1gsU0FBS1osY0FBTCxDQUFvQnpsRCxTQUFwQixDQUE4QmlOLEdBQTlCLENBQWtDaTRDLFFBQVEsQ0FBQyxRQUFELENBQTFDO0FBQ0EsU0FBS3Q0QyxPQUFMLENBQWFySyxLQUFiLENBQW1CdU0sV0FBbkIsQ0FBK0IsS0FBL0IsRUFBc0N5MkMsSUFBSSxDQUFDLEtBQUsxK0MsSUFBTCxDQUFVd21CLHFCQUFWLEdBQWtDcnFCLEdBQWxDLEdBQXdDLEtBQUs2RCxJQUFMLENBQVVzbUIsWUFBbEQsR0FBaUUsRUFBbEUsQ0FBMUM7QUFDQSxTQUFLcTVCLGtCQUFMO0FBQ0E7QUFFRTs7O0FBQ0hGLFVBQVEsR0FBRztBQUNWLFNBQUtiLGNBQUwsQ0FBb0J6bEQsU0FBcEIsQ0FBOEJpTixHQUE5QixDQUFrQ2k0QyxRQUFRLENBQUMsTUFBRCxDQUExQztBQUNBLFNBQUt0NEMsT0FBTCxDQUFhckssS0FBYixDQUFtQnVNLFdBQW5CLENBQStCLE1BQS9CLEVBQXVDeTJDLElBQUksQ0FBQyxLQUFLMStDLElBQUwsQ0FBVXdtQixxQkFBVixHQUFrQ2xxQixJQUFsQyxHQUF5QyxLQUFLeUosT0FBTCxDQUFhcWdCLFdBQXRELEdBQW9FLEVBQXJFLENBQTNDO0FBQ0EsU0FBS3c1QixnQkFBTDtBQUNBO0FBRUU7OztBQUNIRixXQUFTLEdBQUc7QUFDWCxTQUFLZCxjQUFMLENBQW9CemxELFNBQXBCLENBQThCaU4sR0FBOUIsQ0FBa0NpNEMsUUFBUSxDQUFDLE9BQUQsQ0FBMUM7QUFDQSxTQUFLdDRDLE9BQUwsQ0FBYXJLLEtBQWIsQ0FBbUJ1TSxXQUFuQixDQUErQixNQUEvQixFQUF1Q3kyQyxJQUFJLENBQUMsS0FBSzErQyxJQUFMLENBQVV3bUIscUJBQVYsR0FBa0NscUIsSUFBbEMsR0FBeUMsS0FBSzBELElBQUwsQ0FBVW9tQixXQUFuRCxHQUFpRSxFQUFsRSxDQUEzQztBQUNBLFNBQUt3NUIsZ0JBQUw7QUFDQTs7QUFFREQsb0JBQWtCLEdBQUc7QUFDZCxVQUFNRSxVQUFVLEdBQUcsS0FBSzcvQyxJQUFMLENBQVV3bUIscUJBQVYsR0FBa0NscUIsSUFBbEMsR0FBMEMsS0FBSzBELElBQUwsQ0FBVW9tQixXQUFWLEdBQXdCLENBQXJGO0FBQ0EsU0FBS3JnQixPQUFMLENBQWFySyxLQUFiLENBQW1CdU0sV0FBbkIsQ0FBK0IsTUFBL0IsRUFBdUN5MkMsSUFBSSxDQUFDbUIsVUFBVSxHQUFJLEtBQUs5NUMsT0FBTCxDQUFhcWdCLFdBQWIsR0FBMkIsQ0FBMUMsQ0FBM0M7QUFDTjs7QUFFRHc1QixrQkFBZ0IsR0FBRztBQUNsQixVQUFNQyxVQUFVLEdBQUcsS0FBSzcvQyxJQUFMLENBQVV3bUIscUJBQVYsR0FBa0NycUIsR0FBbEMsR0FBeUMsS0FBSzZELElBQUwsQ0FBVXNtQixZQUFWLEdBQXlCLENBQXJGO0FBQ0EsU0FBS3ZnQixPQUFMLENBQWFySyxLQUFiLENBQW1CdU0sV0FBbkIsQ0FBK0IsS0FBL0IsRUFBc0N5MkMsSUFBSSxDQUFDbUIsVUFBVSxHQUFJLEtBQUs5NUMsT0FBTCxDQUFhdWdCLFlBQWIsR0FBNEIsQ0FBM0MsQ0FBMUM7QUFDQTs7QUFySm1DLEM7Ozs7Ozs7Ozs7OztBQ3hDckM7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVlLDZFQUFjbHNCLEtBQUssQ0FBQ0MsU0FBcEIsQ0FBOEI7QUFDekNsSyxhQUFXLENBQUNpSixLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0g7O0FBRUQsUUFBTTJCLGlCQUFOLEdBQTBCO0FBQ3RCLFVBQU07QUFBQ1csV0FBSyxHQUFHLE9BQVQ7QUFBa0IwWCxVQUFJLEdBQUcsS0FBekI7QUFBZ0NoZCxVQUFJLEdBQUc7QUFBdkMsUUFBNkMsS0FBS2dELEtBQXhEO0FBQ0EsU0FBSzRHLElBQUwsR0FBWXhRLG1EQUFJLENBQUMrcUIsUUFBTCxDQUFjdWxDLFdBQWQsQ0FBMEIsSUFBMUIsQ0FBWjtBQUNBLFNBQUtoUyxPQUFMLEdBQWUsSUFBSXhCLGdEQUFKLENBQVksS0FBS3RzQyxJQUFqQixFQUF1QjVKLElBQXZCLEVBQTZCO0FBQUNzRixXQUFEO0FBQVEwWDtBQUFSLEtBQTdCLENBQWY7QUFDSDs7QUFFRHZZLHNCQUFvQixHQUFHO0FBQ25CLFNBQUtpekMsT0FBTCxDQUFhMUwsSUFBYjtBQUNBLFdBQU8sS0FBSzBMLE9BQVo7QUFDSDs7QUFFRDcwQyxRQUFNLEdBQUc7QUFDTCxXQUFPLEtBQUtHLEtBQUwsQ0FBV0MsUUFBbEI7QUFDSDs7QUFsQndDLEM7Ozs7Ozs7Ozs7OztBQ0g3QztBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU0wbUQsUUFBTixTQUF1QnZ3RCxtREFBSSxDQUFDbXlDLGNBQTVCLENBQTJDO0FBQ3REeHhDLGFBQVcsQ0FBQ2lKLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFREgsUUFBTSxHQUFHO0FBQ0wsV0FBT3pKLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSCxLQURHLEVBRUg7QUFBQ3VzRCxXQUFLLEVBQUUsNEJBQVI7QUFBc0NwdUIsYUFBTyxFQUFFLFdBQS9DO0FBQTREbnpCLFdBQUssRUFBRTtBQUFDd2UsYUFBSyxFQUFFLE1BQVI7QUFBZ0IrTCxjQUFNLEVBQUU7QUFBeEI7QUFBbkUsS0FGRyxFQUdIejJCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FDSSxHQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFLFlBQVo7QUFBMEJzK0IsVUFBSSxFQUFFLE1BQWhDO0FBQXdDb2YsY0FBUSxFQUFFO0FBQWxELEtBRkosRUFHSTcrQyxtREFBSSxDQUFDMG5CLEtBQUwsQ0FBV3htQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUNtN0IsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FISixFQUlJcjhCLG1EQUFJLENBQUMwbkIsS0FBTCxDQUFXeG1CLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsZUFBUyxFQUFFLE1BQVo7QUFBb0JzK0IsVUFBSSxFQUFFLFNBQTFCO0FBQXFDcEQsT0FBQyxFQUFFO0FBQXhDLEtBQWpDLENBSkosQ0FIRyxDQUFQO0FBVUg7O0FBaEJxRCxDOzs7Ozs7Ozs7OztBQ0YxRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxxQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwOFwiO1xuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA4XCI7XG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcbmV4cG9ydCBjb25zdCBiYmRWZXJzaW9uID0gXCIwLjMuNVwiO1xuZXhwb3J0IGNvbnN0IGJiZENoYW5nZWxvZyA9IHtcbiAgICBkZXNjcmlwdGlvbjogXCJCaWcgdGhpbmdzIGFyZSBjb21pbmcuXCIsXG4gICAgY2hhbmdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogXCJCdWcgRml4ZXNcIixcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAgXCJTb21lIGZpeGVzIHJlbGF0ZWQgdG8gc2hvd2luZyBtb2RhbHMgaW4gdGhlIGBCZEFwaWAuXCIsXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIF1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICBcIkN1c3RvbSBjc3MgbGl2ZSB1cGRhdGVcIjogICAgIHtpZDogXCJiZGEtY3NzLTBcIiwgaW5mbzogXCJcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiB0cnVlLCAgY2F0OiBcImNvcmVcIn0sXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXG5cbiAgICAvKiBDb3JlICovXG4gICAgLyogPT09PT09ICovXG4gICAgXCJQdWJsaWMgU2VydmVyc1wiOiAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTFcIiwgIGluZm86IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJIaWRlIENoYW5uZWxzXCI6ICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTNcIiwgIGluZm86IFwiSGlkZSBjaGFubmVscyBpbiBtaW5pbWFsIG1vZGVcIiwgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCIyNCBIb3VyIFRpbWVzdGFtcHNcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLTZcIiwgIGluZm86IFwiUmVwbGFjZSAxMmhyIHRpbWVzdGFtcHMgd2l0aCBwcm9wZXIgb25lc1wiLCAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxuXG4gICAgLyogQ29udGVudCAqL1xuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJTY2FuIFBsdWdpbnNcIjogICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy02XCIsIGluZm86IFwiU2NhbiBwbHVnaW5zIGZvciBhbnkgdGhyZWF0IHRoYXQgY2FuIGJlIGhpZGRlbiBpbnNpZGUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXG4gICAgXCJTaG93IFRvYXN0c1wiOiAgICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy0yXCIsIGluZm86IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiQXV0b21hdGljIExvYWRpbmdcIjogICAgICAgICAge2lkOiBcImZvcmstcHMtNVwiLCBpbmZvOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxuICAgIFwiRW5hYmxlIEVkaXQgQnV0dG9uXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtN1wiLCBpbmZvOiBcIkVuYWJsZSBhbiBFZGl0IEJ1dHRvbiBvbiB0aGUgcGx1Z2luIGFuZCB0aGVtZSBwYW5lbC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcbiAgICBcIlRoZW1lcyBpbiBQb3BvdXQgV2luZG93XCI6ICAgIHtpZDogXCJsaWdodGNvcmQtOVwiLCBpbmZvOiBcIkVuYWJsZSB0aGVtZXMgaW4gUG9wb3V0IFdpbmRvdy4gKEZvciBleGFtcGxlLCB3aGVuIGRldGFjaGluZyBzY3JlZW5zaGFyZS4pXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcblxuICAgIC8qIERldmVsb3BlciAqL1xuICAgIFwiRGV2ZWxvcGVyIE1vZGVcIjogICAgICAgICBcdCAge2lkOiBcImJkYS1ncy04XCIsIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxuXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgIFwiRGlzYWJsZSBCZXR0ZXJEaXNjb3JkXCI6ICAgICAge2lkOiBcImJkLWRpc2FibGVcIiwgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykgKE5vdCBpbXBsZW1lbnRlZCkuXCIsIGltcGxlbWVudGVkOiBmYWxzZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiRGV2ZWxvcGVyIE9wdGlvbnNcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0xXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyAmIExpZ2h0Y29yZCdzIEludGVybmFsIERldmVsb3BlciBPcHRpb25zLiBUaGlzIGFsbG93IHRoZSBcXFwiRXhwZXJpbWVudHNcXFwiIHRhYiwgdGhlIFxcXCJEZXZlbG9wZXIgT3B0aW9uc1xcXCIgdGFiIGFuZCB0aGUgXFxcIkxpZ2h0Y29yZCBBcGlcXFwiIHNlY3Rpb24uXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcbiAgICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiAgIHtpZDogXCJsaWdodGNvcmQtNVwiLCBpbmZvOiBcIkVuYWJsZSBMaWdodGNvcmQncyBzZXJ2ZXJzLiBEaXNhYmxpbmcgdGhpcyB3aWxsIGRpc2FibGUgY3VzdG9tIGJhZGdlcy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxuICAgIFwiRGlzYWJsZSB0eXBpbmdcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC03XCIsIGluZm86IFwiRG9uJ3QgbGV0IG90aGVyIHNlZSB5b3UncmUgdHlwaW5nLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXG4gICAgXCJVc2UgTm90aWZpY2F0aW9uIFNoaW1cIjogICAgICB7aWQ6IFwibGlnaHRjb3JkLTEwXCIsIGluZm86IFwiQmFzaWNhbGx5IGRvbid0IHVzZSBXaW5kb3dzJ3MgTm90aWZpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJ3aW4zMlwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBleHBlcmltZW50YWw6IGZhbHNlfSxcblxuICAgIC8qKiBMaWdodGNvcmQgV2luZG93ICovXG4gICAgXCJBbHdheXMtb24tVG9wXCI6ICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTNcIiwgaW5mbzogXCJFbmFibGUgdGhlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcbiAgICBcIk5vIFdpbmRvdyBCb3VuZHNcIjogICAgICAgICAgIHtpZDogXCJub193aW5kb3dfYm91bmRcIiwgaW5mbzogXCJEaXNhYmxlIFdpbmRvdyBCb3VuZHMuIENhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSBhIHdpbmRvdyBtYW5hZ2VyLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxuICAgIFwiRW5hYmxlIEdsYXNzdHJvblwiOiAgICAgICAgICAge2lkOiBcImVuYWJsZV9nbGFzc3Ryb25cIiwgaW5mbzogXCJFbmFibGUgR2xhc3N0cm9uLiBJZiB5b3UncmUgbm90IHVzaW5nIHRyYW5zcGFyZW50IHRoZW1lcywgdGhpcyBjYW4gcmVkdWNlIGxhZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxuICAgIFxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cbiAgICBcIkVuYWJsZVwiOiAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLCBpbmZvOiBcIkVuYWJsZSBSaWNoUHJlc2VuY2UgYmVsb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwic3RhdHVzXCJ9XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvb2tpZSA9IHtcbiAgICBcImJkYS1ncy0xXCI6IHRydWUsXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcbiAgICBcImJkYS1ncy0zXCI6IGZhbHNlLFxuICAgIFwiYmRhLWdzLTRcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxuICAgIFwiYmRhLWdzLTZcIjogZmFsc2UsXG4gICAgXCJiZGEtZ3MtN1wiOiBmYWxzZSxcbiAgICBcImJkYS1ncy04XCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLTBcIjogdHJ1ZSxcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXG4gICAgXCJiZGEtZXMtMlwiOiB0cnVlLFxuICAgIFwiYmRhLWVzLTRcIjogZmFsc2UsXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxuICAgIFwiYmRhLWVzLTdcIjogdHJ1ZSxcbiAgICBcImJkYS1ncy1iXCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcbiAgICBcImJkYS1kYy0wXCI6IGZhbHNlLFxuICAgIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxuICAgIFwiYmRhLWVzLTlcIjogdHJ1ZSxcbiAgICBcImZvcmstZG0tMVwiOiBmYWxzZSxcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy0yXCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxuICAgIFwiZm9yay1wcy01XCI6IHRydWUsXG4gICAgXCJmb3JrLXBzLTZcIjogdHJ1ZSxcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcbiAgICBcImZvcmstZXMtMlwiOiBmYWxzZSxcbiAgICBcImZvcmstZXMtM1wiOiB0cnVlLFxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxuICAgIFwiZm9yay13cC0yXCI6IGZhbHNlLFxuICAgIFwiZm9yay1iZXRhXCI6IHRydWUsXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC0yXCI6IHRydWUsXG4gICAgXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLTRcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtNVwiOiB0cnVlLFxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcbiAgICBcImxpZ2h0Y29yZC03XCI6IGZhbHNlLFxuICAgIFwibGlnaHRjb3JkLThcIjogZmFsc2UsXG4gICAgXCJsaWdodGNvcmQtOVwiOiBmYWxzZSxcbiAgICBcImxpZ2h0Y29yZC0xMFwiOiBmYWxzZSxcbiAgICBcIm5vX3dpbmRvd19ib3VuZFwiOiBmYWxzZSxcbn07XG5cblxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XG5cbmV4cG9ydCBjb25zdCBzZXR0aW5nc1JQQyA9IHt9O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XG4gICAgXCJuYW1lXCI6IFwiTGlnaHRjb3JkXCIsXG4gICAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXG4gICAgXCJkZXRhaWxzXCI6IFwiQnJvd3NpbmcgRGlzY29yZFwiLFxuICAgIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXG4gICAgXCJhc3NldHMubGFyZ2VcIjogXCI3MTIzMjM4MjEwMzc2ODI3OTFcIlxufVxuXG5leHBvcnQgY29uc3QgbGlnaHRjb3JkU2V0dGluZ3MgPSB7fTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0TGlnaHRjb3JkU2V0dGluZ3MgPSB7fTtcblxuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XG5cbmV4cG9ydCBjb25zdCBiZHRoZW1lcyA9IHt9O1xuZXhwb3J0IGNvbnN0IGJkcGx1Z2lucyA9IHt9O1xuXG5leHBvcnQgY29uc3QgcGx1Z2luQ29va2llID0ge307XG5leHBvcnQgY29uc3QgdGhlbWVDb29raWUgPSB7fTsiLCJpbXBvcnQgbG9jYWxTdG9yYWdlRml4IGZyb20gXCIuL2xvY2FsU3RvcmFnZUZpeFwiO1xuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XG5sb2NhbFN0b3JhZ2VGaXgoKTtcbmxvYWRpbmdJY29uKCk7XG5cbmNvbnN0IGRlcHJlY2F0ZUdsb2JhbCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywga2V5LCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTsgIFxufTtcblxuXG5pbXBvcnQgKiBhcyBHbG9iYWxzIGZyb20gXCIuLzBnbG9iYWxzXCI7XG5cbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcbmZvciAoY29uc3Qga2V5IG9mIGdsb2JhbEtleXMpIGRlcHJlY2F0ZUdsb2JhbChrZXksIEdsb2JhbHNba2V5XSk7XG5cblxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvYmRBcGlcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vbW9kdWxlcy9jbGFzc05vcm1hbGl6ZXJcIjtcblxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcbmRlcHJlY2F0ZUdsb2JhbChcInBsdWdpbk1vZHVsZVwiLCBwbHVnaW5Nb2R1bGUpO1xuZGVwcmVjYXRlR2xvYmFsKFwidGhlbWVNb2R1bGVcIiwgdGhlbWVNb2R1bGUpO1xuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xuZGVwcmVjYXRlR2xvYmFsKFwiQkRFdmVudHNcIiwgQkRFdmVudHMpO1xuZGVwcmVjYXRlR2xvYmFsKFwic2V0dGluZ3NQYW5lbFwiLCBzZXR0aW5nc1BhbmVsKTtcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xuZGVwcmVjYXRlR2xvYmFsKFwiQ29udGVudE1hbmFnZXJcIiwgQ29udGVudE1hbmFnZXIpO1xuZGVwcmVjYXRlR2xvYmFsKFwiQ2xhc3NOb3JtYWxpemVyXCIsIENsYXNzTm9ybWFsaXplcik7XG5cbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xuXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcbmRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIENvcmUpO1xuXG4vLyBUT0RPOiBDaGFuZ2UgSW5pdCBtb2RlIGFuZCBzdG9wIHVzaW5nIENvcmVXcmFwcGVyLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGJkQ29uZmlnKTtcbiAgICAgICAgQ29yZS5zZXRNZXRob2RzKG1ldGhvZHMpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xuICAgICAgICBDb3JlLmluaXQoKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB2MkxvYWRlci5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XG4gICAgdjJMb2FkZXIudGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBjb250ZW50V2luZG93R2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiKS5nZXQ7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gUmVmbGVjdC5hcHBseShjb250ZW50V2luZG93R2V0dGVyLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XG4gICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbC5iaW5kKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3QsIFwiYXBwbHlcIiwge3ZhbHVlOiBSZWZsZWN0LmFwcGx5LCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCBcImJpbmRcIiwge3ZhbHVlOiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XG5cbiAgICBjb25zdCBvT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuO1xuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgaWYgKHVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpL3dlYmhvb2tzXCIpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob09wZW4sIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRGSG91ciB7XG4gICAgaW5qZWN0MjRIb3VyKCkge1xuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHJldHVybjtcblxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XG4gICAgICAgICAgICBpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZC5sZW5ndGggIT09IDQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChtYXRjaGVkWzNdID09PSBcIkFNXCIpIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxuICAgICAgICBjb25zdCBjYW5jZWxDb21wYWN0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImRhdGVGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb21wYWN0IG1vZGVcbiAgICAgICAgdGhpcy5jYW5jZWwyNEhvdXIgPSAoKSA9PiB7Y2FuY2VsQ296eSgpOyBjYW5jZWxDb21wYWN0KCk7fTsgLy8gQ2FuY2VsIGJvdGhcbiAgICB9XG5cbiAgICByZW1vdmUyNEhvdXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcbiAgICB9XG59OyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXG5cbmNvbnN0IGRpc3BhdGNoZXIgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXJcbmNvbnN0IENoYW5uZWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDaGFubmVsICYmIGUuZGVmYXVsdC5oYXNDaGFubmVsKVswXS5kZWZhdWx0XG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxubGV0IERNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cblxuY29uc3QgYmxvY2tlZCA9IHt9XG5cbmxldCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xuICAgIGlmKHVzZXJNb2R1bGUpcmV0dXJuIHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG4gICAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEFudGlCb3RETSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5hbnRpRE0gPSB0aGlzLmFudGlETS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgfVxuXG4gICAgZW5hYmxlKCl7XG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXG4gICAgfVxuXG4gICAgZGlzYWJsZSgpe1xuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuXG4gICAgICAgIGRpc3BhdGNoZXIudW5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcbiAgICB9XG5cbiAgICBhbnRpRE0oZXYpe1xuICAgICAgICBpZighZXYubWVzc2FnZS5hdXRob3IuYm90KXJldHVyblxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcbiAgICAgICAgaWYoZXYubWVzc2FnZS5ndWlsZF9pZClyZXR1cm5cblxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcbiAgICAgICAgaWYoIWNoYW5uZWwpcmV0dXJuIC8vIG1pZ2h0IGJlIGJyb2tlblxuXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cblxuICAgICAgICBpZihibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSlyZXR1cm4gLy8gSWYgdGhlIHVzZXIgdW5ibG9jayB0aGUgYm90LCBEb24ndCBibG9jayBpdCBhZ2Fpbi5cblxuICAgICAgICBpZihzY2FuTWVzc2FnZShldi5tZXNzYWdlKSl7XG4gICAgICAgICAgICBibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSA9IHRydWVcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwid2FybmluZ1wiXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXG4gICAgICAgICAgICByZWxhdGlvblNoaXBNb2R1bGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXAoZXYubWVzc2FnZS5hdXRob3IuaWQsIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogXCJDb250ZXh0TWVudVwiXG4gICAgICAgICAgICB9LCAyKVxuICAgICAgICAgICAgaWYoIURNTW9kdWxlKURNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cbiAgICAgICAgICAgIERNTW9kdWxlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbChjaGFubmVsLmlkLCBmYWxzZSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2Nhbk1lc3NhZ2UobWVzc2FnZSl7XG4gICAgaWYoLyhkaXNjb3JkXFwuZ2d8ZGlzY29yZFxcLmNvbVxcL2ludml0ZVxcL3xkaXNjb3JkYXBwXFwuY29tXFwvaW52aXRlXFwvKS9nLnRlc3QobWVzc2FnZS5jb250ZW50KSlyZXR1cm4gdHJ1ZVxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG59XG5mdW5jdGlvbiBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBzZWFyY2gpe1xuICAgIGxldCBlbWJlZHMgPSBtZXNzYWdlLmVtYmVkcyB8fCBbXVxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIGVtYmVkcy5tYXAoZW1iZWQgPT4ge1xuICAgICAgICBpZihlbWJlZC50eXBlICE9PSBcInJpY2hcIilyZXR1cm4gZmFsc2VcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcbiAgICAgICAgaWYoKGVtYmVkLmRlc2NyaXB0aW9uIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcbiAgICAgICAgaWYoKChlbWJlZC5mb290ZXIgfHwgXCJcIikgJiYgZW1iZWQuZm9vdGVyLnRleHQgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxuICAgICAgICBpZigoZW1iZWQuZmllbGRzIHx8IFtdKS5tYXAoZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXG4gICAgICAgIH0pLmluY2x1ZGVzKHRydWUpKXJldHVybiB0cnVlXG4gICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgfSkuaW5jbHVkZXModHJ1ZSlcbn0iLCJpbXBvcnQge3NldHRpbmdzUlBDLCBkZWZhdWx0UlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcblxuY29uc3QgZGlzcGF0Y2hlciA9IEJETW9kdWxlcy5nZXQobT0+bS5EaXNwYXRjaGVyJiZtLmRlZmF1bHQmJm0uZGVmYXVsdC5kaXNwYXRjaClbMF0uZGVmYXVsdFxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXG5cbmNvbnN0IHNvY2tldElkID0gXCJsaWdodGNvcmQtc3Bvb2Ytc29ja2V0XCJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21SaWNoUHJlc2VuY2Uge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG5cbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcbiAgICB9XG4gICAgXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xuICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpcmV0dXJuIG51bGxcbiAgICAgICAgbGV0IGdhbWUgPSB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXG4gICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxuICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdhbWVcbiAgICB9XG5cbiAgICBzZW5kR2FtZSgpe1xuICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcbiAgICAgICAgICAgIHNvY2tldElkLFxuICAgICAgICAgICAgcGlkLFxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXG4gICAgICAgIH0pICAgXG4gICAgfVxuXG4gICAgZW5hYmxlKCkge1xuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcbiAgICAgICAgY29uc29sZS5sb2coXCJFbmFibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXG5cbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcblxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmxvZyhcIkRpc2FibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXG5cbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hBc3NldHMoYXBwbGljYXRpb25JZCl7XG4gICAgICAgIGxldCBhc3NldHMgPSBhd2FpdCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBc3NldHMpWzBdLmdldEFzc2V0cyhhcHBsaWNhdGlvbklkKVxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQXBwbGljYXRpb25cIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNzZXRzXG4gICAgfVxuXG4gICAgc2V0KGFjdGl2aXR5KXtcbiAgICAgICAgdGhpcy5nYW1lID0gYWN0aXZpdHlcblxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcbiAgICB9XG59IiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuL2Rpc3RhbnRcIjtcbmltcG9ydCB7IHRpbWluZ1NhZmVFcXVhbCB9IGZyb20gXCJjcnlwdG9cIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIExheWVycyB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5sYXllcnMgPSBbXVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuTGF5ZXJzID0gdGhpc1xuICAgIH1cblxuICAgIGdldCBpc0luamVjdGVkKCl7XG4gICAgICAgIHJldHVybiAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYuTGF5ZXJzLmluamVjdGVkXCIpXG4gICAgfVxuXG4gICAgaW5qZWN0KCl7XG4gICAgICAgIGlmKHRoaXMuaXNJbmplY3RlZClyZXR1cm5cbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyc1xuICAgICAgICBdID0gW1xuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEodjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpLmxheWVycylcbiAgICAgICAgXVxuICAgICAgICBjb25zdCBsYXllcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK2NsYXNzTmFtZUxheWVycyk7XG4gICAgICAgIGlmICghbGF5ZXJzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IFJlYWN0SW5zdGFuY2UgPSBMaWdodGNvcmQuQXBpLlV0aWxzLkZpbmRSZWFjdChsYXllcnMsIDEpXG4gICAgICAgIGlmKCFSZWFjdEluc3RhbmNlKXJldHVybiBsYXllcnNcbiAgICAgICAgdGhpcy5SZWFjdEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZVxuICAgICAgICBsZXQgcmVuZGVyID0gUmVhY3RJbnN0YW5jZS5yZW5kZXJcbiAgICAgICAgUmVhY3RJbnN0YW5jZS5yZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSByZW5kZXIuY2FsbChSZWFjdEluc3RhbmNlKVxuICAgICAgICAgICAgbGV0IGNsYXNzTGlzdCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNsYXNzTmFtZS5zcGxpdChcIiBcIilcbiAgICAgICAgICAgIGNsYXNzTGlzdC5wdXNoKFwiTGF5ZXJzXCIpXG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaChcImluamVjdGVkXCIpXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jbGFzc05hbWUgPSBjbGFzc0xpc3Quam9pbihcIiBcIilcblxuICAgICAgICAgICAgdGhpcy5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW4ucHVzaChsYXllclsxXSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxuICAgICAgICB9XG4gICAgICAgIFJlYWN0SW5zdGFuY2UuZm9yY2VVcGRhdGUoKVxuICAgIH1cblxuICAgIGNyZWF0ZUxheWVyKGNoaWxkcmVuLCBwcm9wcyA9IHt9KXtcbiAgICAgICAgbGV0IGlkID0gdXVpZHY0KClcbiAgICAgICAgbGV0IGxheWVyID0gbnVsbFxuICAgICAgICB0aGlzLmxheWVycy5wdXNoKFtpZCwgPExheWVyIHsuLi5wcm9wc30gZ2V0TGF5ZXI9e2xheSA9PiB7XG4gICAgICAgICAgICBsYXllciA9IGxheVxuICAgICAgICB9fSBrZXk9e2lkfSBpZD17aWR9IHJlbW92ZT17KCkgPT4ge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGUgPT4gZVswXSA9PT0gaWQpXG4gICAgICAgICAgICBpZihpbmRleCA9PT0gLTEpcmV0dXJuXG4gICAgICAgICAgICB0aGlzLmxheWVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICBsYXllciA9IG51bGxcbiAgICAgICAgICAgIGlmKHRoaXMuUmVhY3RJbnN0YW5jZSl0aGlzLlJlYWN0SW5zdGFuY2UuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgdGhpcy5pbmplY3QoKVxuICAgICAgICB9fT57Y2hpbGRyZW59PC9MYXllcj5dKVxuICAgICAgICBpZih0aGlzLlJlYWN0SW5zdGFuY2UpdGhpcy5SZWFjdEluc3RhbmNlLmZvcmNlVXBkYXRlKClcbiAgICAgICAgdGhpcy5pbmplY3QoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIWxheWVyKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KGUgPT4gZVswXSA9PT0gaWQpXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ID09PSAtMSlyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgICAgICAgICAgICBsYXllciA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5SZWFjdEluc3RhbmNlKXRoaXMuUmVhY3RJbnN0YW5jZS5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0KClcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIucmVtb3ZlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxubGV0IExheWVyTW9kdWxlc1xuZXhwb3J0IGNsYXNzIExheWVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhbmltYXRpb246IG5ldyB0aGlzLm1vZHVsZXNbMF0uZGVmYXVsdC5WYWx1ZSgwKVxuICAgICAgICB9IFxuICAgICAgICB0aGlzLnByb3BzLmdldExheWVyKHRoaXMpXG4gICAgICAgIHRoaXMua2V5ZG93biA9IHRoaXMua2V5ZG93bi5iaW5kKHRoaXMpXG4gICAgfVxuXG4gICAga2V5ZG93bihlKXtcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gTGF5ZXJNb2R1bGVzIHx8IChMYXllck1vZHVsZXMgPSBbXG4gICAgICAgICAgICB2Mi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5WYWx1ZSAmJiBlLmRlZmF1bHQuZGl2KVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWRvd24pXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoZXYpe1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlkb3duKVxuICAgIH1cblxuICAgIHJlbW92ZSgpe1xuICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSgpXG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbEVudGVyKGV2KXtcbiAgICAgICAgdGhpcy5tb2R1bGVzWzBdLmRlZmF1bHQudGltaW5nKHRoaXMuc3RhdGUuYW5pbWF0aW9uLCB7XG4gICAgICAgICAgICB0b1ZhbHVlOiAxLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMFxuICAgICAgICB9KS5zdGFydChldilcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsTGVhdmUoZXYpe1xuICAgICAgICB0aGlzLm1vZHVsZXNbMF0uZGVmYXVsdC50aW1pbmcodGhpcy5zdGF0ZS5hbmltYXRpb24sIHtcbiAgICAgICAgICAgIHRvVmFsdWU6IDAsXG4gICAgICAgICAgICBkdXJhdGlvbjogMTAwXG4gICAgICAgIH0pLnN0YXJ0KGV2KVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGlvbiA9IHRoaXMuc3RhdGUuYW5pbWF0aW9uLmludGVycG9sYXRlKHtcbiAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgIG91dHB1dFJhbmdlOiBbMS4wNywgMV1cbiAgICAgICAgfSlcbiAgICAgICAgbGV0IHN0eWxlID0ge1xuICAgICAgICAgICAgb3BhY2l0eTogdGhpcy5zdGF0ZS5hbmltYXRpb24sXG4gICAgICAgICAgICB0cmFuc2Zvcm06IFt7XG4gICAgICAgICAgICAgICAgc2NhbGU6IGludGVycG9sYXRpb25cbiAgICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgICAgbGV0IERpdiA9IHRoaXMubW9kdWxlc1swXS5kZWZhdWx0LmRpdlxuICAgICAgICByZXR1cm4gPERpdiBjbGFzc05hbWU9e1tfX1NFQ1JFVF9FTU9USU9OX18uY3NzKHtcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgV2Via2l0Qm94T3JpZW50OiBcInZlcnRpY2FsXCIsXG4gICAgICAgICAgICBXZWJraXRCb3hEaXJlY3Rpb246IFwibm9ybWFsXCIsXG4gICAgICAgICAgICBtc0ZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICAgICAgekluZGV4OiAxMDFcbiAgICAgICAgfSkscHJvY2Vzcy5wbGF0Zm9ybT09PVwid2luMzJcIj9fX1NFQ1JFVF9FTU9USU9OX18uY3NzKHtcbiAgICAgICAgICAgIHRvcDogXCItMjJweFwiLFxuICAgICAgICAgICAgcGFkZGluZ1RvcDogXCIyMnB4XCJcbiAgICAgICAgfSk6bnVsbCwuLi4odGhpcy5wcm9wcy5jbGFzc05hbWU/dGhpcy5wcm9wcy5jbGFzc05hbWUuc3BsaXQoXCIgXCIpOltdKV0uZmlsdGVyKGU9PmUpLmpvaW4oXCIgXCIpIHx8IG51bGx9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvRGl2PlxuICAgIH1cbn1cbkxheWVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBpZDogbnVsbCxcbiAgICBjaGlsZHJlbjogbnVsbFxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBtYWluQ29yZSBmcm9tIFwiLi9jb3JlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5jb25zdCBCZEFwaSA9IHtcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBCRFYyLlJlYWN0OyB9LFxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiBCRFYyLlJlYWN0Q29tcG9uZW50O30sXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7cmV0dXJuIFV0aWxzLldpbmRvd0NvbmZpZ0ZpbGU7fSxcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXG4gICAgZ2V0IGVtb3RlcygpIHtyZXR1cm4gbnVsbH0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXG4gICAgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfSxcbiAgICBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XG59O1xuXG5CZEFwaS5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xufTtcblxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBVdGlscy5nZXRXaW5kb3dQcmVmZXJlbmNlKGtleSk7XG59O1xuXG5CZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpO1xufTtcblxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcbi8vaWQgPSBpZCBvZiBlbGVtZW50XG4vL2NzcyA9IGN1c3RvbSBjc3NcbkJkQXBpLmluamVjdENTUyA9IGZ1bmN0aW9uIChpZCwgY3NzKSB7XG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XG59O1xuXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcbi8vaWQgPSBpZCBvZiBlbGVtZW50XG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcbn07XG5cbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXG4vL2lkID0gaWQgb2YgZWxlbWVudFxuLy9jc3MgPSBjdXN0b20gY3NzXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xuICAgIERPTS5hZGRTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSwgdXJsKTtcbn07XG5cbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgRE9NLnJlbW92ZVNjcmlwdChET00uZXNjYXBlSUQoaWQpKTtcbn07XG5cbi8vR2V0IGFub3RoZXIgcGx1Z2luXG4vL25hbWUgPSBuYW1lIG9mIHBsdWdpblxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoYmRwbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBiZHBsdWdpbnNbbmFtZV0ucGx1Z2luO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbi8vR2V0IEJldHRlckRpc2NvcmQgQ29yZVxuQmRBcGkuZ2V0Q29yZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcbiAgICByZXR1cm4gbWFpbkNvcmU7XG59O1xuXG4vKipcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxuICovXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIHtjYW5jZWxUZXh0OiBudWxsfSk7XG59O1xuXG4vKipcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxuICovXG5CZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xufTtcblxuLy9TaG93IHRvYXN0IGFsZXJ0XG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICBVdGlscy5zaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyk7XG59O1xuXG4vLyBGaW5kcyBtb2R1bGVcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGZpbHRlcik7XG59O1xuXG4vLyBGaW5kcyBtb2R1bGVcbkJkQXBpLmZpbmRBbGxNb2R1bGVzID0gZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xufTtcblxuLy8gRmluZHMgbW9kdWxlXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcyk7XG59O1xuXG5CZEFwaS5maW5kTW9kdWxlQnlQcm90b3R5cGVzID0gZnVuY3Rpb24oLi4ucHJvdG9zKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xufTtcblxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUobmFtZSk7XG59O1xuXG4vLyBHZXRzIHJlYWN0IGluc3RhbmNlXG5CZEFwaS5nZXRJbnRlcm5hbEluc3RhbmNlID0gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgbm9kZSA9IG5vZGVbMF07XG4gICAgcmV0dXJuIEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShub2RlKTtcbn07XG5cbi8vIEdldHMgZGF0YVxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcbn07XG5cbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcblxuLy8gU2V0cyBkYXRhXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xufTtcblxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xuXG4vLyBEZWxldGVzIGRhdGFcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcbn07XG5cbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVXRpbHMubW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XG59O1xuXG4vLyBFdmVudCB3aGVuIGVsZW1lbnQgaXMgcmVtb3ZlZFxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gVXRpbHMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcbn07XG5cbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcbkJkQXBpLnN1cHByZXNzRXJyb3JzID0gZnVuY3Rpb24obWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XG59O1xuXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIFV0aWxzLnRlc3RKU09OKGRhdGEpO1xufTtcblxuQmRBcGkuaXNQbHVnaW5FbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcbn07XG5cbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiAhIXRoZW1lQ29va2llW25hbWVdO1xufTtcblxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuICEhc2V0dGluZ3NDb29raWVbaWRdO1xufTtcblxuQmRBcGkuZW5hYmxlU2V0dGluZyA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xufTtcblxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XG59O1xuXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gc2V0dGluZ3NQYW5lbC5vbkNoYW5nZShpZCwgIXNldHRpbmdzQ29va2llW2lkXSk7XG59O1xuXG4vLyBHZXRzIGRhdGFcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XG59O1xuXG4vLyBTZXRzIGRhdGFcbkJkQXBpLnNldEJERGF0YSA9IGZ1bmN0aW9uKGtleSwgZGF0YSkge1xuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XG59O1xuXG5cblxuY29uc3QgbWFrZUFkZG9uQVBJID0gKGNvb2tpZSwgbGlzdCwgbWFuYWdlcikgPT4gbmV3IGNsYXNzIEFkZG9uQVBJIHtcblxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIG1hbmFnZXIuZm9sZGVyO31cblxuICAgIGlzRW5hYmxlZChuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIWNvb2tpZVtuYW1lXTtcbiAgICB9XG5cbiAgICBlbmFibGUobmFtZSkge1xuICAgICAgICByZXR1cm4gbWFuYWdlci5lbmFibGUobmFtZSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlKG5hbWUpIHtcbiAgICAgICAgaWYgKGNvb2tpZVtuYW1lXSkgdGhpcy5kaXNhYmxlKG5hbWUpO1xuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlKG5hbWUpO1xuICAgIH1cblxuICAgIHJlbG9hZChuYW1lKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcbiAgICB9XG5cbiAgICBnZXQobmFtZSkge1xuICAgICAgICBpZiAobGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgaWYgKGxpc3RbbmFtZV0ucGx1Z2luKSByZXR1cm4gbGlzdFtuYW1lXS5wbHVnaW47XG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRBbGwoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XG4gICAgfVxufTtcblxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShwbHVnaW5Db29raWUsIGJkcGx1Z2lucywgcGx1Z2luTW9kdWxlKTtcbkJkQXBpLlRoZW1lcyA9IG1ha2VBZGRvbkFQSSh0aGVtZUNvb2tpZSwgYmR0aGVtZXMsIHRoZW1lTW9kdWxlKTtcblxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7XG5cbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CZEFwaSA9IEJkQXBpIiwiLyogQkRFdmVudHMgKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIik7XG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQkRFdmVudHMgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkJERXZlbnRzID0gdGhpc1xuICAgIH1cbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XG4gICAgb2ZmKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pIHt0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRBY3Rpb24pO31cbn07IiwiLyoqXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xuICovXG5cbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxuXG5sZXQgc2VsZWN0b3JzXG5jb25zdCByZW1vdmVEYSA9IFV0aWxzLnJlbW92ZURhXG5mdW5jdGlvbiBnZXRTZWxlY3RvcnMoKXtcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXG4gICAgaWYoIXN0YW5kYXJkU2lkZWJhclZpZXcpcmV0dXJuIG51bGxcbiAgICBsZXQgZGVmYXVsdENsYXNzTmFtZSA9IHJlbW92ZURhKHN0YW5kYXJkU2lkZWJhclZpZXcuc3RhbmRhcmRTaWRlYmFyVmlldylcbiAgICBsZXQgc2VsZWN0cyA9IFtdXG4gICAgbGV0IHVzZXJTZXR0aW5nc0FjY291bnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS51c2VyU2V0dGluZ3NBY2NvdW50KVswXVxuICAgIGNvbnN0IGNoaWxkcmVuID0gQkRNb2R1bGVzLmdldChlID0+IHR5cGVvZiBlLmNoaWxkcmVuID09PSBcInN0cmluZ1wiKVswXVxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnBheW1lbnRTb3VyY2VSb3cpWzBdLnBheW1lbnRTb3VyY2VSb3cpfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdWJUZXh0ICYmIGUuZGVzY3JpcHRpb25XcmFwcGVyKVswXS5zdWJUZXh0KX1gKVxuICAgIGlmKHVzZXJTZXR0aW5nc0FjY291bnQpe1xuICAgICAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcbiAgICAgICAgc2VsZWN0cy5wdXNoKGAuJHtyZW1vdmVEYSh1c2VyU2V0dGluZ3NBY2NvdW50LnVzZXJTZXR0aW5nc1NlY3VyaXR5KX0gLiR7cmVtb3ZlRGEoY2hpbGRyZW4uY2hpbGRyZW4pfSA+IGRpdjpudGgtY2hpbGQoMilgKVxuICAgIH1cbiAgICBjb25zb2xlLmxvZyhzZWxlY3RzKVxuICAgIHJldHVybiBzZWxlY3RzXG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCbHVyUHJpdmF0ZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICB9XG5cbiAgICBlbmFibGUoKXtcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxuXG4gICAgICAgIGlmKCFzZWxlY3RvcnMpY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIHNlbGVjdG9ycyB0byBibHVyIHBlcnNvbm5hbCBpbmZvcm1hdGlvbnMuXCIpKVxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcbiR7c2VsZWN0b3JzLmpvaW4oXCIsIFwiKX0ge1xuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41Myk7XG4gICAgZmlsdGVyOiBibHVyKDRweCk7XG4gICAgb3BhY2l0eTogLjg7XG59XG5cbiR7c2VsZWN0b3JzLm1hcChlID0+IGUrXCI6aG92ZXJcIikuam9pbihcIiwgXCIpfSAge1xuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wOSwuNjgsLjUzKTtcbiAgICBmaWx0ZXI6IG5vbmU7XG4gICAgb3BhY2l0eTogMTtcbn1gKVxuICAgIH1cblxuICAgIGRpc2FibGUoKXtcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcbiAgICAgICAgRE9NVG9vbHMucmVtb3ZlU3R5bGUoXCJibHVyUHJpdmF0ZVwiKVxuICAgIH1cbn0iLCJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcblxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcbmNvbnN0IHJhbmRDbGFzcyA9IG5ldyBSZWdFeHAoYF4oPyEke25vcm1hbGl6ZWRQcmVmaXh9LSkoKD86W0EtWmEtel18WzAtOV18LSkrKS0oPzpbQS1aYS16XXxbMC05XXwtfF8pezZ9JGApO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQ2xhc3NOb3JtYWxpemVyID0gdGhpc1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMucmV2ZXJ0RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucGF0Y2hET01NZXRob2RzKCk7XG4gICAgfVxuXG4gICAgcGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVucGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvdWxkSWdub3JlKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImxheWVyQ29udGFpbmVyLVwiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1vZHVsZUZpbHRlcihtb2R1bGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG1vZHVsZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdCh2YWx1ZS5zcGxpdChcIiBcIilbMF0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5vcm1hbENsYXNzLm1hdGNoKHJhbmRDbGFzcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gKz0gYCAke2NvbXBvbmVudE5hbWV9LSR7Y2FtZWxDYXNlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgbmV3U3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbENsYXNzLnN0YXJ0c1dpdGgoYCR7Y29tcG9uZW50TmFtZX0tYCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV0gPSBuZXdTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjbGFzc2VzW2NdLm1hdGNoKHJhbmRDbGFzcylbMV07XG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcbiAgICB9XG5cbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB0aGlzLnJldmVydEVsZW1lbnQoZWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuICAgICAgICBjb25zdCB0b1JlbW92ZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcbiAgICB9XG5cbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xuICAgICAgICAgICAgLy8gcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xuICAgICAgICB9O1xuICAgIH1cblxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbG9yZWRUZXh0IHtcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcbiAgICAgICAgaWYgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XG5cbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFR5cGUuX19vcmlnaW5hbE1ldGhvZCkgcmV0dXJuOyAvLyBEb24ndCBwYXRjaCBhZ2FpblxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSA/IHByb3BzLm1lc3NhZ2UuY29sb3JTdHJpbmcgfHwgXCJcIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSwgb3JpZ2luYWxUeXBlKTtcbiAgICAgICAgfX0pO1xuICAgIH1cblxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5cIitjbGFzc05hbWVNYXJrdXAuc3BsaXQoXCIgXCIpWzBdKS5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG59OyIsImltcG9ydCB7YmRDb25maWcsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCB7IGVuY3J5cHRTZXR0aW5nc0NhY2hlLCBkZWNyeXB0U2V0dGluZ3NDYWNoZSwgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUoZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfR0VUX0FQUF9QQVRIXCIpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XG5jbGFzcyBNZXRhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNZXRhRXJyb3JcIjtcbiAgICB9XG59XG5jb25zdCBvcmlnaW5hbEpTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXTtcbmNvbnN0IG9yaWdpbmFsQ1NTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPyBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdIDogKCkgPT4ge3JldHVybiBudWxsO307XG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcblxuZXhwb3J0IGxldCBhZGRvbkNhY2hlID0ge31cblxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XG4gICAgfVxuXG4gICAgcGF0Y2hFeHRlbnNpb25zKCl7XG4gICAgICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXG4gICAgICAgIGhhc1BhdGNoZWQgPSB0cnVlXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJwbHVnaW5cIik7XG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwidGhlbWVcIik7XG4gICAgfVxuXG4gICAgZ2V0IHBsdWdpbnNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3BsdWdpbnNGb2xkZXIgfHwgKHRoaXMuX3BsdWdpbnNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJwbHVnaW5zL1wiKSkpO31cbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XG5cbiAgICBsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpe1xuICAgICAgICBpZih0eXBlb2YgZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSAhPT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSBKU09OLnBhcnNlKGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikpKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0ge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhhZGRvbkNhY2hlKVxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtrZXldXG4gICAgICAgICAgICBpZighdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKXJldHVybiBkZWxldGUgYWRkb25DYWNoZVtrZXldXG5cbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFt7XG4gICAgICAgICAgICAgICAga2V5OiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwicmVzdWx0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJoYXNoXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XG4gICAgICAgICAgICAgICAgaWYoIShwcm9wLmtleSBpbiB2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlW3Byb3Aua2V5XSAhPT0gcHJvcC50eXBlKXtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih2YWx1ZS5oYXNoICE9PSBrZXkpe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHZhbHVlLnJlc3VsdC5zdXNwZWN0KXsgLy8gcmVmZXRjaCBmcm9tIHJlbW90ZSB0byBiZSBzdXJlIHlvdSdyZSB1cCB0byBkYXRlLlxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXG4gICAgfVxuXG4gICAgc2F2ZUFkZG9uQ2FjaGUoKXtcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShKU09OLnN0cmluZ2lmeShhZGRvbkNhY2hlKSkpXG4gICAgfVxuXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGlmICh0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IGNvbnRlbnRUeXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0gPSBmcy53YXRjaChiYXNlRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZU1vZHVsZS51bmxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUucmVsb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW53YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXS5jbG9zZSgpO1xuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV07XG4gICAgfVxuXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcbiAgICB9XG5cbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcbiAgICAgICAgY29uc3QgcmF3TWV0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcbiAgICAgICAgaWYgKG1ldGEuaW5kZXhPZihcIk1FVEFcIikgPCAwKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XG4gICAgICAgIG91dC5mb3JtYXQgPSBcImpzZG9jXCI7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gc2VsZi5wbHVnaW5zRm9sZGVyIDogc2VsZi50aGVtZXNGb2xkZXI7XG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcbiAgICAgICAgICAgIG1ldGEuc2l6ZSA9IHN0YXRzLnNpemU7XG4gICAgICAgICAgICBpZiAoIWlzUGx1Z2luKSB7XG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xuICAgICAgICAgICAgICAgIGlmIChtZXRhLmZvcm1hdCA9PSBcImpzb25cIikgbWV0YS5jc3MgPSBtZXRhLmNzcy5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIG1vZHVsZS5maWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xuICAgICAgICAgICAgICAgIGlmIChkaWRFeHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBVdGlscy53YXJuKFwiTW9kdWxlIE5vdCBFeHBvcnRlZFwiLCBgJHttZXRhLm5hbWV9LCBwbGVhc2Ugc3RhcnQgc2V0dGluZyBtb2R1bGUuZXhwb3J0c2ApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9IGBcXG5tb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O1xcbm1vZHVsZS5leHBvcnRzLnR5cGUgPSAke21ldGEuZXhwb3J0cyB8fCBtZXRhLm5hbWV9O2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xuICAgICAgICByZXR1cm4ge3BsdWdpbjoge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXG4gICAgICAgICAgICAgICAgZ2V0QXV0aG9yOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fSxcbiAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogKCkgPT4ge3JldHVybiBkYXRhLm1lc3NhZ2UgPyBkYXRhLm1lc3NhZ2UgOiBcIlRoaXMgcGx1Z2luIHdhcyB1bmFibGUgdG8gYmUgbG9hZGVkLiBDaGVjayB0aGUgYXV0aG9yJ3MgcGFnZSBmb3IgdXBkYXRlcy5cIjt9LFxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWUsXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UgPyBkYXRhLnNvdXJjZSA6IFwiXCIsXG4gICAgICAgICAgICB3ZWJzaXRlOiBkYXRhLndlYnNpdGUgPyBkYXRhLndlYnNpdGUgOiBcIlwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG5cbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSksIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgICB9LCAoaGFzaCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZihyZXN1bHQpe1xuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGVbcmVzdWx0Lmhhc2hdID0ge1xuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlc3VsdC5oYXNoLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3VzcGVjdCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29tcGlsZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxuICAgICAgICBjb25zdCBjb250ZW50ID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XG4gICAgICAgIGlmKCFjb250ZW50Lm5hbWUpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ2Fubm90IGVzY2FwZSB0aGUgSUQuXCIsIGVycm9yOiBuZXcgRXJyb3IoXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCIpfVxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcbiAgICAgICAgLy9pZighaWQpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiSW52YWxpZCBJRFwiLCBlcnJvcjogbmV3IEVycm9yKFwiUGxlYXNlIGZpeCB0aGUgbmFtZSBvZiBcIitmaWxlbmFtZStcIi4gQmV0dGVyRGlzY29yZCBjYW4ndCBlc2NhcGUgYW4gSUQuXCIpfVxuICAgICAgICBpZiAoaXNQbHVnaW4pIHtcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gbmV3IGNvbnRlbnQudHlwZSgpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcbiAgICAgICAgICAgICAgICBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXSA9IGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XG4gICAgICAgICAgICBiZHRoZW1lc1tjb250ZW50Lm5hbWVdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gICBcblxuICAgIHVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZWxldGUgX19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cbiAgICB9XG5cbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICB0cnkge19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLmNhY2hlW19fbm9uX3dlYnBhY2tfcmVxdWlyZV9fLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiBmYWxzZTt9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XG4gICAgICAgIGlmIChjYW50VW5sb2FkKSByZXR1cm4gY2FudFVubG9hZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xuICAgIH1cblxuICAgIGxvYWROZXdDb250ZW50KHR5cGUpIHtcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcbiAgICAgICAgY29uc3QgY29udGVudExpc3QgPSBPYmplY3QudmFsdWVzKGlzUGx1Z2luID8gYmRwbHVnaW5zIDogYmR0aGVtZXMpO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBpc1BsdWdpbiA/IGMucGx1Z2luLmdldE5hbWUoKSA6IGMubmFtZSk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRBbGxDb250ZW50KHR5cGUpIHtcbiAgICAgICAgdGhpcy5wYXRjaEV4dGVuc2lvbnMoKVxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xuICAgICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGxvYWRQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwicGx1Z2luXCIpO31cbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxufTtcblxuLyoqXG4gKiBEb24ndCBleHBvc2UgY29udGVudE1hbmFnZXIgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xuICovIiwiaW1wb3J0IHtiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEMsIGxpZ2h0Y29yZFNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9iZExvZ29cIjtcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcbmltcG9ydCBMaWdodGNvcmRMb2dvIGZyb20gXCIuLi9zdmcvTGlnaHRjb3JkXCI7XG5pbXBvcnQgUGx1Z2luQ2VydGlmaWVyIGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xuaW1wb3J0IEVtb2ppTW9kdWxlIGZyb20gXCIuL2Vtb2ppTW9kdWxlXCJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuXG5sZXQgbWV0aG9kc1xuZnVuY3Rpb24gQ29yZSgpIHt9XG5cblxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xuICAgIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIGNvbmZpZyk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ29yZS5wcm90b3R5cGUsIFwibWV0aG9kc1wiLCB7XG4gICAgZ2V0KCl7XG4gICAgICAgIHJldHVybiBtZXRob2RzXG4gICAgfVxufSlcblxuQ29yZS5wcm90b3R5cGUuc2V0TWV0aG9kcyA9IGZ1bmN0aW9uKG0pIHtcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XG4gICAgbWV0aG9kcyA9IG1cbn07XG5cbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XG4gICAgdGhpcy5oYXNTdGFydGVkID0gdHJ1ZTtcblxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiYmRWZXJzaW9uICsgXCIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9sZCB2ZXJzaW9uIChcIiArIGN1cnJlbnREaXNjb3JkVmVyc2lvbiArIFwiKSBvZiBEaXNjb3JkLiBQbGVhc2UgdXBkYXRlIHlvdXIgRGlzY29yZCBpbnN0YWxsYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJkQ29uZmlnLnZlcnNpb24gPCBtaW5TdXBwb3J0ZWRWZXJzaW9uKSB7XG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5FRCkge1xuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBFbmhhbmNlZERpc2NvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRyaWJ1dGVzLmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xuXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcbiAgICBzZXR0aW5nc1BhbmVsLmluaXRpYWxpemVTZXR0aW5ncygpO1xuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgQWRkb25zIENhY2hlXCIpXG4gICAgYXdhaXQgY29udGVudE1hbmFnZXIubG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKVxuXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcbiAgICBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbnMoKTtcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcbiAgICBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWVzKCk7XG5cbiAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20oRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpLCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIikpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xuICAgIH0pO1xuXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcblxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XG4gICAgdGhpcy5pbml0T2JzZXJ2ZXIoKTtcblxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XG4gICAgICAgIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBiZHBsdWdpbkVycm9ycywgdGhlbWVzOiBiZHRoZW1lRXJyb3JzfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XG4gICAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgYmJkVmVyc2lvbik7XG4gICAgfVxuXG4gICAgRW1vamlNb2R1bGUuc3RhcnQoKVxuXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lbWJlckxpc3QuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBNZW1iZXIgTGlzdCBQYXRjaFwiKSgpO1xuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xuXG4gICAgaWYoYmRDb25maWcuaGF2ZUluc3RhbGxlZERlZmF1bHQpe1xuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgYWxlcnQub25DbG9zZShyZXNvbHZlKVxuICAgICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBsb2dvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnQgPiBkaXYudHlwZVdpbmRvd3MtMXphLW43LndpdGhGcmFtZS1oYVlsdEkudGl0bGVCYXItQUM0cEdWLmhvcml6b250YWxSZXZlcnNlLTN0UmpZNy5mbGV4LTFPMUdLWS5kaXJlY3Rpb25Sb3dSZXZlcnNlLW04SWpJcS5qdXN0aWZ5U3RhcnQtMk5ERnppLmFsaWduU3RyZXRjaC1EcEdQZjMuZGEtdHlwZVdpbmRvd3MuZGEtd2l0aEZyYW1lLmRhLXRpdGxlQmFyLmRhLWhvcml6b250YWxSZXZlcnNlLmRhLWZsZXguZGEtZGlyZWN0aW9uUm93UmV2ZXJzZS5kYS1qdXN0aWZ5U3RhcnQuZGEtYWxpZ25TdHJldGNoID4gZGl2LndvcmRtYXJrV2luZG93cy0xdjBsWUQud29yZG1hcmstMmlERGZtLmRhLXdvcmRtYXJrV2luZG93cy5kYS13b3JkbWFya1wiKVxuICAgIGlmKGxvZ28pe1xuICAgICAgICBsb2dvLnN0eWxlLnRvcCA9IFwiM3B4XCJcbiAgICAgICAgbG9nby5pbm5lckhUTUwgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMTBcIiB3aWR0aD1cIjcwXCIgdmlld0JveD1cIjAgMCA3Mi41NCAxMFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01cHgsIG1hcmdpbi10b3A6IDEwcHhcIj5cbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cbiAgICA8cG9seWdvbiBmaWxsPVwiY3VycmVudENvbG9yXCIgcG9pbnRzPVwiMCA5Ljk3IDYuNSAxMCA2LjUgNy42MyAyLjQxIDcuNjMgMi40MSAwLjI2IDAgMi4yNiAwIDkuOTdcIi8+XG48L3N2Zz5gXG4gICAgfVxufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRyaWJ1dGVzID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgbGV0IGF0dHJpYnNQYXRjaHMgPSBbXVxuICAgIHRoaXMuY2FuY2VsUGF0Y2hBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGF0dHJpYnNQYXRjaHMuZm9yRWFjaChlID0+IGUoKSlcbiAgICB9XG5cbiAgICB3aGlsZSghdjIuTWVzc2FnZUNvbXBvbmVudClhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcbiAgICBcbiAgICAvLyBUT0RPOiB0cnkgdG8gcGF0Y2ggY29ycmVjdGx5IHRoZSB1c2VyIHBvcG91dCBvbiBhIG5leHQgdXBkYXRlXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkRpc2NvcmRUYWdcIilcbiAgICAudGhlbihEaXNjb3JkVGFnID0+IHtcbiAgICAgICAgbGV0IERpc2NvcmRUYWdDb21wID0gRGlzY29yZFRhZy5kZWZhdWx0XG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdCA9IGZ1bmN0aW9uKHByb3BzKXtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IERpc2NvcmRUYWdDb21wKHByb3BzKVxuXG4gICAgICAgICAgICBsZXQgaWQgPSB1dWlkdjQoKVxuXG4gICAgICAgICAgICBsZXQgYmFkZ2VEaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCI1cHhcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcbiAgICAgICAgICAgICAgICBrZXk6IFwiYmFkZ2VzLVwiK2lkLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5oZXJpdFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtyZXR1cm5WYWx1ZV1cblxuICAgICAgICAgICAgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgcHJvcHMudXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYmFkZ2VEaXYpXG4gICAgICAgICAgICBsZXQgZGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBjaGlsZHJlbilcbiAgICAgICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBwcm9wcy51c2VyLCBmYWxzZSlcblxuICAgICAgICAgICAgcmV0dXJuIGRpdlxuICAgICAgICB9XG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdC5kaXNwbGF5TmFtZSA9IERpc2NvcmRUYWdDb21wLmRpc3BsYXlOYW1lXG4gICAgfSlcblxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBpZihkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UpeyAvLyB0aGlzIGNhbiBiZSBhIGJsb2NrZWQgbWVzc2FnZSAobm90IG9wZW5lZClcbiAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJkYXRhLW1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcbiAgICAgICAgfVxuICAgIH19KSlcbiAgICAgICAgLypcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcIm1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcbiAgICB9fSkpKi9cbn1cblxuQ29yZS5wcm90b3R5cGUuY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcbiAgICBsZXQgdGltZXNDaGVja2VkID0gMDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lc0NoZWNrZWQgPj0gNTApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSBcImxvYWRpbmdcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge3NldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7fSk7XG4gICAgfSk7XG59O1xuXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAvLyBObyBleHRlcm5hbHNcbn07XG5cbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgZGVmYXVsdFJQQyk7XG4gICAgfVxuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpe1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XG4gICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIGRlZmF1bHRDb29raWUpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XG4gICAgICAgICAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucHJvdG90eXBlICYmIGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMpXG4gICAgLnRoZW4oc2V0dGluZ01vZHVsZSA9PiB7XG5cbiAgICAgICAgbGV0IGdldFByZWRpY2F0ZVNlY3Rpb25zID0gc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9uc1xuICAgICAgICBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZXRQcmVkaWNhdGVTZWN0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcblxuICAgICAgICAgICAgaWYoIXJlc3VsdFsxXSlyZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBpZihyZXN1bHRbMV0uc2VjdGlvbiA9PT0gXCJNeSBBY2NvdW50XCIpeyAvLyB1c2VyIHNldHRpbmdzLCBub3QgZ3VpbGQgc2V0dGluZ3NcbiAgICAgICAgICAgICAgICBsZXQgcG9wZWQgPSBbXVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxuXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2V0dGluZ3NQYW5lbC5yZW5kZXJTaWRlYmFyKHRoaXMpKVxuXG4gICAgICAgICAgICAgICAgd2hpbGUocG9wZWRbMF0pe1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwb3BlZC5wb3AoKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH1cbiAgICB9KVxufTtcblxuXG5sZXQgY2xhc3NOYW1lTGF5ZXJcbmxldCBjbGFzc05hbWVTb2NpYWxMaW5rc1xubGV0IGNsYXNzTmFtZU1vZGFsXG5cbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbk1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgcGx1Z2luTW9kdWxlLnJhd09ic2VydmVyKG11dGF0aW9uKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcblxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZUxheWVyKWNsYXNzTmFtZUxheWVyID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVTb2NpYWxMaW5rcyljbGFzc05hbWVTb2NpYWxMaW5rcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTW9kYWwpY2xhc3NOYW1lTW9kYWwgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1vZGFsICYmIHR5cGVvZiBlLm1vZGFsID09PSBcInN0cmluZ1wiICYmIGUuaW5uZXIgJiYgdHlwZW9mIGUuaW5uZXIgPT09IFwic3RyaW5nXCIgJiYgIWUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlKVswXS5tb2RhbFxuXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSA9PT0gXCJHVUlMRF9TRVRUSU5HU1wiKXtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xuXG4gICAgICAgICAgICAvLyBFbW9qaSBQaWNrZXJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcbiAgICAgICAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xuXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcbn07XG5cbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24odGl0bGUsIGNvbnRlbnQpIHtcbiAgICByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hTb2NpYWwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGlmICghVGFiQmFyKSByZXR1cm47XG4gICAgdGhpcy5zb2NpYWxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xuICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xuICAgICAgICBpZiAoIWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcInNvY2lhbExpbmtzXCIpKSByZXR1cm47XG4gICAgICAgIGlmIChBbmNob3IpIHtcbiAgICAgICAgICAgIGxldCBzb2NpYWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MpWzBdXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGU7XG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgY2xhc3NOYW1lQ29sb3JNdXRlZCxcbiAgICAgICAgICAgIHNpemVzLFxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcbiAgICAgICAgXSA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yTXV0ZWQpWzBdLmNvbG9yTXV0ZWQsXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVyc2lvbkhhc2gpWzBdLnZlcnNpb25IYXNoXG4gICAgICAgIF1cblxuICAgICAgICBjb25zdCB2ZXJzaW9uSGFzaCA9IGAoJHtiZENvbmZpZy5oYXNoID8gYmRDb25maWcuaGFzaC5zdWJzdHJpbmcoMCwgNykgOiBiZENvbmZpZy5icmFuY2h9KWA7XG4gICAgICAgIGNvbnN0IGJ1aWxkSW5mbyA9IGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX0dFVF9CVUlMRF9JTkZPU1wiKVxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgTGlnaHRjb3JkICR7YnVpbGRJbmZvLnZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIGAoJHsoYnVpbGRJbmZvLmNvbW1pdCB8fCBcIlVua25vd25cIikuc2xpY2UoMCwgNyl9KWApKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYEJCRCAke2JiZFZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIHZlcnNpb25IYXNoKSlcbiAgICAgICAgXVxuICAgICAgICBcblxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcbiAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWxWZXJzaW9ucyguLi5hcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XG4gICAgICAgIH07XG4gICAgfX0pO1xufTtcblxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xuICAgIGNvbnN0IGd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZ3VpbGRzRXJyb3JcIiwgXCJzZWxlY3RlZFwiKTtcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZExpc3RJdGVtcyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcbiAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcbiAgICBjb25zdCBibG9iQ2xhc3MgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XG4gICAgY29uc3QgR3VpbGRDb21wb25lbnQgPSByZWFjdEluc3RhbmNlLnJldHVybi50eXBlO1xuICAgIGlmICghR3VpbGRDb21wb25lbnQpIHJldHVybjtcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEucmV0dXJuVmFsdWUgJiYgZGF0YS50aGlzT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudW5yZWFkKSBjbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSBjbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIGNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS52aWRlbykgY2xhc3NOYW1lICs9IFwiIGJkLXZpZGVvXCI7XG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSBjbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgICAgICB9XG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBndWlsZFBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmICFtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LnRvU3RyaW5nICYmIG0uZGVmYXVsdC50b1N0cmluZygpLmluY2x1ZGVzKFwidHJhbnNsYXRlM2RcIikpO1xuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XG4gICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKGd1aWxkUGlsbCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XG4gICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcbiAgICAgICAgaWYgKHByb3BzLmhvdmVyZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2gpIHJldHVybjtcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcbiAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xuICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfTtcbiAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xuICAgIH19KTtcbn07XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLkF0dGFjaG1lbnRQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgIGlmICghQW5jaG9yIHx8ICFBdHRhY2htZW50IHx8ICFBdHRhY2htZW50LmRlZmF1bHQpIHJldHVybjtcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XG4gICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSlyZXR1cm5cbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGxcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpcmV0dXJuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcbiAgICAgICAgfSkpXG4gICAgICAgIFBsdWdpbkNlcnRpZmllci5wYXRjaChhdHRhY2htZW50LCBcImNlcnRpZmllZC1cIitpZClcbiAgICB9fSlcbn1cblxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubWVzc2FnZUhlYWRlclBhdGNoKSByZXR1cm47XG4gICAgY29uc3QgTWVzc2FnZUhlYWRlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiTWVzc2FnZVRpbWVzdGFtcFwiKTtcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVzc2FnZUhlYWRlciB8fCAhTWVzc2FnZUhlYWRlci5kZWZhdWx0KSByZXR1cm47XG4gICAgdGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZXNzYWdlSGVhZGVyLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xuICAgICAgICAvLyBjb25zdCBoZWFkZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wc1wiKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIGF1dGhvciwgdHJ1ZSlcbiAgICB9fSk7XG59O1xuXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFkZ2VzLVwiK2lkKVxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXG4gICAgICAgIGlmKGRpdi5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5cbiAgICAgICAgbGV0IGJsb2NrRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICAgICAgICBibG9ja0Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGJsb2NrRGl2KVxuXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuXG4gICAgICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XG4gICAgICAgICAgICBiYWRnZXMuZm9yRWFjaChiYWRnZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCIxNnB4XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihzY29wZSA9PT0gXCJ1c2VyXCIpey8vIHJlcXVpcmUgdXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pIFxuICAgICAgICAgICAgICAgIGlmKCFiYWRnZS5ocmVmKXtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmhyZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IGJhZGdlLm5hbWV9LFxuICAgICAgICAgICAgICAgICAgICBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKGVsZW1lbnQsIGRpdjIpXG4gICAgICAgICAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbkNvcmUucHJvdG90eXBlLnBhdGNoTWVtYmVyTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS50aGlzT2JqZWN0LCBcInByb3BzLnVzZXJcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmFkZ2VzLVwiK2lkfSlcbiAgICAgICAgKVxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXG4gICAgfX0pO1xufTtcblxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIGFuIGluamVjdGlvbiBwYXRoLCBzbyB3ZSBkbyBub3QgbmVlZCB0aGUgY29kZSBiZWxvdy4gXG4gICAgLy8gSW5zZXJ0IGNvbW1lbnRzIHNvIGl0IHdpbGwgYmUgZXJhc2VkIHdoZW4gcHJvZHVjdGlvbi5cbiAgICBcbiAgICBjb25zdCBpbmplY3Rpb25QYXRoID0gRGF0YVN0b3JlLmluamVjdGlvblBhdGg7XG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvKlxuXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xuICAgIGNvbnN0IG1rZGlycCA9IHJlcXVpcmUoXCJta2RpcnBcIik7XG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xuXG4gICAgY29uc3QgcGFyZW50UGF0aCA9IHBhdGgucmVzb2x2ZShpbmplY3Rpb25QYXRoLCBcIi4uXCIpO1xuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcbiAgICBjb25zdCBzYXZlZFppcCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBcImluamVjdG9yLnppcFwiKTtcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xuXG4gICAgLy8gRG93bmxvYWQgdGhlIGluamVjdG9yIHppcCBmaWxlXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHJlcXVlc3QuZ2V0KHt1cmw6IHppcExpbmssIGVuY29kaW5nOiBudWxsfSwgYXN5bmMgKGVycm9yLCByZXNwb25zZSwgYm9keSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XG4gICAgICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhzYXZlZFppcCwgcmVzKSk7XG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XG5cbiAgICAgICAgICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiV3JpdGluZyBcIiArIHNhdmVkWmlwKTtcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xuXG4gICAgLy8gQ2hlY2sgYW5kIGRlbGV0ZSByZW5hbWUgZXh0cmFjdGlvblxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XG4gICAgXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcbiAgICB6aXBmaWxlLm9uKFwiZW50cnlcIiwgZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcblxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgZW50cnkuZmlsZU5hbWUpO1xuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcblxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcblxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGluamVjdGlvblBhdGgsIGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xuXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgYFJlbmFtaW5nICR7cGF0aC5iYXNlbmFtZShleHRyYWN0ZWRGb2xkZXIpfSB0byAke2ZvbGRlck5hbWV9YCk7XG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJGYWlsZWQgdG8gcmVuYW1lIHRoZSBmaW5hbCBkaXJlY3RvcnlcIik7XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cblxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4gcmVzdG9yaW5nIGJhY2t1cHMuXCIpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgZXZlcnl0aGluZyBzaG91bGQgaGF2ZSBnb25lIHNtb290aGx5LlxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnVubGluayhzYXZlZFppcCwgcmVzb2x2ZSkpO1xuXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcbiAgICByZXR1cm4gc3VjY2VzczsqL1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTtcblxuLyoqXG4gKiBEb24ndCBleHBvc2UgY29yZSAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XG4gKi8iLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcblxubGV0IGRhdGFQYXRoID0gXCJcIjtcbmlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIGRhdGFQYXRoID0gcHJvY2Vzcy5lbnYuQVBQREFUQTtcbmVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIGRhdGFQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUsIFwiTGlicmFyeVwiLCBcIlByZWZlcmVuY2VzXCIpO1xuZWxzZSBkYXRhUGF0aCA9IHByb2Nlc3MuZW52LlhER19DT05GSUdfSE9NRSA/IHByb2Nlc3MuZW52LlhER19DT05GSUdfSE9NRSA6IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBcIi5jb25maWdcIik7XG5kYXRhUGF0aCA9IHBhdGguam9pbihkYXRhUGF0aCwgXCJCZXR0ZXJEaXNjb3JkXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGF0YVN0b3JlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xuICAgICAgICB0aGlzLnBsdWdpbkRhdGEgPSB7fTtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRhdGFTdG9yZSA9IHRoaXNcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuQkRGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLkJERmlsZSwgXCJ1dGYtOFwiKSlcbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCB7W3JlbGVhc2VDaGFubmVsXTogc2V0dGluZ3N9KTtcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5zZXRCRERhdGEoXCJzZXR0aW5nc1wiLCBzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgVXRpbHMuYWxlcnQoXCJDb3JydXB0IFN0b3JhZ2VcIiwgXCJUaGUgYmQgc3RvcmFnZSBoYXMgc29tZWhvdyBiZWNvbWUgY29ycnVwdC4gWW91IG1heSBlaXRoZXIgdHJ5IHRvIHNhbHZhZ2UgdGhlIGZpbGUgb3IgZGVsZXRlIGl0IHRoZW4gcmVsb2FkLlwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGNvbmZpZ0ZpbGUoKSB7cmV0dXJuIHRoaXMuX2NvbmZpZ0ZpbGUgfHwgKHRoaXMuX2NvbmZpZ0ZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5pbmplY3Rpb25QYXRoLCBcImJldHRlcmRpc2NvcmRcIiwgXCJjb25maWcuanNvblwiKSk7fVxuICAgIGdldCBCREZpbGUoKSB7cmV0dXJuIHRoaXMuX0JERmlsZSB8fCAodGhpcy5fQkRGaWxlID0gcGF0aC5yZXNvbHZlKGRhdGFQYXRoLCBcImJkc3RvcmFnZS5qc29uXCIpKTt9XG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XG4gICAgZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSB7cmV0dXJuIHBhdGgucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBwbHVnaW5OYW1lICsgXCIuY29uZmlnLmpzb25cIik7fVxuXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldIHx8IG51bGw7XG4gICAgfVxuXG4gICAgc2V0U2V0dGluZ0dyb3VwKGtleSwgZGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gPSBkYXRhO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIGdldEJERGF0YShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XG4gICAgfVxuXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICBnZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XG4gICAgfVxuXG4gICAgc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldID0gdmFsdWU7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIGRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwidXRmLThcIik7XG4gICAgfVxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERldk1vZGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmRlYnVnTGlzdGVuZXIgPSB0aGlzLmRlYnVnTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lciA9IHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSB0aGlzLnN0YXJ0Q29weVNlbGVjdG9yKCk7XG4gICAgfVxuICAgIFxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XG4gICAgfVxuXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgc3RvcERlYnVnTGlzdGVuZXIoKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgc3RvcENvcHlTZWxlY3RvcigpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1slY0Rldk1vZGUlY10gJWNCcmVhay9SZXN1bWVcIiwgXCJjb2xvcjogcmVkO1wiLCBcImNvbG9yOiAjMzAzMDMwOyBmb250LXdlaWdodDo3MDA7XCIsIFwiY29sb3I6cmVkO1wiLCBcIlwiKTtcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgfVxuICAgIH1cblxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XG4gICAgXG4gICAgICAgICAgICBsZXQgW1xuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxuICAgICAgICAgICAgICAgIGNsYXNzSXRlbXNcbiAgICAgICAgICAgIF0gPSBbXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tZW51KVswXVxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2goKSB7XG4gICAgICAgICAgICAgICAgaWYoIWNsYXNzSXRlbXMgfHwgIWNsYXNzTGF5ZXIubGF5ZXIpcmV0dXJuIGNvbnNvbGUubG9nKGNsYXNzSXRlbXMsIGNsYXNzTGF5ZXIubGF5ZXIpXG5cbiAgICAgICAgICAgICAgICBsZXQgY20gPSBET00ucXVlcnkoXCIuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5tZW51KSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzTGF5ZXIubGF5ZXJ9XCI+YCk7XG4gICAgICAgICAgICAgICAgICAgIGNtID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubWVudX0gJHtjbGFzc0l0ZW1zLnN0eWxlRmxleGlibGV9ICR7Y2xhc3NJdGVtcy5hY2NvbW1vZGF0ZVNjcm9sbGJhcn0gYmQtY29udGV4dC1tZW51XCIgc3R5bGU9XCJcIj48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoY21XcmFwKTtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIFwicHhcIjtcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibWVudVwiKVxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCItMVwiKVxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiQ29weSBTZWxlY3RvciBBY3Rpb25zXCIpXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlckNsYXNzZXMudGhlbWVHaG9zdEhhaXJsaW5lfVwiPjwvZGl2PmApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGVyKVswXS5zY3JvbGxlcn0gJHtjbGFzc0l0ZW1zLnNjcm9sbGVyfVwiPjwvZGl2PmApXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXG4gICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZChzY3JvbGxlcldyYXApXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSAhPT0gMjcpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtV3JhcC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gY20ucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gY20uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdXG4gICAgICAgICAgICAgICAgY29uc3QgY21nID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cImdyb3VwXCI+PC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNtaS5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubGFiZWx9XCI+Q29weSBTZWxlY3RvcjwvZGl2PmApKTtcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudHMgPSBET00ucXVlcnlBbGwoXCJkaXZbcm9sZT1tZW51aXRlbV0uXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5mb2N1c2VkKSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgJiYgZWxlbWVudHMuZm9yRWFjaChlbGVtID0+IGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3V0XCIsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNtZy5hcHBlbmQoY21pKTtcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJzZXBhcmF0b3JcIiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5zZXBhcmF0b3J9XCI+PC9kaXY+YClcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKHNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKGNtZyk7XG4gICAgICAgICAgICAgICAgaWYoY21XcmFwLmNsaWVudEhlaWdodCA8IGNtV3JhcC5zY3JvbGxIZWlnaHQpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSAoY21XcmFwLnN0eWxlLnRvcCAtIGNtZy5jbGllbnRIZWlnaHQpICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nXCIrY21XcmFwLnN0eWxlLnRvcClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQpIHJldHVybiBgIyR7ZWxlbWVudC5pZH1gO1xuICAgICAgICAvKipcbiAgICAgICAgICogXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xuICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XG4gICAgICAgICAgICB3aGlsZSAoZWwucGFyZW50Tm9kZSl7XG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XG4gICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdCgnIycrZWwuaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZiAoZWw9PWVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKStBcnJheS5mcm9tKGVsLmNsYXNzTGlzdC5lbnRyaWVzKCkpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikpO1xuICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcbiAgICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKygodHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbC5jbGFzc05hbWUpIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhIWUpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikrXCI6bnRoLWNoaWxkKFwiK2MrXCIpXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVsbFBhdGgoZWxlbWVudClcbiAgICB9XG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuc3RhcnRUeXBpbmcpXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmdcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdGFydFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdG9wVHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXG4gICAgfVxuXG4gICAgZGlzYWJsZSgpe1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGVuYWJsZSgpe1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2VcbiAgICB9XG59IiwiaW1wb3J0IEJ1Z0h1bnRlckJhZGdlIGZyb20gXCIuLi9zdmcvYnVnX2h1bnRlclwiXG5pbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ2lyY3VzIGZyb20gXCIuLi9zdmcvY2lyY3VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICB9KTtcbn0gIFxuXG5jb25zdCBhd2FpdGluZ0JhZGdlc1Byb21pc2VzID0ge31cbmxldCBiYWRnZXNUb0ZldGNoID0gW11cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc3RhbnRTZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xuICAgICAgICAgICAgYmFkZ2VzOiB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzdGFudFNlcnZlciA9IHRoaXNcbiAgICB9XG5cbiAgICBnZXQgY2FjaGUoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXG4gICAgfVxuXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdGhpcy5fY2FjaGUgIT09IFwib2JqZWN0XCIpcmV0dXJuIHRoaXMuX2NhY2hlID0gZGF0YVxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NhY2hlLCBkYXRhKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBjdXN0b20gYmFkZ2VzIGZyb20gdGhlIHVzZXIgSUQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXIgVGhlIHVzZXIgSUQgXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCYWRnZXModXNlcil7XG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxuICAgICAgICBpZihhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdKXJldHVybiBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXG5cbiAgICAgICAgbGV0IHJlc29sdmVcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMpID0+IChyZXNvbHZlID0gcmVzKSlcbiAgICAgICAgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSA9IG5ld1Byb21pc2VcblxuICAgICAgICBjb25zdCBiYWRnZXMgPSBbXVxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIENvbnN0YW50cy5iYWRnZXMpe1xuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZldGNoZWRCYWRnZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pcmV0dXJuIHJlc29sdmUoW10pXG4gICAgICAgICAgICBiYWRnZXNUb0ZldGNoLnB1c2goW3VzZXIsIHJlc29sdmVdKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gYmFkZ2VzVG9GZXRjaFxuICAgICAgICAgICAgICAgIGlmKHVzZXJzLmxlbmd0aCA9PT0gMClyZXR1cm5cbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0KFJvdXRlcy5iYWRnZXMsIFwiUE9TVFwiLCBKU09OLnN0cmluZ2lmeSh1c2Vycy5tYXAoZSA9PiBlWzBdKSkpXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdXNlcnMuZmluZChwcm9taXNlID0+IHByb21pc2VbMF0gPT09IHVzZXIudXNlcl9pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbMV0odXNlci5iYWRnZXMpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBlcnJvclxuICAgICAgICAgICAgICAgICAgICBpZighKGVyciBpbnN0YW5jZW9mIExpZ2h0Y29yZEVycm9yKSljb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgIH0pXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XG4gICAgICAgICAgICBpZighQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIFdlIGRvIG5vdCBoYXZlIHRoZSBDb21wb25lbnQsIHNraXAgaXQuXG4gICAgICAgICAgICBpZihiYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBBbHJlYWR5IGluc2VydGVkLlxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGUgPSB7XG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cbiAgICAgICAgfSwgNjAwMDAwKTtcblxuICAgICAgICByZXNvbHZlKGJhZGdlcylcbiAgICAgICAgZGVsZXRlIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cbiAgICAgICAgcmV0dXJuIGJhZGdlc1xuICAgIH1cbn1cblxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xuICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBMaWdodGNvcmRFcnJvcihcIlRoZSBjdXJyZW50IHNldHRpbmdzIGJsb2NrZWQgdGhlIHJlcXVlc3QuXCIpKVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUZldGNoKGAke0NvbnN0YW50cy5TRVJWRVJfVVJMfS9hcGkvdjEke3JvdXRlfWAsIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIkNMSUVOVFwiOiBcIkxpZ2h0Y29yZFwiLFxuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gfHwgXCJOb25lOjpBbm9ueW1vdXNcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4oZGF0YSA/IHtcbiAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgfSA6IHt9KVxuICAgIH0pXG59XG5cbmNsYXNzIExpZ2h0Y29yZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5uYW1lID0gXCJMaWdodGNvcmRFcnJvclwiXG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgQ29uc3RhbnRzID0ge1xuICAgIFNFUlZFUl9VUkw6IFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5elwiLFxuICAgIGJhZGdlczogWyAvLyBUT0RPOiBBZGQgbW9yZSBiYWRnZXMgKyBzZXJ2ZXIgc2lkZSBzdmdcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxuICAgICAgICAgICAgaWQ6IFwiZjA0Njk4ZjUtODE2Yi00MWUzLWJkMDEtOTIyOTExOTNkN2E1XCIsXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcbiAgICAgICAgICAgICAgICBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiLFxuICAgICAgICAgICAgICAgIFwiNjk2MDAzNDU2NjExMzg1Mzk2XCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxuICAgICAgICAgICAgY29tcG9uZW50OiBCdWdIdW50ZXJCYWRnZSxcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9iYWRnZXMjYnVnX2h1bnRlclwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQnVmZm9vblwiLFxuICAgICAgICAgICAgaWQ6IFwiMDY5MDRkMzEtNjViNC00MWVjLWE1MGMtODY1OGJiZDFhZjk2XCIsXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcbiAgICAgICAgICAgICAgICBcIjM4OTAxNjg5NTU0MzcwNTYwMlwiLFxuICAgICAgICAgICAgICAgIFwiNjY0NjAwMTM0NTI4NjYzNTY1XCIsXG4gICAgICAgICAgICAgICAgXCI2MjUzNTA2NTc4Mjk4OTYyMjRcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHNjb3BlczogW10sXG4gICAgICAgICAgICBjb21wb25lbnQ6IENpcmN1cyxcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly95b3V0dS5iZS9FSnRiNnotZGxUOD90PTE0NVwiXG4gICAgICAgIH1cbiAgICBdXG59XG5cbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XG4gICAgYmFkZ2VzOiBgL3VzZXJzL2JhZGdlc2Bcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IFphY2hhcnkgUmF1ZW5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkXG4gKiB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcbiAqIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcbiAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRVxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKiBcbiAqIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JEUGx1Z2luTGlicmFyeVxuICovXG5cbi8qKlxuICogQGludGVyZmFjZVxuICogQG5hbWUgT2Zmc2V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVG9wIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBMZWZ0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIE91dGVyIHdpZHRoIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAqL1xuXG4gLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhZGRlZCBsaXN0ZW5lci5cbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcbiAqL1xuIFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xuXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xuICAgIH1cblxuICAgIC8qKlxuXHQgKiBBZGRzIGEgc3R5bGUgdG8gdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBhcyB0aGUgZWxlbWVudCBpZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcblx0ICovXG5cdHN0YXRpYyBhZGRTdHlsZShpZCwgY3NzKSB7XG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgc3R5bGUgZnJvbSB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxuXHQgKi9cblx0c3RhdGljIHJlbW92ZVN0eWxlKGlkKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzL3JlcXVpcmVzIGEgcmVtb3RlIHNjcmlwdCB0byBiZSBsb2FkZWRcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgZm9yIHRoaXMgc2NyaXB0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcblx0ICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVkXG5cdCAqL1xuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XG5cdFx0XHRzY3JpcHQuc3JjID0gdXJsO1xuXHRcdFx0c2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzY3JpcHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcblx0ICovXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcbiAgICAgICAgaWQgPSB0aGlzLmVzY2FwZUlEKGlkKTtcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cbiAgICBcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cbiAgICBzdGF0aWMgYW5pbWF0ZSh7dGltaW5nID0gXyA9PiBfLCB1cGRhdGUsIGR1cmF0aW9ufSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcbiAgICAgICAgICAvLyB0aW1lRnJhY3Rpb24gZ29lcyBmcm9tIDAgdG8gMVxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPiAxKSB0aW1lRnJhY3Rpb24gPSAxO1xuICAgICAgXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gdGltaW5nKHRpbWVGcmFjdGlvbik7XG4gICAgICBcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XG4gICAgICBcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uIDwgMSkge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICAgICAgICAgIH1cbiAgICAgIFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgbXkgc2hpdCB2ZXJzaW9uIG9mIG5vdCBoYXZpbmcgdG8gdXNlIGAkYCBmcm9tIGpRdWVyeS4gTWVhbmluZ1xuICAgICAqIHRoYXQgeW91IGNhbiBwYXNzIGEgc2VsZWN0b3IgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBydW4ge0BsaW5rIG1vZHVsZTpET01Ub29scy5xdWVyeX0uXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUxcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5xdWVyeVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIEVpdGhlciB0aGUgcmVzdWx0IG9mIGBwYXJzZUhUTUxgIG9yIGBxdWVyeWBcbiAgICAgKi9cbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUhUTUwoc2VsZWN0b3IpO1xuICAgICAgICBjb25zdCBpc0hUTUwgPSBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgPyBBcnJheS5mcm9tKGVsZW1lbnQpLnNvbWUobiA9PiBuLm5vZGVUeXBlID09PSAxKSA6IGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBzdGF0aWMgcXVlcnkoc2VsZWN0b3IsIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbGAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIEFycmF5IG9mIGFsbCBmb3VuZCBlbGVtZW50c1xuICAgICAqL1xuICAgIHN0YXRpYyBxdWVyeUFsbChzZWxlY3RvciwgYmFzZUVsZW1lbnQgPSBkb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXG4gICAgICogdGhlIHBhcnNlZCBIVE1MIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkb2N1bWVudCBmcmFnbWVudCB7QHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudH0uXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cbiAgICAgKiBcbiAgICAgKiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcGFyc2VkXG4gICAgICogbm9kZXMgYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgdG9wIGxldmVsIG5vZGVzLCBvdGhlcndpc2UgdGhlIHNpbmdsZSBub2RlIGlzIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuIHNob3VsZCBiZSB0aGUgcmF3IGBEb2N1bWVudEZyYWdtZW50YFxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gVGhlIHJlc3VsdCBvZiBIVE1MIHBhcnNpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgcGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSByZXR1cm4gbm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgIH1cblxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge3JldHVybiB0aGlzLnBhcnNlSFRNTChodG1sLCBmcmFnbWVudCk7fVxuICAgIFxuICAgIC8qKlxuICAgICAqIFRha2VzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGVzY2FwZXMgaXQgdXNpbmcgdGhlIGJyb3dlcidzIG93biBlc2NhcGluZyBtZWNoYW5pc20uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBodG1sIHRvIGJlIGVzY2FwZWRcbiAgICAgKi9cbiAgICBzdGF0aWMgZXNjYXBlSFRNTChodG1sKSB7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHNwYW5FbGVtZW50LmFwcGVuZCh0ZXh0Tm9kZSk7XG4gICAgICAgIHRleHROb2RlLm5vZGVWYWx1ZSA9IGh0bWw7XG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byByZW1vdmVcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gb25seSBvbmUgYXJndW1lbnQgaXMgcHJlc2VudDogVG9nZ2xlIGNsYXNzIHZhbHVlO1xuICAgICAqIGkuZS4sIGlmIGNsYXNzIGV4aXN0cyB0aGVuIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGZhbHNlLCBpZiBub3QsIHRoZW4gYWRkIGl0IGFuZCByZXR1cm4gdHJ1ZS5cbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XG4gICAgICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBldmFsdWF0ZXMgdG8gdHJ1ZSwgYWRkIHNwZWNpZmllZCBjbGFzcyB2YWx1ZSwgYW5kIGlmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwgcmVtb3ZlIGl0LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5kaWNhdG9yXSAtIE9wdGlvbmFsIGluZGljYXRvciBmb3IgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSB0b2dnbGVkXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUsIGluZGljYXRvcikge1xuICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYyk7XG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XG4gICAgICAgIGVsc2UgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYykpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gY2hlY2tcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgc3RhdGljIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSkge1xuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIG9uZSBjbGFzcyB3aXRoIGFub3RoZXJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBmb3IgdGhlIGNsYXNzXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyByZXBsYWNlQ2xhc3MoZWxlbWVudCwgb2xkTmFtZSwgbmV3TmFtZSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKG9sZE5hbWUsIG5ld05hbWUpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIGFwcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIHByZXBlbmRlZCB0b1xuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXG4gICAgICovXG4gICAgc3RhdGljIHByZXBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoYXROb2RlLnByZXBlbmQodGhpc05vZGUpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0QWZ0ZXIodGhpc05vZGUsIHRhcmdldE5vZGUpIHtcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5hZnRlcihuZXdFbGVtZW50KWAuXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbmV3Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgYWZ0ZXIodGhpc05vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgdGhpc05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpc05vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gdGhpc05vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIrIFwiICsgc2VsZWN0b3IpIDogZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgc3Vic2VxdWVudCBzaWJsaW5ncy5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwifiAqXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN1YnNlcXVlbnQgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xuICAgICAqL1xuICAgIHN0YXRpYyBuZXh0VW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IFtdOyBcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIHN0YXRpYyBwcmV2aW91cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xuICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgcHJlY2VlZGluZyBzaWJsaW5ncy5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXG4gICAgICovXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByZWNlZWRpbmcgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdOyBcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB3aGljaCBpbmRleCBpbiBjaGlsZHJlbiBhIGNlcnRhaW4gbm9kZSBpcy4gU2ltaWxhciB0byBqUXVlcnkncyBgJC5pbmRleCgpYFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBUaGUgbm9kZSB0byBmaW5kIGl0cyBpbmRleCBpbiBwYXJlbnRcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxuICAgICAqL1xuICAgIHN0YXRpYyBpbmRleEluUGFyZW50KG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgbGV0IG51bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXG4gICAgc3RhdGljIGluZGV4KG5vZGUpIHtyZXR1cm4gdGhpcy5pbmRleEluUGFyZW50KG5vZGUpO31cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudCBpZiBpdCBtYXRjaGVzIHRoZSBzZWxlY3RvcixcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCBwYXJlbnRcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIHNpYmxpbmcgZWxlbWVudCBvciBudWxsXG4gICAgICovXG4gICAgc3RhdGljIHBhcmVudChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3RvciB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgPyBlbGVtZW50LnBhcmVudEVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXG4gICAgICovXG4gICAgc3RhdGljIGZpbmRDaGlsZChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBhbmNlc3RvcnMgb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgcGFyZW50cyB0b1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXG4gICAgICovXG4gICAgc3RhdGljIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xuICAgICAgICBlbHNlIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGFuY2VzdG9ycyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xuICAgICAqL1xuICAgIHN0YXRpYyBwYXJlbnRzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmICFlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHNpYmxpbmdzIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIipcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgc2libGluZ3MgdG9cbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgc2libGluZ3MoZWxlbWVudCwgc2VsZWN0b3IgPSBcIipcIikge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgY3NzIHN0eWxlcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBzdHlsZSBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBBdHRyaWJ1dGUgdG8gZ2V0IG9yIHNldFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClbYXR0cmlidXRlXTtcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyaWJ1dGVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgd2lkdGggZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgd2lkdGggYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFdpZHRoIHRvIHNldFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgc3RhdGljIHdpZHRoKGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBoZWlnaHQgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBoZWlnaHQuICBcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBIZWlnaHQgdG8gc2V0XG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaGVpZ2h0KGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodCk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCBpZiBnaXZlbiBhIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJucyBpdC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBDb250ZW50IHRvIHNldFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRWl0aGVyIHRoZSBzdHJpbmcgc2V0IGJ5IHRoaXMgY2FsbCBvciB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGUuXG4gICAgICovXG4gICAgc3RhdGljIHRleHQoZWxlbWVudCwgdGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mKHRleHQpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIHdpZHRoIG9mXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5uZXJXaWR0aChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgaGVpZ2h0IG9mXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3RhdGljIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG91dGVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciB3aWR0aCBvZlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgc3RhdGljIG91dGVyV2lkdGgoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlckhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIGhlaWdodCBvZlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqL1xuICAgIHN0YXRpYyBvdXRlckhlaWdodChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHBhZ2UuXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgb2Zmc2V0IG9mXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgb2Zmc2V0KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cbiAgICAgKiBcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyBvbmNlLlxuICAgICAqIGBjb25zdCBjYW5jZWwgPSBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImZpcmVkIVwiKTsgY2FuY2VsKCk7fSk7YFxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgc3RhdGljIG9uKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QgbWF0Y2hlcyB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9ufSBidXQgYXV0b21hdGljYWxseSBjYW5jZWxzIGl0c2VsZlxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXG4gICAgICogXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgb25jZShlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHJldHVybjtcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsO1xuICAgIH1cblxuICAgIHN0YXRpYyBfX29mZkFsbChldmVudCwgZWxlbWVudCkge1xuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgbGV0IG1hdGNoRmlsdGVyID0gbGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgPT0gdHlwZSwgZGVmYXVsdEZpbHRlciA9IF8gPT4gXztcbiAgICAgICAgaWYgKGVsZW1lbnQpIG1hdGNoRmlsdGVyID0gbCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQsIGRlZmF1bHRGaWx0ZXIgPSBsID0+IGwuZWxlbWVudCA9PSBlbGVtZW50O1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xuICAgICAgICBjb25zdCBsaXN0ID0gdHlwZSA/IGxpc3RlbmVycy5maWx0ZXIobWF0Y2hGaWx0ZXIpIDogbGlzdGVuZXJzLmZpbHRlcihkZWZhdWx0RmlsdGVyKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBsaXN0Lmxlbmd0aDsgYysrKSBsaXN0W2NdLmNhbmNlbCgpO1xuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cbiAgICAgKiBcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBvbkNsaWNrKTtgXG4gICAgICogXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVkIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsIG9uQ2xpY2spO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2tcIiwgb25DbGljayk7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tIGBlbGVtZW50YC5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiLm15UGx1Z2luXCIpO2BcbiAgICAgKiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBjbGljayBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiY2xpY2subXlQbHVnaW5cIik7YFxuICAgICAqIFxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxuICAgICAqIGBET01Ub29scy5vZmYoXCIubXlQbHVnaW5cIik7YFxuICAgICAqIFxuICAgICAqIEBwYXJhbSB7KEVsZW1lbnR8c3RyaW5nKX0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmVtb3ZlIGxpc3RlbmVyIGZyb21cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50XSAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgb3JpZ2luYWwgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgb2ZmKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZihlbGVtZW50KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdGhpcy5fX29mZkFsbChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KTtcblxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIHdoZW4gdGhlIG5vZGUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBib2R5LlxuICAgICAqIFRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdXBvbiBmaXJpbmcuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBldmVudFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25Nb3VudCAtIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIGZpcmUgb24gTW91bnQgb3Igb24gVW5tb3VudFxuICAgICAqL1xuICAgIHN0YXRpYyBvbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBvbk1vdW50ID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShvbk1vdW50ID8gbXV0YXRpb24uYWRkZWROb2RlcyA6IG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXG4gICAgc3RhdGljIG9uTW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjayk7IH1cblxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xuICAgIHN0YXRpYyBvblVubW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XG5cbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cbiAgICBzdGF0aWMgb25BZGRlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50KG5vZGUsIGNhbGxiYWNrKTsgfVxuXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uVW5tb3VudChub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgbXVsdGlwbGUgZWxlbWVudHMgaW50byBvbmUgcGFyZW50IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gZWxlbWVudHMgLSBhcnJheSBvZiBlbGVtZW50cyB0byBwdXQgaW50byBhIHNpbmdsZSBwYXJlbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgd3JhcChlbGVtZW50cykge1xuICAgICAgICBjb25zdCBkb21XcmFwcGVyID0gdGhpcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJkb20td3JhcHBlclwiPjwvZGl2PmApO1xuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcbiAgICAgICAgcmV0dXJuIGRvbVdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgdGhlIG5vZGUgdG8gYW4gSFRNTEVsZW1lbnQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgYnkgbGlicmFyeSBtb2R1bGVzLlxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxuICAgICAqL1xuICAgIHN0YXRpYyByZXNvbHZlRWxlbWVudChub2RlKSB7XG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xuICAgIH1cbn1cblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRPTSA9IERPTVRvb2xzIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBDb25zdGFudHMgPSB7XG4gICAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xufVxuXG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cbmxldCBBdXRvY29tcGxldGVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilbMF1cbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdXG5sZXQgRW1vamlNb2R1bGVRdWVyeSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVswXVxubGV0IE1lc3NhZ2VzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVswXVxubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdXG5sZXQgZW1vamlTZWFyY2ggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuaW5pdCgpLmNhdGNoKGVyciA9PiBVdGlscy5lcnIoXCJFbW9qaU1vZHVsZVwiLCBcIkFuIGVycm9yIG9jY3VyZWRcIiwgZXJyKSkgLy8gYmV0dGVyIGxvZ2dpbmdcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cbiAgICAgICAgaWYoIUF1dG9jb21wbGV0ZU1vZHVsZSlBdXRvY29tcGxldGVNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpXG4gICAgICAgIGlmKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcylBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxuICAgICAgICBpZighTWVzc2FnZXMpTWVzc2FnZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVxuICAgICAgICBpZighZ3VpbGRNb2R1bGUpZ3VpbGRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxuXG4gICAgICAgIGlmKEF1dG9jb21wbGV0ZU1vZHVsZSAmJiBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyAmJiBFbW9qaU1vZHVsZVF1ZXJ5ICYmIE1lc3NhZ2VzICYmIGd1aWxkTW9kdWxlICYmIGVtb2ppU2VhcmNoKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXG4gICAgICAgICAgICBjb25zdCBnZXRBdXRvY29tcGxldGVPcHRpb25zID0gQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9uc1xuICAgICAgICAgICAgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IGZ1bmN0aW9uKGUsIHQsIG4sIHIsIGEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzKGFyZzEsIGFyZzIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW1vamlVc2FibGUoY29uZGl0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdHModCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzdWx0cyhlLCB0LCBuLCByLCBhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaTogZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRpbmVsOiBcIi5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi5cIiArIGUgKyBcIi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZ3VpbGQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IHN0YXJ0IGF1dG9jb21wbGV0aW9uIG9mIExpZ2h0Y29yZCdzIGVtb2ppcy5cIikpXG4gICAgICAgIH1cblxuICAgICAgICAvKiogRW1vamkgZGlzcGxheSAqL1xuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW9qaVJlbmRlcil7IC8vIFRPRE86IFByb3BlciBlbW9qaSBmb3JtYXR0aW5nIC8gcmVuZGVyaW5nXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2VcIilcbiAgICAgICAgICAgICAgICBpZighbWVzc2FnZSlyZXR1cm5cbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcbiAgICAgICAgICAgICAgICBpZighY29udGVudCB8fCAhY29udGVudC5sZW5ndGgpcmV0dXJuXG4gICAgXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQHR5cGUge3tcbiAgICAgICAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgKiAgaWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cbiAgICAgICAgICAgICAgICAgKiB9W119XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGVtb2ppcyA9IFtdXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IFtdXG4gICAgICAgICAgICAgICAgZm9yKGxldCBub2RlIG9mIGNvbnRlbnQpe1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNQYXJzZWQgPSBmYWxzZVxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJzZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUVtb2ppTW9kdWxlQXBpKUVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVtb2ppKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbW9qaS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBwYXJzZWRbMF0uc3RhcnRzV2l0aChcIjxhXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyc2VkWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwYXJzZWQpO1xuICAgIFxuICAgICAgICAgICAgICAgICAgICBpZihoYXNQYXJzZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KFwiIFwiKS5tYXAoKHdvcmQsIGluZGV4LCBhcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gZW1vamlzLmZpbmQoZSA9PiBlLnJhdyA9PSB3b3JkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFlbW9qaSlyZXR1cm4gd29yZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppSWQ6IGVtb2ppLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByZXZpb3VzLmxlbmd0aCA9PT0gMClyZXR1cm4gW2N1cnJlbnRdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gKz0gYCAke2N1cnJlbnR9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIitjdXJyZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiwgY3VycmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKC4uLndvcmRzKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX0pO1xuICAgICAgICB9LypcbiAgICAgICAgbGV0IHVzZXJNb2R1bGVcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxuICAgICAgICAudGhlbihFbW9qaVBpY2tlckxpc3RSb3cgPT4ge1xuICAgICAgICAgICAgbGV0IGNsYXNzcyA9IEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0XG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICAgICAgICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSlyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaXNEaXNhYmxlZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxuICAgICAgICB9KSovXG4gICAgfVxuXG4gICAgZGlzYWJsZSgpe1xuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGFydCgpe1xuICAgICAgICBcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xuICAgIGlmIChudWxsID09IG4gfHwgMCA9PT0gbi5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBkID0gbi5tYXAoKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBvbkNsaWNrOiBvLFxuICAgICAgICAgICAgb25Ib3ZlcjogcixcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxuICAgICAgICAgICAgaW5kZXg6IG5cbiAgICAgICAgfSwgbChlLCBuKSkpXG4gICAgfSkpO1xuICAgIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF1cbn1cblxuZnVuY3Rpb24gUihlLCB0LCBuLCByKSB7XG4gICAgdmFyIGEgPSAobi5sZW5ndGggPiAwID8gZS5mb3JtYXQoe1xuICAgICAgICBwcmVmaXg6IHIobilcbiAgICB9KSA6IHQpXG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSl7XG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcbiAgICB9ZWxzZXtcbiAgICAgICAgYSA9IFwiW0xJR0hUQ09SRF0gXCIrYVxuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xuICAgICAgICB0aXRsZTogYVxuICAgIH0sIGEpXG59XG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcblxubGV0IEVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxubGV0IGlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlICYmIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxuXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xuICAgIGlzVXNhYmxlID0gdXNhYmxlXG4gICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKXJldHVyblxuICAgIGlmKCFpc0Vtb2ppRGlzYWJsZWQpaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcblxuICAgIGhhc1BhdGNoZWQgPSB0cnVlXG4gICAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbihlbW9qaSl7XG4gICAgICAgIGlmKGlzVXNhYmxlKXtcbiAgICAgICAgICAgIGlmKGVtb2ppLnN1cnJvZ2F0ZXMgfHwgZW1vamkuZGl2ZXJzaXR5KXJldHVybiB0cnVlXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFbW9qaURpc2FibGVkLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXG5jb25zdCB7dXNlU3RhdGV9ID0gQkRWMi5yZWFjdFxuXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JjZVVwZGF0ZSgpe1xuICAgIHJldHVybiB1c2VTdGF0ZSgpWzFdO1xufSIsImltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxuaW1wb3J0IHsgYWRkb25DYWNoZSB9IGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcblxuY29uc3QgY2FjaGUgPSB7fVxuY29uc3QgY2FjaGUyID0ge31cblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcbiAgICB9XG5cbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RhcnQoKXtcblxuICAgIH1cblxuICAgIGlzVHJ1c3RlZChoYXNoKXtcbiAgICAgICAgcmV0dXJuIGNhY2hlW2hhc2hdICYmICFjYWNoZVtoYXNoXS5zdXNwZWN0XG4gICAgfVxufVxuXG5jb25zdCB0ZXN0cyA9IFtcbiAgICBbL3Rva2VuL2dpLCAwXSxcbiAgICBbL2VtYWlsL2dpLCAwXSxcbiAgICBbL21mYS9naSwgMF0sXG4gICAgWy8yZmEvZ2ksIDBdLFxuICAgIFsvcGhvbmUvZ2ksIDBdLFxuICAgIFsvY2hpbGRfcHJvY2Vzcy9naSwgMF0sXG4gICAgWy9sb2NhbFN0b3JhZ2UvZ2ksIDBdLFxuICAgIFsvZ2V0R2xvYmFsL2dpLCAwXSxcbiAgICBbL0Jyb3dzZXJXaW5kb3cvZ2ksIDBdLFxuICAgIFsvXFwuZXhlL2dpLCAwXSxcbiAgICBbL2V2YWwvZ2ksIDBdLFxuICAgIFsvV2ViQXNzZW1ibHkvZ2ksIDBdLFxuICAgIFsvWE1MSHR0cFJlcXVlc3QoXFwufFxcW1tcIidgXSlwcm90b3R5cGUvZ2ksIDBdLFxuICAgIFsvd2luZG93XFwuZmV0Y2goICspPz0vZ2ksIDBdLFxuICAgIC8qKiBPYmZ1c2NhdGlvbiAvIGhpZGRlbiAvIHdvcmthcm91bmRzICovXG4gICAgWy8oW1wiJ2BdXFwrKVtcIidgXVxcd1tcIidgXS9naSwgMV0sXG4gICAgWy9bXCInYF1cXHdbXCInYF0oXFwrW1wiJ2BdKS9naSwgMV0sXG4gICAgWy9cXCR7W1wiJ2BdXFx3K1tcIidgXX0vZ2ksIDFdLFxuICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xuICAgIFsvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAxXSxcbiAgICBbL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKycoICspPywoICspPydbXiddezR9J1xcKS9nLCAxXSwgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxuICAgIC8qKiBtYW5nbGVkICovXG4gICAgWy9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAxXSwgLy8gYignMHgwJylcbiAgICBbL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnKCArKT8sKCArKT8nW14nXXs0fSdcXCkvZywgMV0sIC8vIGIoJzB4MCcsICd4MV1mJylcbiAgICAvKiogc3RyaW5nIGFycmF5IGF0IHN0YXJ0ICovXG4gICAgWy9edmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpLCAxXVxuXVxuXG5jb25zdCB0aHJlYXRzID0gW1xuICAgIFwiQWNjb3VudCBTdGVhbGVyL1ZpcnVzXCIsXG4gICAgXCJPYmZ1c2NhdGlvbi9IaWRkZW4gY29kZVwiXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSl7XG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIGFsbCBjb21tZW50cyBmcm9tIHBsdWdpbnMgKHJlbW92ZSBtZXRhIGFuZCBvdGhlci4pXG5cbiAgICBmb3IoY29uc3QgW3Rlc3QsIHR5cGVdIG9mIHRlc3RzKXtcbiAgICAgICAgY29uc3Qgc2NycHQgPSB0eXBlID09PSAxID8gbm9fY29tbWVudHMgOiBkYXRhXG4gICAgICAgIGlmKHRlc3QuZXhlYyhzY3JwdCkpe1xuICAgICAgICAgICAgaXNIYXJtZnVsID0gdGhyZWF0c1t0eXBlXVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgY2FjaGVbaGFzaF0gPSB7XG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXG4gICAgICAgIHR5cGU6IGhhc2hUb1VybFtoYXNoXS5lbmRzV2l0aChcIi5qc1wiKSA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCIsXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcbiAgICAgICAgaGFzaDogaGFzaCxcbiAgICAgICAgZmlsZW5hbWVcbiAgICB9XG4gICAgXG4gICAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKVxuXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXG59XG5cbmNvbnN0IGhhc2hUb1VybCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxuICAgIGlmKCFjYWNoZVtoYXNoXSl7XG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9HRVRfVVNFUl9BR0VOVFwiKSAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNhbGxiYWNrKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXG4gICAgICAgICAgICByZXN1bHQuaGFzaCA9IGhhc2hcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXG5cbiAgICAgICAgICAgIGNhY2hlW2hhc2hdID0gcmVzdWx0XG5cbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGQgbm90IHJlYWQgZnJvbSBnaXRodWIuICR7ZXJyfWApXG4gICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXG4gICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcbiAgICAgICAgfSlcbiAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cblxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXG4gICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcblxuICAgIGNyZWF0ZVJlYWRTdHJlYW0oX19wYXRoKS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcbiAgICB9KS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxuXG4gICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IF9fcGF0aFxuXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF1cbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxuICAgICAgICAgICAgICAgIGNvbnRlbnRNYW5hZ2VyLnNhdmVBZGRvbkNhY2hlKClcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcbiAgICBpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKXJldHVyblxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcblxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfR0VUX1VTRVJfQUdFTlRcIilcbiAgICAgICAgfVxuICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXG4gICAgICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUoY2h1bmspXG4gICAgICAgIH0pXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxuXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxuICAgICAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gYXR0YWNobWVudC51cmxcblxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGF0dGFjaG1lbnQuZmlsZW5hbWUpXG4gICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgICAgICAgICBpZihlbGVtKWVsZW0ucmVtb3ZlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSkuY2F0Y2goKCk9Pnt9KVxufVxuXG5sZXQgZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXG4gKiBAcGFyYW0ge3t0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBvZmZpY2lhbD86IGJvb2xlYW59fHtzdXNwZWN0OnRydWUsIHR5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIGhhcm06IHN0cmluZ319IHJlc3VsdFxuICovXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxuXG4gICAgaWYoIWZsb3dlclN0YXJNb2R1bGUpZmxvd2VyU3Rhck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXG4gICAgXG4gICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC50YWdOYW1lID09PSBcIkFcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgP1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgQW55d2F5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKFwiTElHSFRDT1JEX09QRU5fRVhURVJOQUxcIiwgY2hpbGQuaHJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUoZGl2LnBhcmVudE5vZGUpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgfVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN2ZylbMF0uc3ZnLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDQwIDMyXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OlwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtMzIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTpCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb2ludGVyRXZlbnRzKVswXS5wb2ludGVyRXZlbnRzXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApLCBkaXYpXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk03LjQsMTEuMTcsNCw4LjYyLDUsNy4yNmwyLDEuNTNMMTAuNjQsNGwxLjM2LDFaXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9LCBvbkNsaWNrKCl7XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJMaWdodGNvcmQgd2lsbCBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYW5kIGxhdW5jaCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXG4gICAgfWVsc2V7XG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIixzdHJva2U6XCIjMzYzOTNmXCIsc3R5bGU6e2NvbG9yOlwiIzQwODdlZFwifX0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0S2V5ZWRBcnJheShvYmope1xuICAgIGxldCBhcnIgPSBbXVxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcbiAgICAgICAgYXJyLnB1c2goW2ssIG9ialtrXV0pXG4gICAgfSlcbiAgICByZXR1cm4gYXJyXG59XG5cbmxldCBrZXkgPSBudWxsXG5sZXQgc2F2ZSA9IG51bGxcblxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxuLnRoZW4obG9jYWxTdG9yYWdlTW9kdWxlID0+IHtcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiLCBidG9hKEpTT04uc3RyaW5naWZ5KGtleSkpKVxuICAgIH1cbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHNhdmUoKVxuICAgIH0sIDEwMDAwMCk7XG4gICAgdHJ5e1xuICAgICAgICBsZXQgdmFsID0gc2FmZUpTT05QYXJzZShhdG9iKGxvY2FsU3RvcmFnZS5nZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIikpKVxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXG4gICAgICAgICAgICBzYXZlKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGtleSA9IHZhbFxuICAgIH1jYXRjaChlKXtcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxuICAgICAgICBzYXZlKClcbiAgICB9XG59KVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxufVxuXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xuICAgIHRyeXtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcbiAgICB9Y2F0Y2goZSl7XG4gICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3IgPyBuZXcgRXJyb3IoZSkgOiBlXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XG4gICAgdHJ5e1xuICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihcImFlcy0yNTYtY2JjXCIsIEJ1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIikpXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIGRlY3J5cHRlZC50b1N0cmluZyhcInV0ZjhcIilcbiAgICB9Y2F0Y2goZSl7XG4gICAgICAgIHJldHVybiBcInt9XCJcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XG4gICAgbGV0IGFyZ3MgPSBbQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKV1cbiAgICBcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xuICAgIGxldCBlbmNyeXB0ZWQgPSBjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwidXRmOFwiKSk7XG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcbn0iLCJpbXBvcnQge2JkcGx1Z2luRXJyb3JzLCBwbHVnaW5Db29raWUsIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbnN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuY2xhc3MgUGx1Z2luTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luTW9kdWxlID0gdGhpc1xuICAgIH1cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyO31cbn1cblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2lucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxvYWRQbHVnaW5EYXRhKCk7XG4gICAgYmRwbHVnaW5FcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkUGx1Z2lucygpKSk7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBwbHVnaW4sIG5hbWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgICAgICBuYW1lID0gcGx1Z2luLmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBsb2FkZWQuXCIsIGVycik7XG4gICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbbmFtZV0pIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwbHVnaW5Db29raWVbbmFtZV0pIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgICAgICBiZHBsdWdpbkVycm9ycy5wdXNoKHtuYW1lOiBuYW1lLCBmaWxlOiBiZHBsdWdpbnNbcGx1Z2luc1tpXV0uZmlsZW5hbWUsIG1lc3NhZ2U6IFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXG4gICAgfVxuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcblxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkub24oXCJkaWQtbmF2aWdhdGUtaW4tcGFnZVwiLCB0aGlzLmNoYW5uZWxTd2l0Y2guYmluZCh0aGlzKSk7XG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0YXJ0UGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdGFydCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0YXJ0ZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgcGx1Z2luICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdG9wUGx1Z2luID0gZnVuY3Rpb24ocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5zdG9wKCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0b3BwZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKSArIFwiIGNvdWxkIG5vdCBiZSBzdG9wcGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IHRydWU7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbl0pIHJldHVybjtcbiAgICBwbHVnaW5Db29raWVbcGx1Z2luXSA9IGZhbHNlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbik7XG4gICAgZWxzZSB0aGlzLmVuYWJsZVBsdWdpbihwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiAoY29uc29sZS5sb2cocC5maWxlbmFtZSwgZmlsZW5hbWUpKSB8fCBwLmZpbGVuYW1lID09IGZpbGVuYW1lKS5wbHVnaW47XG4gICAgdHJ5IHsgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO31cbiAgICBjYXRjaCAoZXJyKSB7aWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycl19KTt9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLWxvYWRlZFwiLCBwbHVnaW4uZ2V0TmFtZSgpKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudW5sb2FkUGx1Z2luID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgZGVsZXRlIGJkcGx1Z2luc1twbHVnaW5dO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcbiAgICB9XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tdW5sb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgdGhpcy51bmxvYWRQbHVnaW4oYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybiB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IHBsdWdpbkNvb2tpZVtwbHVnaW5dO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0b3BQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkICYmIHR5cGVvZihiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCgpO1xuICAgIGlmIChlbmFibGVkKSB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tcmVsb2FkZWRcIiwgcGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLnJlbG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZ1bGxQYXRoKTtcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVwZGF0ZVBsdWdpbkxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbkNvb2tpZSwgc2F2ZWQpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc2F2ZVBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInBsdWdpbnNcIiwgcGx1Z2luQ29va2llKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubmV3TWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vbk1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uTWVzc2FnZSgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvbk1lc3NhZ2UgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmNoYW5uZWxTd2l0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25Td2l0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uU3dpdGNoKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uU3dpdGNoIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yYXdPYnNlcnZlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIoZSk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9ic2VydmVyIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbk1vZHVsZSgpOyIsImltcG9ydCB7IHRoZW1lQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCJcblxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIHBvcG91dFdpbmRvdyB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBXaW5kb3c+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53aW5kb3dzID0gbmV3IE1hcCgpXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBsZXQgcG9wb3V0TW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFdpbmRvdylcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfT1BFTlwiLCAoZXYpID0+IHtcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQHR5cGUge1dpbmRvd31cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjb25zdCB3aW5kb3cgPSBwb3BvdXRNb2R1bGUuZGVmYXVsdC5nZXRXaW5kb3coZXYua2V5KVxuICAgICAgICAgICAgICAgIHRoaXMud2luZG93cy5zZXQoZXYua2V5LCB3aW5kb3cpXG5cbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NMaXN0ID0gd2luZG93LmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0XG4gICAgICAgICAgICAgICAgY2xhc3NMaXN0LmFkZChcIndpbmRvdy1wb3BvdXRcIilcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwibGlnaHRjb3JkXCIpXG4gICAgICAgICAgICAgICAgY2xhc3NMaXN0LmFkZChcImxpZ2h0Y29yZFwiKVxuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoZXYua2V5KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfQ0xPU0VcIiwgKGV2KSA9PiB7XG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2luZG93cy5kZWxldGUoZXYua2V5KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1lbmFibGVkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1kaXNhYmxlZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0pXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtcmVsb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLXVubG9hZGVkXCIsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSlcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1sb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGVuYWJsZSgpe1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXG4gICAgICAgIHRoaXMudXBkYXRlKClcbiAgICB9XG5cbiAgICBkaXNhYmxlKCl7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMudXBkYXRlKClcbiAgICB9XG5cbiAgICB1cGRhdGUoa2V5KXtcbiAgICAgICAgaWYoIXRoaXMud2luZG93cy5zaXplKXJldHVyblxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVRoZW1lcyhrZXkpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlUaGVtZXMoa2V5KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlVGhlbWVzKGtleSl7XG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgaWYoa2V5KXtcbiAgICAgICAgICAgIGxldCB3aW5kb3cgPSB0aGlzLndpbmRvd3MuZ2V0KGtleSlcbiAgICAgICAgICAgIGlmKCF3aW5kb3cpcmV0dXJuXG4gICAgICAgICAgICBsZXQgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnRcblxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1saWdodGNvcmQtdGhlbWU9dHJ1ZV1cIikpe1xuICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgZm9yKGxldCBrZXkgb2YgdGhpcy53aW5kb3dzLmtleXMoKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUaGVtZXMoa2V5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXBwbHlUaGVtZXMoa2V5KXtcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cbiAgICAgICAgaWYoa2V5KXtcbiAgICAgICAgICAgIGxldCB3aW5kb3cgPSB0aGlzLndpbmRvd3MuZ2V0KGtleSlcbiAgICAgICAgICAgIGlmKCF3aW5kb3cpcmV0dXJuXG4gICAgICAgICAgICBsZXQgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnRcblxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1saWdodGNvcmQtdGhlbWU9dHJ1ZV1cIikpe1xuICAgICAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIndpbGwtcmVtb3ZlXCIsIFwidHJ1ZVwiKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhiZHRoZW1lcylcbiAgICAgICAgICAgIC5mb3JFYWNoKHRoZW1lTmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIXRoZW1lQ29va2llW3RoZW1lTmFtZV0pcmV0dXJuIC8vIHRoZW1lIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZU5hbWVdXG4gICAgICAgICAgICAgICAgaWYoIXRoZW1lKXJldHVybiAvLzpzaHJ1ZzpcblxuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXSNcIitET00uZXNjYXBlSUQodGhlbWUuaWQpKVxuICAgICAgICAgICAgICAgIGlmKGV4aXN0aW5nKXtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuaW5uZXJIVE1MID0gdW5lc2NhcGUodGhlbWUuY3NzKVxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmVBdHRyaWJ1dGUoXCJ3aWxsLXJlbW92ZVwiKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5pZCA9IERPTS5lc2NhcGVJRCh0aGVtZS5pZClcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuaW5uZXJIVE1MID0gdW5lc2NhcGUodGhlbWUuY3NzKVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxpZ2h0Y29yZC10aGVtZVwiLCBcInRydWVcIilcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbd2lsbC1yZW1vdmU9dHJ1ZV1cIikpe1xuICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgZm9yKGxldCBrZXkgb2YgdGhpcy53aW5kb3dzLmtleXMoKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVRoZW1lcyhrZXkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuaW1wb3J0IFYyQ19QdWJsaWNTZXJ2ZXJzIGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnNcIjtcbmltcG9ydCBMYXllcnMgZnJvbSBcIi4vTGF5ZXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyX1B1YmxpY1NlcnZlcnMgPSB0aGlzXG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBMYXllcnMuY3JlYXRlTGF5ZXIoKGNsb3NlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QdWJsaWNTZXJ2ZXJzLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIiwgY2xvc2V9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldCBidXR0b24oKSB7XG4gICAgICAgIGNvbnN0IGJ0biA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWxpXCIgY2xhc3M9XCIke0JEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtfVwiPmApO1xuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIGJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xuICAgICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge3RoaXMucmVuZGVyKCk7fSk7XG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xuICAgICAgICByZXR1cm4gYnRuO1xuICAgIH1cblxuICAgIF9hcHBlbmRCdXR0b24oKSB7XG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lclxuICAgICAgICBdID0gW1xuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZG93bmxvYWRQcm9ncmVzcyAmJiBlLnR1dG9yaWFsQ29udGFpbmVyKVswXS50dXRvcmlhbENvbnRhaW5lcilcbiAgICAgICAgXVxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBndWlsZHMgPSBET00ucXVlcnkoYGRpdi4ke2NsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyfSA+IGRpdmApO1xuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XG4gICAgfVxuXG4gICAgYWRkQnV0dG9uKCkge1xuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdCA9IHdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTmF2aWdhYmxlR3VpbGRzXCIpO1xuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSB3ZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRMaXN0ID8gR3VpbGRMaXN0IDogR3VpbGRMaXN0T2xkLnByb3RvdHlwZSwgR3VpbGRMaXN0ID8gXCJkZWZhdWx0XCIgOiBcInJlbmRlclwiLCB7YWZ0ZXI6IHRoaXMuX2FwcGVuZEJ1dHRvbn0pO1xuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24oKTtcbiAgICB9XG5cbiAgICByZW1vdmVCdXR0b24oKSB7XG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5ndWlsZFBhdGNoO1xuICAgICAgICBjb25zdCBidXR0b24gPSBET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpO1xuICAgICAgICBpZiAoYnV0dG9uKSBidXR0b24ucmVtb3ZlKCk7XG4gICAgfVxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEMsIGxpZ2h0Y29yZFNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xuaW1wb3J0IHRmSG91ciBmcm9tIFwiLi8yNGhvdXJcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuaW1wb3J0IHB1YmxpY1NlcnZlcnNNb2R1bGUgZnJvbSBcIi4vcHVibGljU2VydmVyc1wiO1xuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vY2xhc3NOb3JtYWxpemVyXCI7XG5pbXBvcnQgZE1vZGUgZnJvbSBcIi4vZGV2TW9kZVwiO1xuXG5pbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbFwiO1xuaW1wb3J0IENzc0VkaXRvciBmcm9tIFwiLi4vdWkvY3NzRWRpdG9yXCI7XG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuL0N1c3RvbVJpY2hQcmVzZW5jZVwiO1xuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xuaW1wb3J0IHsgcmVtb3RlLCBpcGNSZW5kZXJlciB9IGZyb20gXCJlbGVjdHJvblwiO1xuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XG5pbXBvcnQgYmx1clByaXZhdGUgZnJvbSBcIi4vYmx1clByaXZhdGVcIjtcbmltcG9ydCBkaXNhYmxlVHlwaW5nIGZyb20gXCIuL2Rpc2FibGVUeXBpbmdcIjtcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuLi91aS9zd2l0Y2hcIjtcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4uL3VpL21hcmdpbnRvcFwiO1xuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XG5pbXBvcnQgSGlzdG9yeSBmcm9tIFwiLi4vdWkvaWNvbnMvaGlzdG9yeVwiO1xuaW1wb3J0IGNvcmUgZnJvbSBcIi4vY29yZVwiO1xuaW1wb3J0IHBvcG91dFdpbmRvdyBmcm9tIFwiLi9wb3BvdXRXaW5kb3dcIjtcblxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCBzaWRlYmFyQ29tcG9uZW50cyA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLlNlcGFyYXRvciAmJiBlLkhlYWRlciAmJiBlLkl0ZW0pXG5cbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Zsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCJ9LCBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIlxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcbiAgICB9XG59XG5cbmxldCBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcbiAgICB9XG5cbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxuXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXG4gICAgICAgIH0pKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcbiAgICB9XG4gICAgXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwiY29yZVwiKTtcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGxpZ2h0Y29yZFNldHRpbmdzKCkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxuICAgIH1cblxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyhpZCwgY2hlY2tlZCwgc2lkZWJhcik7XG4gICAgfVxuXG4gICAgdXBkYXRlU2V0dGluZ3MoaWQsIGVuYWJsZWQsIHNpZGViYXIpIHtcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiLCBcImxpZ2h0Y29yZC0xMFwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMlwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICAgICAgZWxzZSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLnJlbW92ZUJ1dHRvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTRcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xuXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy03XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XG4gICAgICAgICAgICBlbHNlIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLWRtLTFcIikge1xuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5jYWxsUmluZ2luZ0JlYXQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXG4gICAgICAgICAgICAgICAgaWYoc2V0dGluZ3NTdG9yZSAmJiAhc2V0dGluZ3NTdG9yZS5kZWZhdWx0LnNob3dDdXJyZW50R2FtZSl7XG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgQ3VzdG9tUmljaFByZXNlbmNlLmRpc2FibGUoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XG4gICAgICAgICAgICBpcGNSZW5kZXJlci5zZW5kU3luYyhcIkxJR0hUQ09SRF9TRVRfQUxXQVlTX09OX1RPUFwiLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNFwiKSB7XG4gICAgICAgICAgICBpZihlbmFibGVkKXtcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmVuYWJsZSgpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5kaXNhYmxlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLThcIil7XG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSB3aW5kb3cuTGlnaHRjb3JkLkFwaS5zZXR0aW5nc1xuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcbiAgICAgICAgICAgIERpc2NvcmROYXRpdmUuYXBwLnJlbGF1bmNoKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTlcIikge1xuICAgICAgICAgICAgcG9wb3V0V2luZG93W2VuYWJsZWQgPyBcImVuYWJsZVwiIDogXCJkaXNhYmxlXCJdKClcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTEwXCIpe1xuICAgICAgICAgICAgY29yZS5tZXRob2RzLk5vdGlmaWNhdGlvbnNVc2VTaGltKGVuYWJsZWQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcblxuICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiSVNfTUFYSU1JWkVEXCIpXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJJU19NSU5JTUlaRURcIikgXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJXSU5ET1dfQk9VTkRTXCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxuICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5hcHAucmVsYXVuY2goKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gXCJlbmFibGVfZ2xhc3N0cm9uXCIpe1xuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXG4gICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmFwcC5yZWxhdW5jaCgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0zXCJdKSBET00uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy01XCJdKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNFwiXSkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLXByZXNlbmNlLTFcIl0pIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfU0VUX0FMV0FZU19PTl9UT1BcIiwgdHJ1ZSlcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTRcIl0pIEFudGlBZERNLmVuYWJsZSgpXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtOVwiXSkgcG9wb3V0V2luZG93LmVuYWJsZSgpXG5cbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XG4gICAgfVxuXG4gICAgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcbiAgICB9XG5cbiAgICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xuICAgIH1cblxuICAgIHJlbmRlclNpZGViYXIoc2lkZWJhcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyLnJlbmRlcihzaWRlYmFyKTtcbiAgICB9XG5cbiAgICBjb3JlQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcbiAgICB9XG5cbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gd2luZG93LkxpZ2h0Y29yZC5BcGkuc2V0dGluZ3NcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMubGlnaHRjb3JkU2V0dGluZ3MubWFwKChzZWN0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IDAgPyBudWxsIDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCkpLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHNlY3Rpb24udGl0bGUpLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NoZWNrZWQgPSBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtOFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcImlzVGFic1wiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImVuYWJsZV9nbGFzc3Ryb25cIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJHTEFTU1RST05cIiwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibGlnaHRjb3JkLTEwXCIpaXNDaGVja2VkID0gIWFwcFNldHRpbmdzLmdldChcIkRFRkFVTFRfTk9USUZJQ0FUSU9OU1wiLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09IFwibGlnaHRjb3JkLThcIiAmJiBpc0NoZWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJncmVlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vazogXCJvdXRsaW5lZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJicmFuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuaXBjLnNlbmQoXCJORVdfVEFCXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJPcGVuIGEgbmV3IFRhYlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiICYmIGlzQ2hlY2tlZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJsaW51eFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNob2ljZXMgPSBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0dWFsID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcy5wdXNoKFwiYmx1cmJlaGluZFwiLCBcImFjcnlsaWNcIiwgXCJ0cmFuc3BhcmVudFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gYXBwU2V0dGluZ3MuZ2V0KFwiR0xBU1NUUk9OX0JMVVJcIiwgXCJibHVyYmVoaW5kXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcy5wdXNoKFwidGl0bGViYXJcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3Rpb25cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZW51XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG9wb3ZlclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNpZGViYXJcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWFkZXJcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaGVldFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndpbmRvd1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh1ZFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZ1bGxzY3JlZW4tdWlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b29sdGlwXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVyLXdpbmRvd1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVyLXBhZ2VcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTl9WSUJSQU5DWVwiLCBcImZ1bGxzY3JlZW4tdWlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZSwge30sIFwiR2xhc3N0cm9uIEJsdXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBjaG9pY2VzLm1hcChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhY3R1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNSZW5kZXJlci5pbnZva2UoXCJMSUdIVENPUkRfU0VUX0JMVVJfVFlQRVwiLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGNSZW5kZXJlci5pbnZva2UoXCJMSUdIVENPUkRfU0VUX1ZJQlJBTkNZXCIsIHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLCBcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2soKXtcbiAgICAgICAgICAgICAgICAgICAgaXBjUmVuZGVyZXIuc2VuZFN5bmMoXCJMSUdIVENPUkRfUkVMQVVOQ0hfQVBQXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlbW90ZS5wcm9jZXNzLmFyZ3Yuc2xpY2UoMSkuY29uY2F0KFtcIi0tZGlzYWJsZS1iZXR0ZXJkaXNjb3JkXCJdKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZVxuICAgICAgICAgICAgfSwgXCJSZWxhdW5jaCB3aXRob3V0IEJldHRlckRpc2NvcmRcIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXG4gICAgICAgICAgICAgICAgbG9vazogXCJnaG9zdFwiLFxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ2xlYXJpbmdDYWNoZSlyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDbGVhcmluZyBjYWNoZS4uLlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5zZXNzaW9uLmNsZWFyQ2FjaGUoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDYWNoZSBpcyBjbGVhcmVkICFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gQ2hlY2sgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNDbGVhcmluZ0NhY2hlXG4gICAgICAgICAgICB9LCBcIkNsZWFyIGNhY2hlXCIpXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBQcmVzZW5jZUNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHJlc2VuY2VTZXR0aW5ncywge1xuICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXG4gICAgICAgICAgICBzZXR0aW5nczogdGhpcy5QcmVzZW5jZVNldHRpbmdzXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcbiAgICAgICAgICAgIGtleTogXCJsYXBhbm5lbFwiXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgQXBpUHJldmlld0NvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBcGlQcmV2aWV3LCB7XG4gICAgICAgICAgICBrZXk6IFwibGFwaXBhbm5lbFwiXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pXG4gICAgfVxuXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcbiAgICAgICAgLy8gSSBrbm93IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUsIGJ1dCB3aGVuIGl0IGlzbid0LFxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcbiAgICAgICAgLy8gdG8gZGVidWcgbGF0ZXIuXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRMaXN0LCB7dHlwZX0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDYXJkTGlzdCwge3R5cGV9KSlcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbCBvbiB3aW5kb3dcbiAqL1xuXG5mdW5jdGlvbiBtYWtlQ29tcG9uZW50KGNoaWxkcmVuKXtcbiAgICBjbGFzcyBTZXR0aW5nQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICAgICAgcmVuZGVyKCl7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oc2lkZWJhciwgKCkgPT4gdGhpcy5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBzaWRlYmFyXG4gICAgcmV0dXJuIChzKSA9PiB7XG4gICAgICAgIHNpZGViYXIgPSBzXG4gICAgICAgIHJldHVybiBTZXR0aW5nQ29tcG9uZW50XG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB7fVxuICAgIH1cblxuICAgIHJlZ2lzdGVyKHBhbmVsLCBjb21wb25lbnQpe1xuICAgICAgICB0aGlzLnBhbmVsc1twYW5lbF0gPSBjb21wb25lbnRcbiAgICB9XG5cbiAgICBnZXRDb21wb25lbnQocGFuZWwsIHNpZGViYXIpe1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbcGFuZWxdKHNpZGViYXIpXG4gICAgfVxuXG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLCBcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0ZXh0OiBcIlBsdWdpbnNcIiwgXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGV4dDogXCJUaGVtZXNcIiwgXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIiwgXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBnZXQgTENpdGVtcygpe1xuICAgICAgICBsZXQgaXRlbXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcbiAgICAgICAgICAgICAgICBpZDogXCJsaWdodGNvcmRcIlxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxuICAgICAgICAgICAgICAgIGlkOiBcInN0YXR1c1wiXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcbiAgICAgICAgICAgICAgICBpZDogXCJhY2NvdW50aW5mb1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgZ2V0IExDRGV2SXRlbXMoKXtcbiAgICAgICAgbGV0IGl0ZW1zID0gW11cbiAgICAgICAgaWYoIXdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSlyZXR1cm4gaXRlbXNcbiAgICAgICAgaXRlbXMucHVzaCguLi5bXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmQgQXBpXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogXCJDb21wb25lbnRzIFByZXZpZXdcIixcbiAgICAgICAgICAgICAgICBpZDogXCJsY2FwaXByZXZpZXdcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdKVxuICAgICAgICByZXR1cm4gaXRlbXNcbiAgICB9XG5cbiAgICByZW5kZXIoc2lkZWJhcikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLkxDaXRlbXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLkxDRGV2SXRlbXMubWFwKGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmKGUuc2VjdGlvbilyZXR1cm4gZVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChcIkJEQ2hhbmdlbG9nVGl0bGVcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcChlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9XG59XG5cbi8qKlxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbFNpZGViYXIgb24gd2luZG93XG4gKi8iLCJpbXBvcnQge2JkdGhlbWVFcnJvcnMsIHRoZW1lQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xuXG5jbGFzcyBUaGVtZU1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlRoZW1lTW9kdWxlID0gdGhpc1xuICAgIH1cbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXI7fVxufVxuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxvYWRUaGVtZURhdGEoKTtcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XG4gICAgY29uc3QgdGhlbWVzID0gT2JqZWN0LmtleXMoYmR0aGVtZXMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZXNbaV1dO1xuICAgICAgICBpZiAoIXRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSB0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXG4gICAgfVxuICAgIGZvciAoY29uc3QgdGhlbWUgaW4gdGhlbWVDb29raWUpIHtcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XG4gICAgfVxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRoZW1lQ29va2llW25hbWVdID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcbiAgICBiZEV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWVuYWJsZWRcIilcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHRoZW1lQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSk7XG4gICAgYmRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1kaXNhYmxlZFwiKVxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVUaGVtZShuYW1lLCByZWxvYWQpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZVRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSk7XG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB0aGlzLnRvZ2dsZVRoZW1lKG5hbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJ0aGVtZVwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCB0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lKTtcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1sb2FkZWRcIiwgdGhlbWUubmFtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudW5sb2FkVGhlbWUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xuICAgIGRlbGV0ZSBiZHRoZW1lc1t0aGVtZV07XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS11bmxvYWRlZFwiLCB0aGVtZSk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcbiAgICB0aGlzLnVubG9hZFRoZW1lKGJkdGhlbWUuZmlsZW5hbWUpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkdGhlbWUuZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtcmVsb2FkZWRcIiwgdGhlbWUpO1xufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XG59O1xuXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwidGhlbWVcIik7XG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcbn07XG5cblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIpO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnNhdmVUaGVtZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb259IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cblxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhKStcIiB0ZXh0YXJlYVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXG4gICAgICogUXVpY2sgZXhhbXBsZTogYFBsdWdpblV0aWxpdGllcy5mb3JtYXRTdHJpbmcoXCJIZWxsbywge3t1c2VyfX1cIiwge3VzZXI6IFwiWmVyZWJvc1wifSlgXG4gICAgICogd291bGQgcmV0dXJuIFwiSGVsbG8sIFplcmVib3NcIi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgLSBvYmplY3QgbGl0ZXJhbCBvZiBwbGFjZWhvbGRlcnMgdG8gcmVwbGFjZW1lbnRzXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cmluZywgdmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIGluIHZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudCkpIHJlcGxhY2VtZW50ID0gSlNPTi5zdHJpbmdpZnkocmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihyZXBsYWNlbWVudCkgPT09IFwib2JqZWN0XCIgJiYgcmVwbGFjZW1lbnQgIT09IG51bGwpIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICBjYW5jZWxlZCA9IHRydWUgLy8gdGhpcyBhbGxvdyB0byBtb25rZXlwYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUuXG4gICAgICAgIH07XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XG4gICAgICAgIH0sIG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXG4gICAgICovXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIityZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyKStcIiArIGRpdlwiKSB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20rXCJweFwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIilcbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICAgICAgdG9hc3RXcmFwcGVyLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XG4gICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgYGNhbGMoNTAlIC0gJHt0b2FzdFdyYXBwZXIub2Zmc2V0V2lkdGggLyAyfXB4KWApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICAgICAgfSkpO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcbiAgICAgICAgICAgIGZvb3RlclxuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJvcGVuTW9kYWxcIiwgXCJ1cGRhdGVNb2RhbFwiKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1hcmtkb3duXCIpO1xuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiQ29uZmlybU1vZGFsXCIpO1xuICAgICAgICBpZiAoIU1vZGFsQWN0aW9ucyB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xuXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICAgICAgcmV0dXJuIE1vZGFsQWN0aW9ucy5vcGVuTW9kYWwocHJvcHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChDb25maXJtYXRpb25Nb2RhbCwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcbiAgICAgICAgICAgICAgICByZWQ6IGRhbmdlcixcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcbiAgICAgICAgICAgIH0sIHByb3BzKSwgY29udGVudCk7XG4gICAgICAgIH0sIHttb2RhbEtleToga2V5fSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCByZW1vdmVEYSgpe1xuICAgICAgICByZXR1cm4gcmVtb3ZlRGFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhKGNsYXNzTmFtZSl7XG4gICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcbn1cblxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5XZWJwYWNrTW9kdWxlcyA9ICgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXEgPSB3ZWJwYWNrSnNvbnAucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtb2R1bGUsIGV4cG9ydHMsIHJlcSkgPT4gbW9kdWxlLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XG5cbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhlTW9kdWxlLmdldFRva2VuIHx8IHRoZU1vZHVsZS5nZXRFbWFpbCB8fCB0aGVNb2R1bGUuc2hvd1Rva2VuKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gKHRoZU1vZHVsZSwgaXNEZWZhdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9ICFpc0RlZmF1bHQgPyB0aGVNb2R1bGUuZGVmYXVsdCA6IHRoZU1vZHVsZVxuICAgICAgICAgICAgICAgIGlmKCFtb2QpcmV0dXJuIHRoZU1vZHVsZVxuICAgICAgICAgICAgICAgIGlmIChtb2QucmVtb3ZlICYmIG1vZC5zZXQgJiYgbW9kLmNsZWFyICYmIG1vZC5nZXQgJiYgIW1vZC5zb3J0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIW1vZC5nZXRUb2tlbiAmJiAhbW9kLmdldEVtYWlsICYmICFtb2Quc2hvd1Rva2VuKXJldHVybiB0aGVNb2R1bGVcblxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KG1vZCwge1xuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIgJiYgb2JqLmdldFRva2VuKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldEVtYWlsXCIgJiYgb2JqLmdldEVtYWlsKSByZXR1cm4gKCkgPT4gXCJwdXBwZXQxMTExMkBnbWFpbC5jb21cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiICYmIG9iai5fX3Byb3RvX18pIHJldHVybiBwcm94eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoIWlzRGVmYXVsdCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGVNb2R1bGUsIHtkZWZhdWx0OiBwcm94eX0pXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xuICAgICAgICAgICAgY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9IChwcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7ZmluZCwgZmluZEFsbCwgZmluZEJ5VW5pcXVlUHJvcGVydGllcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB7XG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjIgPSB0aGlzXG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcblxuICAgIH1cblxuICAgIGpvaW5CRDEoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIwVG1mbzVaYk9SQ1JxYkFkXCIpO31cbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxuXG4gICAgam9pbkJEMigpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjJIU2NtOGpcIik7fVxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxuXG4gICAgam9pbkxDKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiN2VGZmYyQVwiKTt9XG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0O31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxuICAgICAqL1xuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XG4gICAgLyoqXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XG4gICAgICovXG4gICAgZ2V0IHJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cbiAgICAgKi9cbiAgICBnZXQgUmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxuICAgICAqL1xuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxuICAgICAqL1xuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxuXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XG4gICAgZ2V0IHNsYXRlRWRpdG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNsYXRlVGV4dEFyZWFcIl0pO31cbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiXSk7fVxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLndyYXBwZXIgJiYgZS51bnJlYWRNZW50aW9uc0JhcilbMF07XG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmd1aWxkc0Vycm9yICYmIGUuc2VsZWN0ZWQpWzBdXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcblx0fVxuXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XG4gICAgZ2V0IE1lc3NhZ2VDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTWVzc2FnZVwiKTt9XG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XG4gICAgZ2V0IFRvb2x0aXBXcmFwcGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTt9XG4gICAgZ2V0IE5hdGl2ZU1vZHVsZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNldEJhZGdlXCJdKTt9XG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cbiAgICBnZXQgR3VpbGRBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibGVhdmVHdWlsZFwiXSk7fVxuICAgIGdldCBUb29sdGlwcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5oaWRlICYmIG0uc2hvdyAmJiAhbS5zZWFyY2ggJiYgIW0uc3VibWl0ICYmICFtLnNlYXJjaCAmJiAhbS5hY3RpdmF0ZVJhZ2luZ0RlbW9uICYmICFtLmRpc21pc3MpO31cbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cbiAgICBnZXQgTGF5ZXJTdGFjaygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInBvcExheWVyXCJdKTt9XG4gICAgZ2V0IFVzZXJTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEN1cnJlbnRVc2VyXCJdKTt9XG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJvcGVuUHJpdmF0ZUNoYW5uZWxcIl0pO31cbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2VsZWN0UHJpdmF0ZUNoYW5uZWxcIl0pO31cblxuICAgIG9wZW5ETSh1c2VySWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZklkID0gdGhpcy5Vc2VyU3RvcmUuZ2V0Q3VycmVudFVzZXIoKS5pZDtcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUNoYW5uZWxJZCA9IHRoaXMuQ2hhbm5lbFN0b3JlLmdldERNRnJvbVVzZXJJZCh1c2VySWQpO1xuICAgICAgICBpZiAocHJpdmF0ZUNoYW5uZWxJZCkgcmV0dXJuIHRoaXMuUHJpdmF0ZUNoYW5uZWxBY3Rpb25zLnNlbGVjdFByaXZhdGVDaGFubmVsKHByaXZhdGVDaGFubmVsSWQpO1xuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XG4gICAgfVxuXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG59OyIsImltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuY29uc3Qgc3R5bGUgPSBgXG4gICAgLmNvbnRhaW5lci0yUmwwMXUge1xuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuY2hhdC0zYlJ4eHUge1xuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuc2lkZWJhci0ySzhwRmgge1xuICAgICAgICBmbGV4LWdyb3c6IDEhaW1wb3J0YW50O1xuICAgIH1cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUge1xuICAgIHN0YXJ0KCkge1xuICAgICAgICBET00uYWRkU3R5bGUoXCJWb2ljZU1vZGVcIiwgc3R5bGUpO1xuICAgIH1cblxuICAgIHN0b3AoKSB7XG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcIlZvaWNlTW9kZVwiKTtcbiAgICB9XG59OyIsImNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XG5kZWxldGUgcmVxLm0uX19leHRyYV9pZF9fO1xuZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcbmNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XG4gICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gbS5kZWZhdWx0O1xuICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIG07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XG4gICAgY29uc3QgbW9kdWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKG0uZGVmYXVsdCk7XG4gICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKG0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2R1bGVzO1xufTtcblxuY29uc3QgZmluZEJ5UHJvcHMgPSAoLi4ucHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xuY29uc3QgZmluZEJ5UHJvdG90eXBlcyA9ICguLi5wcm90b05hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBtb2R1bGUucHJvdG90eXBlICYmIHByb3RvTmFtZXMuZXZlcnkocHJvdG9Qcm9wID0+IG1vZHVsZS5wcm90b3R5cGVbcHJvdG9Qcm9wXSAhPT0gdW5kZWZpbmVkKSk7XG5jb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XG5cbmxldCBtb2QgPSAge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVByb3BzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XG5leHBvcnQgZGVmYXVsdCBtb2Rcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLldlYnBhY2tNb2R1bGVzID0gbW9kIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRjb3JkTG9nbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2OCAxNjguNjlcIiB7Li4ucHJvcHN9IGhlaWdodD1cIjEwMCVcIiB3aWR0aD17cHJvcHMuc2l6ZX0+XG4gICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fYVwiIHgxPXs2Ni43fSB5MT17LTQ4Ny43fSB4Mj17NjYuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2JcIiB4MT17MTAxLjd9IHkxPXstNDg3Ljd9IHgyPXsxMDEuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTE0LjkgMzUuM2gxMzkuMlYxMzNIMTQuOXpcIiAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMDEuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19iKVwiIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDB2MTY4bDE2OCAuNjlWMHptMTExLjMgMTI0LjFzLTMuNC00LjEtNi4zLTcuN2MxMi42LTMuNSAxNy40LTExLjMgMTcuNC0xMS4zYTUyLjUyIDUyLjUyIDAgMDEtMTEuMSA1LjYgNjguNjMgNjguNjMgMCAwMS0zOC45IDQgNzAuMTIgNzAuMTIgMCAwMS0xNC4xLTQuMSA0OC44OCA0OC44OCAwIDAxLTcuMS0zLjNjLS4zLS4yLS42LS4zLS45LS41YS43Ni43NiAwIDAwLS40LS4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42IDcuNiAxNi44IDExLjJjLTIuOSAzLjYtNi40IDcuOS02LjQgNy45LTIxLjItLjYtMjkuMy0xNC41LTI5LjMtMTQuNSAwLTMwLjYgMTMuOC01NS40IDEzLjgtNTUuNCAxMy44LTEwLjMgMjYuOS0xMCAyNi45LTEwbDEgMS4xQzUyLjggNTAuMyA0NSA1Ny45IDQ1IDU3LjlhNTYuMiA1Ni4yIDAgMDE1LjctMi43IDcyLjE5IDcyLjE5IDAgMDEyMS44LTYgOC43NSA4Ljc1IDAgMDExLjYtLjIgODkuMSA4OS4xIDAgMDExOS40LS4yIDc4LjQ1IDc4LjQ1IDAgMDEyOC45IDkuMXMtNy41LTcuMi0yMy45LTEyLjFsMS4zLTEuNXMxMy4xLS4zIDI2LjkgMTBjMCAwIDEzLjggMjQuOCAxMy44IDU1LjQuMS0uMS04IDEzLjgtMjkuMiAxNC40elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYylcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIClcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVnSHVudGVyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgKVxuICAgIH0gXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY3VzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuICg8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgIHsuLi50aGlzLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjREQyRTQ0XCJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zMyAzM2EyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJsMS0xMmgyOGwxIDEyelwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0VBNTk2RVwiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgMzVjLS43OTItMS44NzUtMS43NS0zLjI5MS0zLjQxNy00LjY2NiAxLjc1LTEuNDU5IDQuNTQyLTUuNSA1LjI1LTguMjkyczIuNzUgOC4xMjUgMi4wNDIgMTAuNjI1UzEzIDM1IDEzIDM1em0xMC4zMDMgMGMuNzkxLTEuODc1IDEuNzUtMy4yOTEgMy40MTYtNC42NjYtMS43NS0xLjQ1OS00LjU0MS01LjUtNS4yNS04LjI5Mi0uNzA3LTIuNzkyLTIuNzUgOC4xMjUtMi4wNCAxMC42MjUuNzA4IDIuNSAzLjg3NCAyLjMzMyAzLjg3NCAyLjMzM3pcIlxuICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNCRTE5MzFcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzI4IDI0LjI2M0EyLjUgMi41IDAgMDA4IDIyLjVjMC0uNTY1LS4xOTUtMS4wODEtLjUxMS0xLjVINGwtLjI3MiAzLjI2M3ptMjguNTQ0IDBMMzIgMjFoLTMuNDg5QTIuNDgyIDIuNDgyIDAgMDAyOCAyMi41YTIuNSAyLjUgMCAwMDQuMjcyIDEuNzYzelwiXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTRcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjZcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjMgMzVIMTNzMi02IDItMTNoNmMwIDcgMiAxMyAyIDEzek0xNyAyaDJ2N2gtMnpcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM1NUFDRUVcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjgzOC4yMDZDMTcuNjY3LjA0MiAxNyAuMzE4IDE3IDEuNDE4djFjMCAxLjEuODY1IDEuNzUzIDEuOTIzIDEuNDUxbDUuMTU0LS45MDFjMS43MTUtLjM0MyAxLjU0OC0xLjU5My4wODUtMS44ODRMMTguODM4LjIwNnpcIlxuICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNDQ0Q2RERcIlxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDZsLS4wODEuMTIzQzEwLjkzOCAxNi45ODEgMyAxNS4wMTUgMyAxOXYyLjVhMi41IDIuNSAwIDAwNC45NS41SDEyYTIgMiAwIDAwNCAwaDRhMiAyIDAgMDA0IDBoNC4wNWEyLjUgMi41IDAgMDA0Ljk1LS41VjE5YzAtNC04LTItMTUtMTN6XCJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgIDxnIGZpbGw9XCIjRjVGOEZBXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTQ4IDYuMDc4bC0uMDMuMDQ1QzE3LjEzMiAxMS42MTkgMTAuODExIDE2LjEyNiA4IDE4djRhMiAyIDAgMDA0IDB2LTRjLjk4Mi0uOTgyIDUuODEzLTYuNzg3IDUuOTg0LTExLjczMi0uMDEtLjA2NC0uMDI3LS4xMjYtLjAzNi0uMTl6bS4wOC4zOThDMTguMzI0IDExLjM3NCAyMy4wMzEgMTcuMDMxIDI0IDE4djRhMiAyIDAgMDA0IDB2LTRjLTIuNzUtMS44MzMtOC45NTMtNi4xOS05Ljk3Mi0xMS41MjR6XCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk4NCA2LjI3QzE3LjkyMiA4LjM0NiAxNy42MDYgMTYuMzk0IDE2IDE4djRhMiAyIDAgMDA0IDB2LTRjLTEuNTY0LTEuNTY0LTEuOTA1LTkuMjQxLTEuOTc5LTExLjU1OS0uMDExLS4wNTctLjAyNy0uMTEzLS4wMzctLjE3MXpcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIClcbiAgICB9IFxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3RcIil9XG4gKi9cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxubGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXG5sZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxubGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXG5sZXQgc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXG5jb25zdCBHdWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcylbMF0uZGVmYXVsdFxuY29uc3QgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UmVsYXRpb25zaGlwcylbMF0uZGVmYXVsdFxuY29uc3Qgc2Vzc2lvbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFNlc3Npb25zKVswXS5kZWZhdWx0XG5jb25zdCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHRcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0FjY291bnRJbmZvcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZTIpbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cbiAgICAgICAgaWYoIWNvbG9yTW9kdWxlKWNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cbiAgICAgICAgaWYoIXNpemVNb2R1bGUpc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiQWNjb3VudCBJbmZvc1wiLz4sXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIFByb2ZpbGVcbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFByb2ZpbGVWYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIFN0YXRpc3RpY3NcbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFN0YXRpc3RpY3MoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgU2Vzc2lvbnNcbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFNlc3Npb25WYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxuICAgICAgICAgICAgPC9kaXY+LFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+XG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBnZXRTZXNzaW9uVmFsdWUoKXtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnMgPSBPYmplY3Qua2V5cyhzZXNzaW9uc1JhdykuZmlsdGVyKGUgPT4gZSAhPT0gXCJhbGxcIikubWFwKGUgPT4gc2Vzc2lvbnNSYXdbZV0pXG5cbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzZXNzaW9ucy5tYXAoZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XG4rIG9zOiAke2UuY2xpZW50SW5mby5vc1swXS50b1VwcGVyQ2FzZSgpK2UuY2xpZW50SW5mby5vcy5zbGljZSgxKX1cbisgY2xpZW50OiAke2UuY2xpZW50SW5mby5jbGllbnR9XG4rIHN0YXR1czogJHtlLnN0YXR1c31cbisgQWN0aXZpdGllczogJHtlLmFjdGl2aXRpZXMubGVuZ3RofWBcbiAgICAgICAgfSkuam9pbihcIlxcblwiK1wiLVwiLnJlcGVhdCgzOCkrXCJcXG5cIilcbiAgICB9XG5cbiAgICBnZXRQcm9maWxlVmFsdWUoKXtcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZ2V0Q3VycmVudFVzZXIoKVxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBjcmVhdGVkQXQgPSB1c2VyLmNyZWF0ZWRBdFxuXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xuICAgICAgICAgICAgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwoXCJnaWZcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGF2YXRhclVSTC5zdGFydHNXaXRoKFwiL1wiKSl7XG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBcImh0dHBzOi8vZGlzY29yZC5jb21cIithdmF0YXJVUkxcbiAgICAgICAgfVxuICAgICAgICBpZihhdmF0YXJVUkwuZW5kc1dpdGgoXCI/c2l6ZT0xMjhcIikpe1xuICAgICAgICAgICAgYXZhdGFyVVJMID0gYXZhdGFyVVJMLnJlcGxhY2UoXCI/c2l6ZT0xMjhcIiwgXCI/c2l6ZT00MDk2XCIpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCsgVXNlcm5hbWU6ICR7dXNlci51c2VybmFtZX1cbisgRGlzY3JpbWluYXRvcjogJHt1c2VyLmRpc2NyaW1pbmF0b3J9XG4rIFRhZzogJHt1c2VyLnRhZ31cbisgSUQ6ICR7dXNlci5pZH1cbisgQXZhdGFyOiAke3VzZXIuYXZhdGFyfVxuKyBBdmF0YXIgVVJMOiAke2F2YXRhclVSTH1cbisgQ3JlYXRpb24gRGF0ZTogJHsoY3JlYXRlZEF0LmdldERhdGUoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9ICR7Y3JlYXRlZEF0LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9aCAke2NyZWF0ZWRBdC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9bWluICR7Y3JlYXRlZEF0LmdldFNlY29uZHMoKX1zXG4rIEZsYWdzOiAke3VzZXIuZmxhZ3N9XG4rIEhhcyBOaXRybzogJHt1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24gPyBcIlllc1wiIDogXCJOb1wifVxuLSBFbWFpbDogJHt1c2VyLmVtYWlsfVxuLSAyRkE6ICR7dXNlci5tZmFFbmFibGVkID8gXCJZZXNcIiA6IFwiTm9cIn1cbi0gSGFzIEJlZW4gT24gTW9iaWxlOiAke3VzZXIubW9iaWxlID8gXCJZZXNcIiA6IFwiTm9cIn1cbi0gUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cbi0gVmVyaWZpZWQ6ICR7dXNlci52ZXJpZmllZH1cbi0gQ2FuIFNlZSBOU0ZXIENoYW5uZWxzOiAke3VzZXIubnNmd0FsbG93ZWR9YDtcbiAgICB9XG5cbiAgICBnZXRTdGF0aXN0aWNzKCl7XG5cbiAgICAgICAgY29uc3QgZ3VpbGRzID0gT2JqZWN0LnZhbHVlcyhHdWlsZE1vZHVsZS5nZXRHdWlsZHMoKSlcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcbiAgICAgICAgY29uc3QgZnJpZW5kcyA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNGcmllbmQoZSkpXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzQmxvY2tlZChlKSlcblxuICAgICAgICByZXR1cm4gYCsgU2VydmVyIENvdW50OiAke2d1aWxkcy5sZW5ndGh9IHNlcnZlcnNcbisgUmVsYXRpb25zOiAke3JlbGF0aW9ucy5sZW5ndGh9IHJlbGF0aW9uc1xuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXG4tIEJsb2NrZWQgVXNlcnMgQ291bnQ6ICR7YmxvY2tlZC5sZW5ndGh9IGJsb2NrZWQgdXNlcnNgXG4gICAgfVxufVxuXG5cbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXG5sZXQgbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXG5sZXQgbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cblxuY2xhc3MgQ29kZUNvbnRlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpe1xuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMiltZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxuICAgICAgICBpZighc2Nyb2xsYmFyTW9kdWxlMSlzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5saXN0TGFuZ3VhZ2VzKVswXVxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake21lc3NhZ2VNb2R1bGUxLm1hcmt1cH0gJHttZXNzYWdlTW9kdWxlMi5tZXNzYWdlQ29udGVudH1gfT5cbiAgICAgICAgICAgIDxwcmU+XG4gICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9e2Ake3Njcm9sbGJhck1vZHVsZTEuc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gaGxqc2B9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBoaWdodGxpZ2h0SlMuaGlnaGxpZ2h0KHRoaXMucHJvcHMubGFuZ3VhZ2UsIHRoaXMucHJvcHMuY29udGVudCkudmFsdWV9fT5cblxuICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9PjwvZGl2PlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufSIsIi8vIEdvb2QgbHVjayB0byByZWFkIG15IGNvZGUsIEV2ZW4gbWUgY2FuJ3QgcmVhZCBpdCBwcm9wZXJseS5cblxuaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJmc1wiXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIlxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIlxuXG5sZXQgZm9ybU1vZHVsZVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpUHJldmlldyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHN0YXRlczogW11cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBpZighZm9ybU1vZHVsZSlmb3JtTW9kdWxlID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuRm9ybVNlY3Rpb24pXG4gICAgICAgIC8qKiBcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9uW119XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzID0gWy4uLm5ldyBTZXQoT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cykubWFwKGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV0pLm1hcChrID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1ba10pXG4gICAgICAgIH0pLmZsYXQoKSldXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtU2VjdGlvbiB0YWc9XCJoMlwiIHRpdGxlPVwiTGlnaHRjb3JkJ3MgQXBpIEF2YWlsbGFibGUgY29tcG9uZW50c1wiPlxuICAgICAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1UZXh0IHR5cGU9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cIlwiIHNlbGVjdGFibGU9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tcG9uZW50cyBhcmUgaGVyZSBmb3IgdGhlIHBsdWdpbiBkZXZzLiBUaGV5IGNhbiBxdWlja2x5IGVtYmVkIGFueSBjb21wb25lbnQgYmVsb3cgd2l0aCB0aGlzIHBhbmVsLlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luVG9wOiBcIjIwcHhcIn19PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImluZm9cIj5BbGwgdGhlc2UgY29tcG9uZW50cyBoYXZlIGVycm9yIGhhbmRsaW5nLiBJZiB5b3Ugd2FudCBub25lLCBhZGQgYC5vcmlnaW5hbGAgYWZ0ZXIgdGhlIGNvbXBvbmVudCBwYXRoLjwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPldlIGRvIG5vdCByZWNvbW1lbmQgbW9kaWZ5aW5nIHRoZXNlIGNvbXBvbmVudCB3aXRoIHBsdWdpbnMuIE9ubHkgZG8gdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cbiAgICAgICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVRleHQ+XG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcD48L01hcmdpblRvcD5cbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gY29sb3I9XCJicmFuZFwiIGxvb2s9XCJvdXRsaW5lZFwiIHNpemU9XCJtZWRpdW1cIiBob3ZlckNvbG9yPVwiZ3JlZW5cIiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL2xpZ2h0Y29yZC5kZXJva3UueHl6L0xpZ2h0Y29yZEFwaS9kb2NzXCIpXG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cbiAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtU2VjdGlvbj4sXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wTmFtZSA9IGNvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7T2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cykuZmluZChlID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1bY29tcE5hbWVdKX0uJHtjb21wTmFtZX1gXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxDb21wb25lbnRQcmV2aWV3IGtleT17Y29tcFBhdGh9IGNvbXA9e2NvbXB9IC8+XG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfVxuXG4gICAgZ2V0IHJlbmRlcnMoKXtcblxuICAgIH1cbn1cblxuY2xhc3MgQ29tcG9uZW50UHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHRhYjogXCJwcmV2aWV3XCIsXG4gICAgICAgICAgICBlbGVtOiBwcm9wcy5jb21wLFxuICAgICAgICAgICAgb3B0aW9uczoge31cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5wcm9wcy5jb21wXG4gICAgICAgIGxldCBBbGxQcmV2aWV3cyA9IFtdXG4gICAgICAgIGlmKGNvbXAuQWxsUHJldmlld3MpQWxsUHJldmlld3MgPSBjb21wLkFsbFByZXZpZXdzXG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcbiAgICAgICAgbGV0IGdldFByb3BzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpbmFsID0ge31cbiAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbmFsW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV0gPSBjYXRlZ29yeVswXVtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbmFsW2tleV0gPSBBbGxQcmV2aWV3cy5maW5kKGUgPT4gZS5maW5kKGUgPT4gZVtrZXldKSlbc3RhdGUub3B0aW9uc1trZXldXVtrZXldXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbmRlclByZXZpZXcgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxuICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJDb2RlID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMjBweFwifX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICBKU1hcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkVycm9yQ2F0Y2hlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5Db2RlQmxvY2sgbGFuZ3VhZ2U9XCJqc3hcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJqc3hcIil9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPiAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdFxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzXCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwicmVhY3RcIil9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBsZXQgZ2V0U3RyRm9yUHJvcCA9ICh2YWx1ZSwgY29tcFBhdGgsIGxhbmcpID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGlmKHZhbHVlICYmIHZhbHVlLiQkdHlwZW9mICYmICh2YWx1ZS4kJHR5cGVvZiA9PT0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgfHwgdmFsdWUuJCR0eXBlb2YgPT09IDB4ZWFjNykpe1xuICAgICAgICAgICAgICAgICAgICBpZihjb21wUGF0aCA9PT0gXCJMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XG5tYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXG59fSxcblJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XG5iYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsXG5wYWRkaW5nOiBcIjMwcHggMzBweFwiLFxuYm9yZGVyUmFkaXVzOiBcIjhweFwiXG59LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZSwgbnVsbCwgXCJQcmV2aWV3IHRhYnNcIilcbilcbilgXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcImpzeFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgc3R5bGU9e3tcbm1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcbn19PlxuPGRpdiBzdHlsZT17e1xuICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXG4gICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXG4gICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXG59fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxuICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5QcmV2aWV3IHRhYnM8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlxuPC9kaXY+XG48L2Rpdj5gXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91ciBjb21wb25lbnRzIGhlcmUuXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgICBcIilcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGdlbmVyYXRlQ29kZSA9IGZ1bmN0aW9uKGxhbmcpeyAvLyBjb2RlIGZvcm1hdHRpbmcgaXMgaGFyZFxuICAgICAgICAgICAgY29uc3QgY29tcE5hbWUgPSBjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZVxuICAgICAgICAgICAgbGV0IGNhdGVnb3JpZXMgPSBPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKVxuICAgICAgICAgICAgY29uc3QgY29tcENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pXG4gICAgICAgICAgICBjb25zdCBjb21wUGF0aCA9IGBMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuJHtjb21wQ2F0ZWdvcnl9LiR7Y29tcE5hbWV9YFxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZXRQcm9wcygpXG5cbiAgICAgICAgICAgIGlmKGxhbmcgPT09IFwianN4XCIpe1xuICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuUHJvcCA9IG51bGxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJjaGlsZHJlblwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuUHJvcCA9IGdldFN0ckZvclByb3AocHJvcHNba2V5XSwgY29tcFBhdGgsIGxhbmcpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IGtleStcIj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb3BzW2tleV0gPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGB7JHtnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKX19YFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGxldCBvcGVuVGFnXG4gICAgICAgICAgICAgICAgaWYoY2hpbGRyZW5Qcm9wKXtcbiAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0+YFxuICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VUYWcgPSBgPC8ke2NvbXBQYXRofT5gXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtvcGVuVGFnfVxcbiAgICAke2NoaWxkcmVuUHJvcH1cXG4ke2Nsb3NlVGFnfWBcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0vPmBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW5UYWdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcInJlYWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuIHx8IG51bGxcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZihjaGlsZHJlbiAmJiBjaGlsZHJlbi4kJHR5cGVvZiAmJiAoY2hpbGRyZW4uJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IGNoaWxkcmVuLiQkdHlwZW9mID09PSAweGVhYzcpKXtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBnZXRTdHJGb3JQcm9wKGNoaWxkcmVuLCBjb21wUGF0aCwgbGFuZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmlzaWJsZUtleSA9IC9bXlxcd1xcZF9dL2cudGVzdChrZXkpID8gSlNPTi5zdHJpbmdpZnkoa2V5KSA6IGtleVxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gdmlzaWJsZUtleStcIjogXCJcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByb3BzW2tleV0gPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGdldFN0ckZvclByb3AocHJvcHNba2V5XSwgY29tcFBhdGgsIGxhbmcpLnNwbGl0KFwiXFxuXCIpLm1hcCgoc3RyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PT0gMClyZXR1cm4gc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiICAgIFwiICsgc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBsZXQgcHJvcE9iamVjdCA9IFwie1wiXG4gICAgICAgICAgICAgICAgaWYocHJvcFN0cmluZ3MubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MuZm9yRWFjaCgoc3RyLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gaSA9PT0gcHJvcFN0cmluZ3MubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBpID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaXNGaXJzdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIixcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIlxcbiAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBzdHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzTGFzdCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPVwiXFxufVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJ9XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuRGF0YSA9IHR5cGVvZiBjaGlsZHJlbiA9PT0gXCJzdHJpbmdcIiAmJiBjaGlsZHJlbi5zdGFydHNXaXRoKFwiUmVhY3QuY3JlYXRlRWxlbWVudFwiKSA/IGNoaWxkcmVuIDogSlNPTi5zdHJpbmdpZnkoY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KCR7Y29tcFBhdGh9LCAke3Byb3BPYmplY3R9LCAke2NoaWxkcmVuRGF0YX0pYFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBoZWxwID0gY29tcC5oZWxwIHx8IHt9XG4gICAgICAgIGxldCBpbmZvID0gaGVscC5pbmZvID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPlxuICAgICAgICAgICAge2hlbHAuaW5mb31cbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxuICAgICAgICBsZXQgd2FybiA9IGhlbHAud2FybiA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5cbiAgICAgICAgICAgIHtoZWxwLndhcm59XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgbGV0IGRhbmdlciA9IGhlbHAuZGFuZ2VyID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZGFuZ2VyXCI+XG4gICAgICAgICAgICB7aGVscC5kYW5nZXJ9XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgbGV0IGVycm9yID0gaGVscC5lcnJvciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImVycm9yXCI+XG4gICAgICAgICAgICB7aGVscC5lcnJvcn1cbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxuICAgICAgICBsZXQgc3VjY2VzcyA9IGhlbHAuc3VjY2VzcyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cInN1Y2Nlc3NcIj5cbiAgICAgICAgICAgIHtoZWxwLnN1Y2Nlc3N9XG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcbiAgICAgICAgcmV0dXJuICg8ZGl2PlxuICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nc1RpdGxlPlxuICAgICAgICAgICAgICAgIHtjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZX1cbiAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XG4gICAgICAgICAgICB7aW5mb31cbiAgICAgICAgICAgIHtzdWNjZXNzfVxuICAgICAgICAgICAge3dhcm59XG4gICAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgICAgICB7ZGFuZ2VyfVxuICAgICAgICAgICAge0FsbFByZXZpZXdzLm1hcChjYXRlZ29yeSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0ub25DbGljaylyZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLnRleHQpcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5jaGlsZHJlbilyZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5Lmxlbmd0aCA9PT0gMSlyZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtrZXl9XG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT4sXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biBvcHRpb25zPXtjYXRlZ29yeS5tYXAoKGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdC1cIitpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogSlNPTi5zdHJpbmdpZnkoZVtPYmplY3Qua2V5cyhlKVswXV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pfSB2YWx1ZT17XCJvcHQtXCIrKHN0YXRlLm9wdGlvbnNba2V5XSB8fCBcIjBcIil9IG9uQ2hhbmdlPXsodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLm9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleV06ICh2YWx1ZS52YWx1ZSB8fCBcIjBcIikucmVwbGFjZShcIm9wdC1cIiwgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfX0gc2VhcmNoYWJsZT17dHJ1ZX0vPixcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXG4gICAgICAgICAgICAgICAgYWN0aXZlPXtzdGF0ZS50YWJ9IGNoaWxkcmVuPXtzdGF0ZS50YWIgPT09IFwicHJldmlld1wiID8gcmVuZGVyUHJldmlldygpIDogcmVuZGVyQ29kZSgpfSBvbkNoYW5nZT17KHRhYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH19Lz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcblxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCIuL2ljb25zL2RlbGV0ZVwiO1xuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XG5pbXBvcnQgeyBwcm9jZXNzRmlsZSB9IGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbkNlcnRpZmllclwiO1xuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1BsdWdpbkNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgIHRoaXMuc2V0dGluZ3NQYW5lbCA9IFwiXCI7XG5cbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVsZXRlID0gdGhpcy5kZWxldGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuZW5hYmxlZCxcbiAgICAgICAgICAgIHNldHRpbmdzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXG4gICAgICAgICAgICB0cnVzdGVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNob3dTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKCFjb250YWluZXIpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihgQ29udGFpbmVyIGlzIHVuZGVmaW5lZC5gKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgY29uc3QgZUJvdHRvbSA9IGVUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZSA9IHRoaXMucmVmcy5jYXJkTm9kZTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCJkaXZbY2xhc3MqPVxcXCJjb250ZW50UmVnaW9uU2Nyb2xsZXItXFxcIl1cIilcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyLCB0aGlzTm9kZSkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlT2Zmc2V0ID0gRE9NLm9mZnNldCh0aGlzTm9kZSk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXNOb2RlT2Zmc2V0LnRvcCAtIGNvbnRhaW5lck9mZnNldC50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wIC0gMzA7XG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCAtIChwcm9ncmVzcyAqIChvcmlnaW5hbCAtIGVuZFBvaW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxuXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkIGJkLWFkZG9uLWNhcmQgc2V0dGluZ3Mtb3BlbiB1aS1zd2l0Y2gtaXRlbVwiLCByZWY6IFwiY2FyZE5vZGVcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nczogZmFsc2V9KTtcbiAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFhTdmcsIG51bGwpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCAhPT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIiwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtfX2h0bWw6IHRoaXMuc2V0dGluZ3NQYW5lbH19KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKSB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVtuYW1lSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJuYW1lIGJkYS1uYW1lXCJ9LCBuYW1lKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJ2ZXJzaW9uIGJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcbiAgICAgICAgY29uc3QgYXV0aG9ySW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3thdXRob3J9fVwiKTtcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImF1dGhvciBiZGEtYXV0aG9yXCJ9O1xuICAgICAgICAgICAgaWYgKGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCkge1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XG4gICAgICAgICAgICAgICAgcHJvcHMudGFyZ2V0ID0gXCJfYmxhbmtcIjtcblxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xuICAgICAgICAgICAgICAgIGlmIChhdXRob3IuaWQpIHByb3BzLm9uQ2xpY2sgPSAoKSA9PiB7QkRWMi5MYXllclN0YWNrLnBvcExheWVyKCk7IEJEVjIub3BlbkRNKGF1dGhvci5pZCk7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGl0bGUuZmxhdCgpO1xuICAgIH1cblxuICAgIG1ha2VMaW5rKHRpdGxlLCB1cmwpIHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcbiAgICAgICAgaWYgKHR5cGVvZih1cmwpID09IFwic3RyaW5nXCIpIHByb3BzLmhyZWYgPSB1cmw7XG4gICAgICAgIGlmICh0eXBlb2YodXJsKSA9PSBcImZ1bmN0aW9uXCIpIHByb3BzLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHtldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdXJsKCk7fTtcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcbiAgICB9XG5cbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgY29sb3I9XCJibGFja1wiIHNpZGU9XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWJ1dHRvblwiIG9uQ2xpY2s9e2FjdGlvbn0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICB0aGlzLnVubW91bnRlZCA9IHRydWVcbiAgICB9XG5cbiAgICBnZXQgbGlua3MoKSB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gW107XG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcbiAgICAgICAgaWYgKGFkZG9uLndlYnNpdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIldlYnNpdGVcIiwgYWRkb24ud2Vic2l0ZSkpO1xuICAgICAgICBpZiAoYWRkb24uc291cmNlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJTb3VyY2VcIiwgYWRkb24uc291cmNlKSk7XG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcbiAgICAgICAgICAgIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlN1cHBvcnQgU2VydmVyXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ZXIgPSAvXFwuZ2dcXC8oLiopJC87XG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XG4gICAgICAgICAgICAgICAgaWYgKHRlc3Rlci50ZXN0KGNvZGUpKSBjb2RlID0gY29kZS5tYXRjaCh0ZXN0ZXIpWzFdO1xuICAgICAgICAgICAgICAgIEJEVjIuTGF5ZXJTdGFjay5wb3BMYXllcigpO1xuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcbiAgICAgICAgaWYgKGFkZG9uLnBhdHJlb24pIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlBhdHJlb25cIiwgYWRkb24ucGF0cmVvbikpO1xuICAgICAgICByZXR1cm4gbGlua3M7XG4gICAgfVxuXG4gICAgZ2V0IGZvb3RlcigpIHtcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xuICAgICAgICByZXR1cm4gKGxpbmtzLmxlbmd0aCB8fCB0aGlzLmhhc1NldHRpbmdzKSAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLWZvb3RlciBiZGEtZm9vdGVyXCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWxpbmtzIGJkYS1saW5rc1wifSxcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtvbkNsaWNrOiB0aGlzLnNob3dTZXR0aW5ncywgY2xhc3NOYW1lOiBcImJkLWJ1dHRvbiBiZGEtc2V0dGluZ3MtYnV0dG9uXCIsIGRpc2FibGVkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSwgXCJTZXR0aW5nc1wiKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnByb3BzLnRvZ2dsZSAmJiB0aGlzLnByb3BzLnRvZ2dsZSh0aGlzLm5hbWUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XG4gICAgfVxuXG4gICAgZWRpdCgpIHt0aGlzLnByb3BzLmVkaXQodGhpcy5uYW1lKTt9XG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxuICAgIHJlbG9hZCgpIHt0aGlzLnByb3BzLnJlbG9hZCh0aGlzLm5hbWUpO31cblxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxuICAgIGdldCBhdXRob3IoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiB0aGlzLnByb3BzLmFkZG9uLmF1dGhvcik7fVxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogdGhpcy5wcm9wcy5hZGRvbi5kZXNjcmlwdGlvbik7fVxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgIGNvbnN0IHthdXRob3JJZCwgYXV0aG9yTGlua30gPSB0aGlzLnByb3BzLmFkZG9uO1xuXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xuICAgICAgICAgICAgaWYoIXRoaXMuaXNTY2FubmluZyl7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHJlc29sdmUodGhpcy5wcm9wcy5hZGRvbi5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgPyBjb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCB0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lKSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnVubW91bnRlZClyZXR1cm5cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RydXN0ZWQ6IHJlc3VsdC5zdXNwZWN0ID8gXCJzdXNwZWN0XCIgOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgKCkgPT4ge30pXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcInJnYigyNDAsIDcxLCA3MSlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24taGVhZGVyIGJkYS1oZWFkZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtdGl0bGUgYmRhLWhlYWRlci10aXRsZVwifSwgdGhpcy5idWlsZFRpdGxlKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB7bmFtZTogdGhpcy5hdXRob3IsIGlkOiBhdXRob3JJZCwgbGluazogYXV0aG9yTGlua30pKSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5lZGl0ICYmIHRoaXMubWFrZUJ1dHRvbihcIkVkaXRcIiwgPEVkaXRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5lZGl0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVtb3ZlICYmIHRoaXMubWFrZUJ1dHRvbihcIkRlbGV0ZVwiLCA8RGVsZXRlSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMuZGVsZXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlci13cmFwIGJkYS1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwifSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlciBiZC1hZGRvbi1kZXNjcmlwdGlvbiBiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIHRoaXMuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy5mb290ZXJcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xuaW1wb3J0IENvbnRlbnRDb2x1bW4gZnJvbSBcIi4vY29udGVudENvbHVtblwiO1xuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4vcmVsb2FkSWNvblwiO1xuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XG5pbXBvcnQgU2VhcmNoIGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoXCI7XG5cbmltcG9ydCB7c2V0dGluZ3NDb29raWUsIHBsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4uL21vZHVsZXMvYmRBcGlcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XG5pbXBvcnQgYmRFdmVudHMgZnJvbSBcIi4uL21vZHVsZXMvYmRFdmVudHNcIjtcbmltcG9ydCBFbXVsYXRlZFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xuXG5jb25zdCBUb29sdGlwID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcmRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XG4gICAgICAgIHRoaXMuY29va2llID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Db29raWUgOiB0aGVtZUNvb2tpZTtcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Nb2R1bGUgOiB0aGVtZU1vZHVsZTtcblxuICAgICAgICB0aGlzLnNvcnQgPSB0aGlzLnNvcnQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSB0aGlzLm9uQWRkb25DaGFuZ2VzLmJpbmQodGhpcylcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgICAgICBjb25zdCB0eXBlID0gKHRoaXMuaXNQbHVnaW5zID8gXCJwbHVnaW5cIiA6IFwidGhlbWVcIikgKyBcIi1cIlxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXJlbG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICBjb25zdCB0eXBlID0gKHRoaXMuaXNQbHVnaW5zID8gXCJwbHVnaW5cIiA6IFwidGhlbWVcIikgKyBcIi1cIlxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX11bmxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXJlbG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcbiAgICB9XG5cbiAgICBvcGVuRm9sZGVyKCkge1xuICAgICAgICBjb25zdCBzaGVsbCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbDtcbiAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5QYXRoIHx8IHNoZWxsLm9wZW5JdGVtO1xuICAgICAgICBvcGVuKHRoaXMuaXNQbHVnaW5zID8gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciA6IENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcik7XG4gICAgfVxuXG4gICAgZWRpdChuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xuICAgICAgICBjb25zdCBzaG91bGREZWxldGUgPSBhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGUobmFtZSk7XG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XG4gICAgfVxuXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIEJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSBZb3UgU3VyZT9cIiwgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtuYW1lfT9gLCB7XG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7bGFiZWw6IFwiTmFtZVwiLCB2YWx1ZTogXCJuYW1lXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIkF1dGhvclwiLCB2YWx1ZTogXCJhdXRob3JcIn0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIlJlY2VudGx5IEFkZGVkXCIsIHZhbHVlOiBcImFkZGVkXCJ9LFxuICAgICAgICAgICAge2xhYmVsOiBcIkxhc3QgTW9kaWZpZWRcIiwgdmFsdWU6IFwibW9kaWZpZWRcIn0sXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IGRpcmVjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcbiAgICAgICAgICAgIHtsYWJlbDogXCJEZXNjZW5kaW5nXCIsIHZhbHVlOiBmYWxzZX1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICByZXZlcnNlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcbiAgICB9XG5cbiAgICBzb3J0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NvcnQ6IHZhbHVlfSk7XG4gICAgfVxuXG4gICAgc2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xuICAgIH1cblxuICAgIGdldFByb3BzKGFkZG9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IHRoaXMuZ2V0TmFtZShhZGRvbiksXG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvb2tpZVt0aGlzLmdldE5hbWUoYWRkb24pXSxcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXG4gICAgICAgICAgICBlZGl0OiBzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtN1wiXSA/IHRoaXMuZWRpdC5iaW5kKHRoaXMpIDogbnVsbCxcbiAgICAgICAgICAgIHJlbW92ZTogdGhpcy5kZWxldGUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcbiAgICAgICAgICAgIGhhc2g6IGFkZG9uLmhhc2hcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBnZXQgbGlzdCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50eXBlID09PSBcInBsdWdpbnNcIiA/IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKSA6IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpO1xuICAgIH1cblxuICAgIGdldEFkZG9ucygpIHtcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IHRoaXMuc3RhdGUuc29ydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoaXMuc3RhdGUuc29ydC5zbGljZSgxKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYS5wbHVnaW4gJiYgYS5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYS5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpIDogdGhpcy5nZXRTdHJpbmcoYVt0aGlzLnN0YXRlLnNvcnRdKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGIucGx1Z2luICYmIGIucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGIucGx1Z2luW2BnZXQke2NhcH1gXSgpKSAgOiB0aGlzLmdldFN0cmluZyhiW3RoaXMuc3RhdGUuc29ydF0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAoZmlyc3QgPiBzZWNvbmQpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gW107XG4gICAgICAgIGZvciAobGV0IGEgPSAwOyBhIDwgc29ydGVkQWRkb25zLmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHNvcnRlZEFkZG9uc1thXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoYWRkb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0QXV0aG9yKGFkZG9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMuZ2V0RGVzY3JpcHRpb24oYWRkb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oYWRkb24pO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lKSBtYXRjaGVzID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xuICAgICAgICAgICAgICAgIGlmIChhdXRob3IpIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGF1dGhvci50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgdmVyc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoYWRkb24pO1xuICAgICAgICAgICAgcmVuZGVyZWQucHVzaCg8RXJyb3JCb3VuZGFyeT48QWRkb25DYXJkIHsuLi5wcm9wc30gcmVsb2FkPXshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgdGhpcy5tYW5hZ2VyLnJlbG9hZC5iaW5kKHRoaXMubWFuYWdlcil9IC8+PC9FcnJvckJvdW5kYXJ5Pik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkO1xuICAgIH1cblxuICAgIGdldE5hbWUoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IGFkZG9uLm5hbWUpO31cbiAgICBnZXRBdXRob3IoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldEF1dGhvcigpIDogYWRkb24uYXV0aG9yKTt9XG4gICAgZ2V0RGVzY3JpcHRpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiBhZGRvbi5kZXNjcmlwdGlvbik7fVxuICAgIGdldFZlcnNpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IGFkZG9uLnZlcnNpb24pO31cblxuICAgIHJlbmRlckNoZWNrVXBkYXRlcygpe1xuICAgICAgICBpZighd2luZG93LlplcmVzUGx1Z2luTGlicmFyeSlyZXR1cm4gbnVsbFxuICAgICAgICBpZighd2luZG93LlBsdWdpblVwZGF0ZXMpcmV0dXJuIG51bGxcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsICE9PSBcImZ1bmN0aW9uXCIpcmV0dXJuIG51bGxcbiAgICAgICAgaWYoIXRoaXMuaXNQbHVnaW5zKXJldHVybiBudWxsXG5cbiAgICAgICAgbGV0IHRvb2x0aXBJc1Nob3dpbmcgPSBmYWxzZVxuICAgICAgICBsZXQgdG9vbHRpcFxuICAgICAgICByZXR1cm4gPFRvb2x0aXBXcmFwIHRleHQ9XCJDaGVja3MgZm9yIHVwZGF0ZXMgb2YgcGx1Z2lucyB0aGF0IHN1cHBvcnQgdGhpcyBmZWF0dXJlLiBSaWdodC1jbGljayBmb3IgYSBsaXN0LlwiPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjEwcHhcIn19IG9uTW91c2VMZWF2ZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0b29sdGlwSXNTaG93aW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC5oaWRlKClcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gcmVmPVwiY2hlY2tVcGRhdGVCdXR0b25cIiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBpbiBwcm9ncmVzcy5cIiwge3R5cGU6IFwiaW5mb1wifSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGNvbXBsZXRlLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0gZGlzYWJsZWQ9e2ZhbHNlfSBvblJpZ2h0Q2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIXRoaXMucmVmcy5jaGVja1VwZGF0ZUJ1dHRvbilyZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuUGx1Z2luVXBkYXRlcyB8fCAhd2luZG93LlBsdWdpblVwZGF0ZXMucGx1Z2lucykgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZih0b29sdGlwSXNTaG93aW5nKXJldHVyblxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwID0gbmV3IEVtdWxhdGVkVG9vbHRpcCh0aGlzLnJlZnMuY2hlY2tVcGRhdGVCdXR0b24ucmVmcy5vcmlnaW5hbC5yZWZzLmJ1dHRvbiwgT2JqZWN0LnZhbHVlcyh3aW5kb3cuUGx1Z2luVXBkYXRlcy5wbHVnaW5zKS5tYXAocCA9PiBwLm5hbWUpLmpvaW4oXCIsIFwiKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogXCJib3R0b21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaEV2ZW50czogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC5zaG93KClcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcElzU2hvd2luZyA9IHRydWVcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIFVwZGF0ZXNcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L1Rvb2x0aXBXcmFwPlxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaEljb24gPSA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PVwiUmVsb2FkIExpc3RcIj5cbiAgICAgICAgICAgIHsocHJvcHMpID0+IFxuICAgICAgICAgICAgPFJlbG9hZEljb24gey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1pY29uIGJkLXJlbG9hZCBiZC1yZWxvYWQtaGVhZGVyXCIgc2l6ZT1cIjE4cHhcIiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5zKSBwbHVnaW5Nb2R1bGUudXBkYXRlUGx1Z2luTGlzdCgpO1xuICAgICAgICAgICAgICAgIGVsc2UgdGhlbWVNb2R1bGUudXBkYXRlVGhlbWVMaXN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfX0gLz5cbiAgICAgICAgICAgIH08L1Rvb2x0aXA+O1xuICAgICAgICBjb25zdCBhZGRvbkNhcmRzID0gdGhpcy5nZXRBZGRvbnMoKTtcblxuICAgICAgICByZXR1cm4gPENvbnRlbnRDb2x1bW4gdGl0bGU9e2Ake3RoaXMucHJvcHMudHlwZS50b1VwcGVyQ2FzZSgpfeKAlCR7YWRkb25DYXJkcy5sZW5ndGh9YH0+XG4gICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24ga2V5PVwiZm9sZGVyLWJ1dHRvblwiIGNvbG9yPVwiYnJhbmRcIiBcbiAgICAgICAgICAgICAgICBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17dGhpcy5vcGVuRm9sZGVyLmJpbmQodGhpcyl9IHdyYXBwZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiMTBweFwiXG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgT3BlbiB7dGhpcy5pc1BsdWdpbnMgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwifSBGb2xkZXJcbiAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJDaGVja1VwZGF0ZXMoKX1cbiAgICAgICAgICAgIHshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgcmVmcmVzaEljb259XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNvbnRyb2xzIGJkLWFkZG9uLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7dGhpcy5wcm9wcy50eXBlfS4uLmB9IC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+U29ydCBieTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+T3JkZXI6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXt0aGlzLmRpcmVjdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnJldmVyc2V9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLXNsaXN0IGJkLWFkZG9uLWxpc3RcIj57YWRkb25DYXJkc308L2Rpdj5cbiAgICAgICAgPC9Db250ZW50Q29sdW1uPlxuICAgIH1cbn1cblxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDYXJkTGlzdC5wcm90b3R5cGUucmVuZGVyO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KENhcmRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXG59KTsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCRExvZ28gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge2hlaWdodDogXCIxMDAlXCIsIHdpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7ZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIn0sIHZpZXdCb3g6IFwiMCAwIDIwMDAgMjAwMFwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcIm1ldGFkYXRhXCIsIG51bGwpLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MVwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMjBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MlwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTVcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgyNTUsMjU1LDI1NSwwLjE1KVwifSkpLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93M1wifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MylcIn0sIGQ6IFwiTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaXCIsIGZpbGw6IFwiIzE3MTcxN1wiLCBvcGFjaXR5OiBcIjFcIn0pLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MilcIn0sIGQ6IFwiTTE2OTUuNTQrNjMxLjQ0MkMxNjg1Ljg0KzI3OC4wNDIrMTQwOS4zNCsxMzUuNDQyKzEwNTIuOTQrMTM1LjQ0MkwzNjEuNzQrMTM2LjQ0Mkw4MDMuNzQrNDkwLjQ0MkwxMDYwLjc0KzQ5MC40NDJDMTMzNS4yNCs0OTAuNDQyKzEzMzUuMjQrODM1LjM0MisxMDYwLjc0KzgzNS4zNDJMMTA2MC43NCsxMTY0Ljg0QzExNTAuMjIrMTE2NC44NCsxMjEwLjUzKzEyMDEuNDgrMTI0MS42OCsxMjUwLjg3QzEzMDYuMDcrMTM1MysxMjQ1Ljc2KzE1MDkuNjQrMTA2MC43NCsxNTA5LjY0TDM2MS43NCsxODYzLjU0TDEwNTIuOTQrMTg2NC41NEMxNDA5LjI0KzE4NjQuNTQrMTY4NS43NCsxNzIxLjk0KzE2OTUuNTQrMTM2OC41NEMxNjk1LjU0KzEyMDUuOTQrMTY1MS4wNCsxMDg0LjQ0KzE1NzIuNjQrOTk5Ljk0MkMxNjUxLjA0KzkxNS41NDIrMTY5NS41NCs3OTQuMDQyKzE2OTUuNTQrNjMxLjQ0MlpcIiwgZmlsbDogXCIjM0U4MkU1XCIsIG9wYWNpdHk6IFwiMVwifSksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cxKVwifSwgZDogXCJNMTQ2OS4yNSs2MzEuNDQyQzE0NTkuNTUrMjc4LjA0MisxMTgzLjA1KzEzNS40NDIrODI2LjY1KzEzNS40NDJMMTM1LjQ1KzEzNS40NDJMMTM1LjQ1KzEwMDRDMTM1LjQ1KzEwMDQrMTM1LjQyNysxMjU1LjIxKzM1NS42MjYrMTI1NS4yMUM1NzUuODI1KzEyNTUuMjErNTc1Ljg0OCsxMDA0KzU3NS44NDgrMTAwNEw1NzcuNDUrNDkwLjQ0Mkw4MzQuNDUrNDkwLjQ0MkMxMTA4Ljk1KzQ5MC40NDIrMTEwOC45NSs4MzUuMzQyKzgzNC40NSs4MzUuMzQyTDY2NC42NSs4MzUuMzQyTDY2NC42NSsxMTY0Ljg0TDgzNC40NSsxMTY0Ljg0QzkyMy45MzIrMTE2NC44NCs5ODQuMjQ0KzEyMDEuNDgrMTAxNS4zOSsxMjUwLjg3QzEwNzkuNzgrMTM1MysxMDE5LjQ3KzE1MDkuNjQrODM0LjQ1KzE1MDkuNjRMMTM1LjQ1KzE1MDkuNjRMMTM1LjQ1KzE4NjQuNTRMODI2LjY1KzE4NjQuNTRDMTE4Mi45NSsxODY0LjU0KzE0NTkuNDUrMTcyMS45NCsxNDY5LjI1KzEzNjguNTRDMTQ2OS4yNSsxMjA1Ljk0KzE0MjQuNzUrMTA4NC40NCsxMzQ2LjM1Kzk5OS45NDJDMTQyNC43NSs5MTUuNTQyKzE0NjkuMjUrNzk0LjA0MisxNDY5LjI1KzYzMS40NDJaXCIsIGZpbGw6IFwiI0ZGRkZGRlwiLCBvcGFjaXR5OiBcIjFcIn0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19DaGVja2JveCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3ggXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtaW5uZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hJbm5lcilbMF0uY2hlY2tib3hJbm5lcn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3hFbGVtZW50LCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJjaGVja2JveFwifSksXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsICF0aGlzLnN0YXRlLmNoZWNrZWQpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWRcbiAgICAgICAgfSk7XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgQXJyb3cgZnJvbSBcIi4uL2ljb25zL2Rvd25hcnJvd1wiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7b3BlbjogZmFsc2UsIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMub3B0aW9uc1swXS52YWx1ZX07XG4gICAgICAgIHRoaXMuZHJvcGRvd24gPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaG93TWVudSA9IHRoaXMuc2hvd01lbnUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oaWRlTWVudSA9IHRoaXMuaGlkZU1lbnUuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzaG93TWVudShldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiB0cnVlfSwgKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoaWRlTWVudSgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogZmFsc2V9LCAoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWQoKSB7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PSB0aGlzLnN0YXRlLnZhbHVlKTt9XG5cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtb3B0aW9uc1wiPlxuICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAob3B0ID0+IFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0LW9wdGlvbiR7c2VsZWN0ZWQudmFsdWUgPT0gb3B0LnZhbHVlID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YH0gb25DbGljaz17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIG9wdC52YWx1ZSl9PntvcHQubGFiZWx9PC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGUgPT0gXCJ0cmFuc3BhcmVudFwiID8gXCIgYmQtc2VsZWN0LXRyYW5zcGFyZW50XCIgOiBcIlwiO1xuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLnN0YXRlLm9wZW4gPyBcIiBtZW51LW9wZW5cIiA6IFwiXCI7XG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cbiAgICAgICAgICAgICAgICA8L2Rpdj47XG4gICAgfVxufVxuXG4vLyByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcFwiPlxuLy8gPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e3RoaXMucHJvcHMubGFiZWx9PC9sYWJlbD5cbi8vIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxuLy8gICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWNvbnRyb2xzXCI+XG4vLyAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XG4vLyAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxuLy8gICAgIDwvZGl2PlxuLy8gPC9kaXY+XG4vLyB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cbi8vIDwvZGl2PjsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBbXCJiZC1zZWFyY2gtd3JhcHBlclwiXVxuICAgICAgICBpZih0aGlzLnN0YXRlLmZvY3VzZWQpY2xhc3NOYW1lLnB1c2goXCJmb2N1c2VkXCIpXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lLmpvaW4oXCIgXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZC1zZWFyY2hcIiBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn0gbWF4TGVuZ3RoPVwiNTBcIiBcbiAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogdHJ1ZX0pXG4gICAgICAgICAgICAgICAgICAgIH19IG9uQmx1cj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogZmFsc2V9KVxuICAgICAgICAgICAgICAgICAgICB9fS8+XG4gICAgICAgICAgICAgICAgICAgIDxTZWFyY2hJY29uIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+O1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge2NoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH07XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3dpdGNoID0gPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuU3dpdGNoIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5zdGF0ZS5jaGVja2VkfSAvPlxuICAgIH1cblxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3dpdGNoXG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Db250ZW50Q29sdW1uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMucHJvcHMudGl0bGUgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHRoaXMucHJvcHMudGl0bGUpIDogbnVsbFxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgICAgIF1cbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4gKyBcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIiwgc3R5bGU6IHtwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19LFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgICAgICk7XG4gICAgfVxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCJcblxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XG5pbXBvcnQgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGZyb20gXCIuL2Nzc0VkaXRvckRldGFjaGVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYucHJvcHMubGluZXMgPSAwO1xuICAgICAgICBzZWxmLnNldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgICBzZWxmLmF0dGFjaCA9IHNlbGYuYXR0YWNoLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYuZGV0YWNoZWRFZGl0b3IgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0Nzc0VkaXRvckRldGFjaGVkLCB7YXR0YWNoOiBzZWxmLmF0dGFjaH0pO1xuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5kZXRhY2ggPSBzZWxmLmRldGFjaC5iaW5kKHNlbGYpO1xuICAgIH1cblxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRldGFjaGVkOiB0aGlzLnByb3BzLmRldGFjaGVkIHx8IEJEVjIuZWRpdG9yRGV0YWNoZWRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3JcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL2Rpc2NvcmRcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAocHJldlN0YXRlLmRldGFjaGVkICYmICFzZWxmLnN0YXRlLmRldGFjaGVkKSB7XG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5kZXRhY2hlZFJvb3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29kZU1pcnJvcigpIHtcbiAgICB9XG5cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgY3NzKCkge1xuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGNjc3MgPSBCdWZmZXIuZnJvbShfY2NzcywgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjY3NzO1xuICAgIH1cblxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICBjb25zdCB7ZGV0YWNoZWR9ID0gc2VsZi5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJFZGl0b3IgRGV0YWNoZWRcIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRhY2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiZGV0YWNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkRldGFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiaGVscC10ZXh0XCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiY29kZVwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCJjdHJsXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiB3aXRoIHRoZSBlZGl0b3IgZm9jdXNlZCB0byBhY2Nlc3MgdGhlIGVkaXRvcidzIHNldHRpbmdzLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBvbkNsaWNrKGFyZykge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc3dpdGNoIChhcmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcbiAgICAgICAgICAgICAgICBzZWxmLmRldGFjaCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xuICAgICAgICAgICAgICAgIFNldHRpbmdzLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQ3NzKCkge1xuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xuICAgIH1cblxuICAgIHNhdmVDc3MoKSB7XG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBCdWZmZXIuZnJvbSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCksIFwidXRmLThcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpO1xuICAgIH1cblxuICAgIGRldGFjaCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRyb290ID0gc2VsZi5kZXRhY2hlZFJvb3Q7XG4gICAgICAgIGlmICghZHJvb3QpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIElOSkVDVCBST09UOiAuYXBwXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNlbGYuZGV0YWNoZWRFZGl0b3IsIGRyb290KTtcbiAgICB9XG5cbiAgICBnZXQgZGV0YWNoZWRSb290KCkge1xuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYgKCFfcm9vdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdERldGFjaGVkUm9vdCgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Jvb3Q7XG4gICAgfVxuXG4gICAgaW5qZWN0RGV0YWNoZWRSb290KCkge1xuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHApKTtcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXR0YWNoKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkZXRhY2hlZDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCJcblxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYudXBkYXRlQ3NzID0gc2VsZi51cGRhdGVDc3MuYmluZChzZWxmKTtcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XG4gICAgICAgIHNlbGYub25DaGFuZ2UgPSBzZWxmLm9uQ2hhbmdlLmJpbmQoc2VsZik7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9kaXNjb3JkXCIpO1xuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XG4gICAgfVxuXG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGNzcygpIHtcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBjY3NzID0gQnVmZmVyLmZyb20oX2Njc3MsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2NzcztcbiAgICB9XG5cbiAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XG4gICAgICAgIGlmICghX3Jvb3QpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcm9vdDtcbiAgICB9XG5cbiAgICBpbmplY3RSb290KCkge1xuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHApKTtcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcbiAgICAgICAgRE9NLmluc2VydEFmdGVyKERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIj5gKSwgYXBwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJkLWRldGFjaGVkLWNzcy1lZGl0b3JcIiwgaWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1lZGl0b3JcIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWlubmVycGFuZVwifSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogc2VsZi5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJhdHRhY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gYXR0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwibGl2ZS11cGRhdGVcIjpcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNsaWNrKGlkKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXR0YWNoXCI6XG4gICAgICAgICAgICAgICAgaWYgKERPTS5xdWVyeShcIiNlZGl0b3ItZGV0YWNoZWRcIikpIHNlbGYucHJvcHMuYXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYucm9vdCk7XG4gICAgICAgICAgICAgICAgc2VsZi5yb290LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQ3NzKCkge1xuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xuICAgIH1cblxuICAgIHNhdmVDc3MoKSB7XG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBCdWZmZXIuZnJvbSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCksIFwidXRmLThcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6IHRydWV9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvcikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInJlYWN0LWVycm9yXCJ9LCBcIkNvbXBvbmVudCBFcnJvclwiKTsgIFxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxuICAgIH1cbn1cblxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBCREVycm9yQm91bmRhcnkucHJvdG90eXBlLnJlbmRlcjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCREVycm9yQm91bmRhcnkucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlbGV0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz47XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG93bkFycm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjEyIDkuMjlMMTIgMTMuMTdsMy44OC0zLjg4Yy4zOS0uMzkgMS4wMi0uMzkgMS40MSAwIC4zOS4zOS4zOSAxLjAyIDAgMS40MWwtNC41OSA0LjU5Yy0uMzkuMzktMS4wMi4zOS0xLjQxIDBMNi43IDEwLjdjLS4zOS0uMzktLjM5LTEuMDIgMC0xLjQxLjM5LS4zOCAxLjAzLS4zOSAxLjQyIDB6XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzelwiIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgICAgICAgICA8L3N2Zz47XG4gICAgfVxufSIsInsvKiA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIndoaXRlXCIgd2lkdGg9XCIxOHB4XCIgaGVpZ2h0PVwiMThweFwiPlxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxuPC9zdmc+ICovfVxuXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE4cHhcIjtcbiAgICAgICAgcmV0dXJuIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6XCIvPlxuICAgICAgICA8L3N2Zz47XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcbiAgICB9XG59IiwibGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpe1xuICAgICAgICBpZighbWFyZ2luTW9kdWxlKW1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xuaW1wb3J0IFYyQ19TZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzR3JvdXBcIjtcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi4vbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2VcIlxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5cbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcblxubGV0IFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxuICAgICAgICAgICAgYXNzZXRzOiBbXVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gbnVsbFxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxuICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cyA9IG5ldyBTZXQoKVxuICAgIH1cblxuICAgIHVwZGF0ZVdoZW5GZXRjaGVkKGNvbXApe1xuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5hZGQoY29tcClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge0lucHV0VGV4dH0gc2V0dGluZyBcbiAgICAgKi9cbiAgICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSl7XG4gICAgICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgdGhpcy5zdGF0ZS5kYXRhLCB7XG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuc3RhdGUuYXNzZXRzXG4gICAgICAgIH0pXG4gICAgICAgIGlmKHNldHRpbmcucHJvcHMuaWQgPT09IFwiYXBwbGljYXRpb25faWRcIil7XG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKVxuICAgIH1cblxuICAgIGZldGNoQXNzZXRzKCl7XG4gICAgICAgIGlmKHRoaXMuaXNmZXRjaGluZyA9PT0gdHJ1ZSl7XG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQgIT09IGFwcCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcbiAgICAgICAgICAgIH0sIDUwMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSB0cnVlXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5mZXRjaEFzc2V0cyh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIGFzc2V0czogT2JqZWN0LmtleXMoYXNzZXRzKS5tYXAoayA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgdXBkYXRlUHJldmlldyhkYXRhKXtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkYXRhXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgcmV0dXJuIFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyB8fCAoVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NHcm91cCB0aXRsZT1cIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiIHNldHRpbmdzPXt0aGlzLnByb3BzLnNldHRpbmdzfSBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0vPixcbiAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz4sXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlJpY2hQcmVzZW5jZVwiLz4sXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHsvKiogb3B0aW9ucyAqL31cbiAgICAgICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29tcG9uZW50c31cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcCAvPlxuICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUHJldmlld1wiLz5cbiAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XG4gICAgICAgICAgICAgICAgPFJwY1ByZXZpZXcgc2V0dGluZ3M9e3RoaXN9Lz5cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PjwvZGl2PixcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17d2luZG93Lm9oZ29kb2hmdWNrfT5cbiAgICAgICAgICAgICAgICBPaCBnb2QgT2ggZnVja1xuICAgICAgICAgICAgPC9idXR0b24+LFxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIilcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIFNlZSA/IEkgcHVsbGVkIGEgbGl0bGUgc25lYWt5IG9uIHlhXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgXVxuICAgIH1cblxuICAgIGdldCBvcHRpb25zQ29tcG9uZW50cygpe1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgfHwgKHRoaXMuX29wdGlvbnNDb21wb25lbnRzID0gUlBDUHJvcHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgaWYoZS50eXBlID09PSBcInRleHRcIil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gWzxJbnB1dE51bWJlciBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPl0vKlxuICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkudW5zaGlmdCg8RGlzY29yZEJ1dHRvbiB0aXRsZT1cIkNvcHkgQ3VycmVudCBUaW1lc3RhbXBcIiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcbiAgICAgICAgICAgICAgICAgICAgfX0gLz4pXG4gICAgICAgICAgICAgICAgfSovXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xuICAgICAgICAgICAgICAgIGlmKFtcImFzc2V0cy5zbWFsbFwiLCBcImFzc2V0cy5sYXJnZVwiXS5pbmNsdWRlcyhlLmlkKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRDaG9pY2Ugc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9IGNob2ljZXM9e1t7dmFsdWU6IFwibm9uZVwiLCBsYWJlbDogXCJObyBhc3NldHNcIn1dLmNvbmNhdCh0aGlzLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSl9Lz5cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgIH1cbn1cbmNvbnN0IFJQQ1Byb3BzID0gW1xuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxuICAgICAgICBpZDogXCJuYW1lXCIsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmRcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJEZXRhaWxzXCIsXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkJyb3dzaW5nIERpc2NvcmRcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJTdGF0ZVwiLFxuICAgICAgICBpZDogXCJzdGF0ZVwiLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkIENsaWVudFwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlRpbWVzdGFtcCBTdGFydFwiLFxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGdldCBwbGFjZWhvbGRlcigpe1xuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJMYXJnZUFzc2V0XCIsXG4gICAgICAgIGlkOiBcImFzc2V0cy5sYXJnZVwiLFxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlNtYWxsQXNzZXRcIixcbiAgICAgICAgaWQ6IFwiYXNzZXRzLnNtYWxsXCIsXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcbiAgICB9LFxuXVxuXG5sZXQgaW5wdXRUZXh0TW9kdWxlc1xuY2xhc3MgSW5wdXRUZXh0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgZ2V0IG1vZHVsZXMoKXtcbiAgICAgICAgaWYoaW5wdXRUZXh0TW9kdWxlcyAmJiBpbnB1dFRleHRNb2R1bGVzWzBdKXJldHVybiBpbnB1dFRleHRNb2R1bGVzXG4gICAgICAgIHJldHVybiBpbnB1dFRleHRNb2R1bGVzID0gW1xuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKVxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgcm93TW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXG4gICAgICAgICAgICBpbnB1dE1vZHVsZSxcbiAgICAgICAgICAgIHNpemVNb2R1bGUyLFxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxuICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxEaXZpZGVyLz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH1cbn1cblxubGV0IElucHV0TnVtYmVyTW9kdWxlc1xuY2xhc3MgSW5wdXROdW1iZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gSW5wdXROdW1iZXJNb2R1bGVzIHx8IChJbnB1dE51bWJlck1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdLFxuICAgICAgICBdKVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IHR5cGU9XCJudW1iZXJcIiBvbkNoYW5nZT17KHZhbHVlLCBuYW1lLCBpbnB1dCkgPT4ge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0rL2csIFwiXCIpXG4gICAgICAgICAgICBpZih2YWx1ZSA9PSB0aGlzLnN0YXRlLmRhdGEpe1xuICAgICAgICAgICAgICAgIGlucHV0LnNldFZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcblxuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgcm93TW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcblxuXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cbiAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxuICAgICAgICAgICAgICAgIHtzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxuICAgICAgICAgICAgICAgIH19IGNvbG9yPVwiYnJhbmRcIj5Db3B5IGN1cnJlbnQgdGltZXN0YW1wPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj4gOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8RGl2aWRlci8+XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59XG5cbmxldCBJbnB1dENob2ljZU1vZHVsZXNcbmNsYXNzIElucHV0Q2hvaWNlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdID8gXCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA6IFwibm9uZVwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLnVwZGF0ZVdoZW5GZXRjaGVkKHRoaXMpXG4gICAgfVxuXG4gICAgb25DaGFuZ2UodmFsdWUpe1xuICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiB2YWx1ZS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxuICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxuICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XG4gICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSA9PT0gXCJub25lXCIgPyBudWxsIDogdGhpcy5zdGF0ZS5kYXRhLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGF0YTogdmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXG4gICAgfVxuICAgIFxuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBJbnB1dENob2ljZU1vZHVsZXMgfHwgKElucHV0Q2hvaWNlTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xuXG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICByb3dNb2R1bGUsXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxuICAgICAgICAgICAgZmxleE1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG4gICAgICAgIFxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBvcHRpb25zLnVuc2hpZnQoe1xuICAgICAgICAgICAgdmFsdWU6IFwibm9uZVwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiTm8gYXNzZXRzXCJcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb3B0aW9ucz17b3B0aW9uc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gLz5cbiAgICAgICAgICAgICAgICB7Lyo8U2VsZWN0IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IG9wdGlvbnM9e29wdGlvbnN9Lz4qL31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPERpdmlkZXIvPlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5sZXQgRGl2aWRlck1vZHVsZXMgPSBbXVxuY2xhc3MgRGl2aWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBEaXZpZGVyTW9kdWxlcyYmRGl2aWRlck1vZHVsZXNbMF0gPyBEaXZpZGVyTW9kdWxlcyA6IChEaXZpZGVyTW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXVxuICAgICAgICBdKVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQgW1xuICAgICAgICAgICAgZGl2aWRlcixcbiAgICAgICAgICAgIGRpdmlkZXJEZWZhdWx0XG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YCR7ZGl2aWRlci5kaXZpZGVyfSAke2RpdmlkZXJEZWZhdWx0LmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxuICAgIH1cbn1cblxuY2xhc3MgRGlzY29yZEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXG5cbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNvbG9yPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4pXG4gICAgfVxufVxuXG5jbGFzcyBScGNQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJzID0gW11cblxuICAgICAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzXG4gICAgfVxuXG4gICAgY2hhbmdlVGFiKHRhYil7XG4gICAgICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmVcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxuXG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXG4gICAgICAgIH0pXG4gICAgICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSlcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJGdWxsIFByb2ZpbGVcIiBpZD1cInByb2ZpbGVcIi8+XG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxQcmVzZW5jZUVycm9yQ2F0Y2hlciBwcmV2aWV3PXt0aGlzLnByZXZpZXd9IHN0YXRlPXt0aGlzLnN0YXRlLnJwY30gcHJvcHM9e3twcmV2aWV3OiB0aGlzfX0ga2V5PXt0aGlzLnN0YXRlLmFjdGl2ZX0gLz5cbiAgICAgICAgPC9kaXY+KVxuICAgIH0gICBcblxuICAgIGlzQWN0aXZlKHRhYil7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gdGFiXG4gICAgfVxuXG4gICAgZ2V0IHByZXZpZXcoKXtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUgPT09IFwicHJvZmlsZVwiKXJldHVybiBQcm9maWxlXG4gICAgICAgIHJldHVybiBQb3BvdXRcbiAgICB9XG59XG5cbmNsYXNzIFRhYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcylcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxuICAgICAgICB9XG4gICAgICAgIHByb3BzLnByZXZpZXcudGFicy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgc2V0QWN0aXZlKGlzQWN0aXZlKXtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmU6ICEhaXNBY3RpdmVcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSl7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtQWN0aXZlYFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1JbmFjdGl2ZWBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XG4gICAgICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpXG4gICAgICAgIH19PlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgIDwvZGl2PilcbiAgICB9XG59XG5cbmxldCBlbXB0eUNsYXNzZXNcbmNsYXNzIFByZXNlbmNlRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIsIGVyckluZm8pe1xuICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJySW5mbylcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBlcnJvcjogdHJ1ZVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUpe1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5zdGF0ZS5lcnJvcil7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IG5ldyB0aGlzLnByb3BzLnByZXZpZXcodGhpcy5wcm9wcy5wcm9wcylcbiAgICAgICAgICAgICAgICBwcmV2aWV3LnNldFN0YXRlKHRoaXMucHJvcHMuc3RhdGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpZXcucmVuZGVyKClcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSB0cnVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBlbXB0eUNsYXNzZXMgPSBlbXB0eUNsYXNzZXMgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5lbXB0eVN0YXRlSW1hZ2UgJiYgZS5lbXB0eVN0YXRlKVxuICAgICAgICAgICAgaWYoIWVtcHR5Q2xhc3Nlcyl7XG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBtYXJnaW46IFwiMjBweFwiXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXByaW1hcnkpXCIsIFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPXtgbGMtdGFiLWJveC1zaGFkb3cgJHtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSW1hZ2V9IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIH19PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVIZWFkZXJ9PkFuIGVycm9yIG9jY3VyZWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZVN1YnRleHR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17YCR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9ezB9IG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLmpvaW5MQygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IHNlcnZlclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxufVxuXG5sZXQgcG9wb3V0TW9kdWxlc1xubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcbmxldCBQb3BvdXRQcm9wc1xuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBnZXQgbW9kdWxlcygpe1xuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlcyB8fCAocG9wb3V0TW9kdWxlcyA9IFtcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclBvcG91dFwiKSxcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXG4gICAgICAgIF0pXG4gICAgfVxuXG4gICAgZ2V0Q29tcG9uZW50KCl7XG4gICAgICAgIGxldCBbXG4gICAgICAgICAgICBVc2VyUG9wb3V0LFxuICAgICAgICAgICAgdXNlck1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcbiAgICAgICAgICAgIGxldCByZW5kZXIxID0gVXNlclBvcG91dC5kZWZhdWx0KHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHVzZXIuaWQsIFxuICAgICAgICAgICAgICAgIGd1aWxkSWQ6IG51bGwsIFxuICAgICAgICAgICAgICAgIGNoYW5uZWxJZDogbnVsbCwgXG4gICAgICAgICAgICAgICAgZGlzYWJsZVVzZXJQcm9maWxlTGluazogdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIxLnR5cGVcbiAgICAgICAgICAgIFBvcG91dFByb3BzID0gcmVuZGVyMS5wcm9wc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcbiAgICAgICAgfSwgbnVsbClcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50KClcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIF9Vc2VyUG9wb3V0LFxuICAgICAgICAgICAgdXNlck1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG5cbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcbiAgICAgICAgICAgIGxldCBnYW1lID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcbiAgICAgICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnYW1lXG4gICAgICAgIH0pLmNhbGwoe1xuICAgICAgICAgICAgZ2FtZTogZGF0YVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHBvcG91dCA9IG5ldyBVc2VyUG9wb3V0Q29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFBvcG91dFByb3BzLCB7XG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHksXG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIuaWRcbiAgICAgICAgfSkpLnJlbmRlcigpLnByb3BzLmNoaWxkcmVuIC8vIGJ5cGFzcyB0cmFja2luZ1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxuICAgICAgICBjb25zdCBjb250YWluZXIgPSA8ZGl2IHsuLi53aW5kb3cuTGlnaHRjb3JkLkFwaS5fLmV4Y2x1ZGVQcm9wZXJ0aWVzKHBvcG91dC5wcm9wcywgW1wib25DbGlja1wiLCBcIm9uQ29udGV4dE1lbnVcIl0pfSAvPlxuXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgIHtjb250YWluZXJ9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbn1cblxubGV0IHByb2ZpbGVNb2R1bGVzXG5sZXQgVXNlclByb2ZpbGVDb21wb25lbnRcbmxldCBQcm9maWxlUHJvcHNcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGdldCBtb2R1bGVzKCl7XG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlVzZXJQcm9maWxlXCIpLFxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcbiAgICAgICAgXSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IFtcbiAgICAgICAgICAgIFVzZXJQcm9maWxlLFxuICAgICAgICAgICAgdXNlck1vZHVsZVxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXG5cbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl7XG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQcm9maWxlLmRlZmF1bHQoe1xuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcbiAgICAgICAgICAgIH0pLnJlbmRlcigpXG4gICAgICAgICAgICBjb25uZWN0ZWRQcm9maWxlU3RvcmUgPSByZW5kZXIxLnR5cGVcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXG4gICAgICAgICAgICBjb25zdCByZW5kZXIzID0gcmVuZGVyMi50eXBlLnJlbmRlcihyZW5kZXIyLnByb3BzLCBudWxsKVxuICAgICAgICAgICAgY29uc3QgcmVuZGVyNCA9IG5ldyByZW5kZXIzLnR5cGUocmVuZGVyMy5wcm9wcykucmVuZGVyKClcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXG4gICAgICAgIH1cbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCB0aGUgVXNlclByb2ZpbGVDb21wb25lbnQgY29tcG9uZW50LmApXG5cbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UlBDLCB0aGlzLnByb3BzLnByZXZpZXcucHJvcHMuc2V0dGluZ3Muc3RhdGUuZGF0YSlcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcbiAgICAgICAgICAgIGxldCBnYW1lID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcbiAgICAgICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnYW1lXG4gICAgICAgIH0pLmNhbGwoe1xuICAgICAgICAgICAgZ2FtZTogZGF0YVxuICAgICAgICB9KVxuXG4gICAgICAgIFByb2ZpbGVQcm9wcyA9IG5ldyBjb25uZWN0ZWRQcm9maWxlU3RvcmUoe1xuICAgICAgICAgICAgdXNlcjogdXNlcixcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7fVxuICAgICAgICB9KS5yZW5kZXIoKS5wcm9wc1xuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xuICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5XG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcblxuICAgICAgICBwcm9maWxlLnByb3BzLnN0eWxlID0ge1xuICAgICAgICAgICAgd2lkdGg6IFwiYXV0b1wiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cbiAgICAgICAgICAgIHtwcm9maWxlfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcblxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3NldHRpbmdzVGl0bGVcIjtcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xuXG5pbXBvcnQgU2VydmVyQ2FyZCBmcm9tIFwiLi9zZXJ2ZXJDYXJkXCI7XG5pbXBvcnQgeyB1c2VGb3JjZVVwZGF0ZSB9IGZyb20gXCIuLi8uLi9tb2R1bGVzL2hvb2tzXCI7XG5cbmxldCBTZXR0aW5nc1ZpZXdcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QdWJsaWNTZXJ2ZXJzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmNsb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZWFyY2hLZXlEb3duID0gdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY29ubmVjdCA9IHRoaXMuY29ubmVjdC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xuICAgICAgICB0aGlzLkF2YXRhckRlZmF1bHRzID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJERUZBVUxUX0FWQVRBUlNcIl0pO1xuICAgICAgICB0aGlzLkludml0ZUFjdGlvbnMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTtcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XG5cbiAgICAgICAgdGhpcy5ob29rcyA9IFtdXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2VydmVyczogW10sXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWN0aW9uOiB0aGlzLmNhdGVnb3J5U2x1Z3NbMF0sXG4gICAgICAgICAgICB0aGVtZTogXCJkYXJrXCJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9zZSgpXG4gICAgfVxuXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZmV0Y2goYCR7c2VsZi5zZWFyY2hFbmRQb2ludH0ke3F1ZXJ5fSR7cXVlcnkgPyBcIiZzY2hlbWE9bmV3XCIgOiBcIj9zY2hlbWE9bmV3XCJ9YCwge1xuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBhd2FpdCByZXMudGV4dCgpXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBkYXRhLnJlc3VsdHMucmVkdWNlKChhcnIsIHNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIC8vIGFyci5wdXNoKDxTZXJ2ZXJDYXJkIHNlcnZlcj17c2VydmVyfSBqb2luPXtzZWxmLmpvaW59Lz4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzID0gc2VsZi5zdGF0ZS5zZXJ2ZXJzLmNvbmNhdChzZXJ2ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vc2VydmVycy51bnNoaWZ0KHNlbGYuYmRTZXJ2ZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZW5kID0gZGF0YS5zaXplICsgZGF0YS5mcm9tO1xuICAgICAgICAgICAgZGF0YS5uZXh0ID0gYD9mcm9tPSR7ZW5kfWA7XG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5KSBkYXRhLm5leHQgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XG4gICAgICAgICAgICAgICAgZGF0YS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRpdGxlID0gYFNob3dpbmcgMS0ke2VuZH0gb2YgJHtkYXRhLnRvdGFsfSByZXN1bHRzIGluICR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgdGl0bGUgKz0gYCBmb3IgJHtzZWxmLnN0YXRlLnRlcm19YDtcblxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgIHNlcnZlcnM6IHNlcnZlcnMsXG4gICAgICAgICAgICAgICAgbmV4dDogZGF0YS5uZXh0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBqb2luKHNlcnZlckNhcmQpIHtcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcblxuICAgICAgICBhd2FpdCBmZXRjaChgJHt0aGlzLmpvaW5FbmRQb2ludH0vJHtzZXJ2ZXJDYXJkLnByb3BzLnNlcnZlci5pZGVudGlmaWVyfWAse1xuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxmLndpbmRvd09wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XG4gICAgICAgIG9wdGlvbnMueSA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblkgKyB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyIC0gb3B0aW9ucy5oZWlnaHQgLyAyKTtcblxuICAgICAgICBjb25zdCB3aW4gPSBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuQnJvd3NlcldpbmRvdykob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcbiAgICAgICAgd2luLndlYkNvbnRlbnRzLm9uKFwiZGlkLW5hdmlnYXRlXCIsIChldmVudCwgdXJsKSA9PiB7XG4gICAgICAgICAgICBpZiAodXJsICE9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCIpIHJldHVybjtcbiAgICAgICAgICAgIHdpbi5jbG9zZSgpO1xuICAgICAgICAgICAgc2VsZi5jaGVja0Nvbm5lY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbi5sb2FkVVJMKHVybCk7XG4gICAgICAgIHdpbi5zZXRNZW51QmFyVmlzaWJpbGl0eShmYWxzZSlcbiAgICB9XG5cbiAgICBnZXQgd2luZG93T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiA1MDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDU1MCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXG4gICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG1pbmltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IHRydWUsXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgd2ViUHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGJkU2VydmVyKCkge1xuICAgICAgICBjb25zdCBzZXJ2ZXIgPSB7XG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcbiAgICAgICAgICAgIG9ubGluZTogXCIzMDAwMCtcIixcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNzAwMDArXCIsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJjb21tdW5pdHlcIiwgXCJwcm9ncmFtbWluZ1wiLCBcInN1cHBvcnRcIl0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBCZXR0ZXJEaXNjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvODYwMDQ3NDQ5NjY5MTQwNDgvMjkyZTdmNmJmZmYyYjcxZGZkMTNlNTA4YTg1OWFlZGQud2VicFwiLFxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmRcIixcbiAgICAgICAgICAgIG9ubGluZTogXCIxMDArXCIsXG4gICAgICAgICAgICBtZW1iZXJzOiBcIjMwMCtcIixcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9mZmljaWFsIExpZ2h0Y29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjcwNTkwODM1MDIxODY2NjExN1wiLFxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkLnBuZ1wiLFxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcbiAgICAgICAgICAgIHBpbm5lZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pXG4gICAgICAgIF1cbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoRW5kUG9pbnQoKSB7XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xuICAgIH1cblxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vai5kaXNjb3Jkc2VydmVycy5jb21cIjtcbiAgICB9XG5cbiAgICBnZXQgY29ubmVjdEVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gXCJodHRwczovL2pvaW4uZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3RcIjtcbiAgICB9XG5cbiAgICBhc3luYyBjaGVja0Nvbm5lY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvYCx7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgICAgICAgICAgaWYoIXRleHQpe1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0KVxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAyLFxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5ob29rcy5mb3JFYWNoKChlKSA9PiBlKCkpXG4gICAgICAgIFNldHRpbmdzVmlldyA9IFNldHRpbmdzVmlldyB8fCBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiU2V0dGluZ3NWaWV3XCIpXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcInB1YnNsYXllcnJvb3RcIn0sIFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1ZpZXcsIHtcbiAgICAgICAgICAgICAgICBvblNldFNlY3Rpb246IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkodGhpcy5jYXRlZ29yeVNsdWdzLmluZGV4T2Yoc2VjdGlvbikpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWN0aW9uczogdGhpcy5zZWN0aW9ucyxcbiAgICAgICAgICAgICAgICBvbkNsb3NlOiB0aGlzLmNsb3NlLFxuICAgICAgICAgICAgICAgIHNlY3Rpb246IHRoaXMuc3RhdGUuc2VjdGlvblxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IHNlY3Rpb25zKCl7XG4gICAgICAgIGxldCBzZWN0aW9ucyA9IFtdXG4gICAgICAgIHNlY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcbiAgICAgICAgICAgIGxhYmVsOiBcIlB1YmxpYyBTZXJ2ZXJzXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuc2VhcmNoSW5wdXQuYmluZChudWxsLCAoKSA9PiB0aGlzLCB0aGlzLnNlYXJjaEtleURvd24pXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJDYXRlZ29yaWVzXCJcbiAgICAgICAgfSwgLi4udGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5jYXRlZ29yeVNsdWdzW2luZGV4XSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5jb250ZW50LmJpbmQobnVsbCwgKCkgPT4gdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmZvb3RlclxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5jb25uZWN0aW9uLmJpbmQobnVsbCwgKCkgPT4gdGhpcylcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zXG4gICAgfVxuICAgIFxuICAgIHNlYXJjaElucHV0KGdldFRoaXMsIHNlYXJjaEtleURvd24pIHtcbiAgICAgICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBCRFYyLnJlYWN0LnVzZVN0YXRlKFwiXCIpXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICByZWY6IChzZXJjaGlucHV0KSA9PiAoZ2V0VGhpcygpLnJlZnMuc2VhcmNoaW5wdXQgPSBzZXJjaGlucHV0KSwgXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bjogc2VhcmNoS2V5RG93biwgXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIiwgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJpbnB1dCBkZWZhdWx0XCIsIFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgXG4gICAgICAgICAgICAgICAgICAgIG1heExlbmd0aDogXCI1MFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNlYXJjaEtleURvd24oZSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZyB8fCBlLndoaWNoICE9PSAxMykgcmV0dXJuO1xuICAgICAgICBzZWxmLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXG4gICAgICAgICAgICB0ZXJtOiBlLnRhcmdldC52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYD90ZXJtPSR7ZS50YXJnZXQudmFsdWV9YDtcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSAhPT0gMCkge1xuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnNlYXJjaChxdWVyeSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGNhdGVnb3J5U2x1Z3MoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcChlID0+IGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlxcd1xcZF0rL2csIFwiX1wiKSlcbiAgICB9XG5cbiAgICBnZXQgY2F0ZWdvcnlCdXR0b25zKCkge1xuICAgICAgICByZXR1cm4gW1wiQWxsXCIsIFwiRlBTIEdhbWVzXCIsIFwiTU1PIEdhbWVzXCIsIFwiU3RyYXRlZ3kgR2FtZXNcIiwgXCJNT0JBIEdhbWVzXCIsIFwiUlBHIEdhbWVzXCIsIFwiVGFibGV0b3AgR2FtZXNcIiwgXCJTYW5kYm94IEdhbWVzXCIsIFwiU2ltdWxhdGlvbiBHYW1lc1wiLCBcIk11c2ljXCIsIFwiQ29tbXVuaXR5XCIsIFwiTGFuZ3VhZ2VcIiwgXCJQcm9ncmFtbWluZ1wiLCBcIk90aGVyXCJdO1xuICAgIH1cblxuICAgIGNoYW5nZUNhdGVnb3J5KGlkKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IGlkLFxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxuICAgICAgICAgICAgdGVybTogbnVsbCxcbiAgICAgICAgICAgIHNlY3Rpb246IHNlbGYuY2F0ZWdvcnlTbHVnc1tpZF1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5zZWFyY2goYD9jYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW2lkXX1gLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjb250ZW50KGdldFRoaXMpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IGdldFRoaXMoKTtcbiAgICAgICAgc2VsZi51c2VTdGF0ZSgpXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHNlbGYuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHNlbGYuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHNlbGYubm90Q29ubmVjdGVkLmJpbmQobnVsbCwgZ2V0VGhpcykpO1xuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtyZWY6IChyZWYpID0+IHtcbiAgICAgICAgICAgICAgICAoc2VsZi5yZWZzLmNvbnRlbnQgPSByZWYpXG4gICAgICAgICAgICB9LCBrZXk6IFwicGNcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXG4gICAgICAgICAgICBzZWxmLmJkU2VydmVyLFxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLm1hcCgoc2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXh0ICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47c2VsZi5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pOyBzZWxmLnNlYXJjaChzZWxmLnN0YXRlLm5leHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUubG9hZGluZyA/IFwiTG9hZGluZ1wiIDogXCJMb2FkIE1vcmVcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzZWxmLnN0YXRlLnNlcnZlcnMubGVuZ3RoID4gMCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KVxuICAgICAgICApXTtcbiAgICB9XG5cbiAgICBub3RDb25uZWN0ZWQoZ2V0VGhpcykge1xuICAgICAgICBjb25zdCBzZWxmID0gZ2V0VGhpcygpO1xuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtrZXk6IFwibmNjXCIsIHJlZjogKHJlZikgPT4gKHNlbGYucmVmcy5jb250ZW50ID0gcmVmKSwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwiaDJcIixcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXG4gICAgICAgICAgICAgICAgXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHNlbGYuY29ubmVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjE4cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxuICAgICAgICApXTtcbiAgICB9XG5cbiAgICBmb290ZXIoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxuICAgICAgICAgICAgICAgIFwiRGlzY29yZHNlcnZlcnMuY29tXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1c2VTdGF0ZSgpe1xuICAgICAgICBjb25zdCBmb3JjZVVwZGF0ZSA9IHVzZUZvcmNlVXBkYXRlKClcbiAgICAgICAgQkRWMi5SZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob29rcy5wdXNoKGxpc3RlbmVyKVxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaG9va3MuZmluZEluZGV4KGUgPT4gZT09PWxpc3RlbmVyKVxuICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgMClyZXR1cm5cbiAgICAgICAgICAgICAgICB0aGlzLmhvb2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pXG4gICAgfVxuXG4gICAgY29ubmVjdGlvbihnZXRUaGlzKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSBnZXRUaGlzKCk7XG4gICAgICAgIHNlbGYudXNlU3RhdGUoKVxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xuICAgICAgICBpZiAoY29ubmVjdGlvbi5zdGF0ZSAhPT0gMikgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxuICAgICAgICAgICAgICAgIFwiQ29ubmVjdGVkIGFzOiBcIixcbiAgICAgICAgICAgICAgICBgJHtjb25uZWN0aW9uLnVzZXIudXNlcm5hbWV9IyR7Y29ubmVjdGlvbi51c2VyLmRpc2NyaW1pbmF0b3J9YFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWNvbm5lY3RcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VydmVyQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsKSB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgam9pbmVkOiB0aGlzLnByb3BzLmd1aWxkTGlzdC5pbmNsdWRlcyh0aGlzLnByb3BzLnNlcnZlci5pZGVudGlmaWVyKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgY2FyZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNhcmQgJiYgZS5jYXJkUHJpbWFyeSlbMF1cbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4Q2hpbGQgJiYgZS5faG9yaXpvbnRhbFJldmVyc2UpWzBdXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImRpdlwiLCAvLyBjYXJkUHJpbWFyeS0xSHYtdG9cbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxuICAgICAgICAgICAgLy8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgIC8vIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtyZWY6IFwiaW1nXCIsIGNsYXNzTmFtZTogXCJiZC1zZXJ2ZXItaW1hZ2VcIiwgc3JjOiBzZXJ2ZXIuaWNvblVybCwgb25FcnJvcjogdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpLCBkcmFnZ2FibGU6IGZhbHNlfSksXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmZsZXhDaGlsZCtcIiBiZC1zZXJ2ZXItY29udGVudFwifSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcCtcIiBiZC1zZXJ2ZXItaGVhZGVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbmFtZVwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubWVtYmVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBNZW1iZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuaG9yaXpvbnRhbCtcIiBcIit3cmFwTW9kdWxlLm5vV3JhcH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eSBiZC1zZXJ2ZXItZGVzY3JpcHRpb24tY29udGFpbmVyXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlci0yRktGUEcgc2Nyb2xsZXIgYmQtc2VydmVyLWRlc2NyaXB0aW9uXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjYgYmQtc2VydmVyLWZvb3RlclwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItdGFnc1wiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBjb2xvckdyZWVuLTI5aUFLWVwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiMzYWMxNWNcIn19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmVycm9yICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTiBkaXNhYmxlZC05YUYydWdcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjYzEzYTNhXCJ9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlcnZlci5lcnJvciAmJiAhdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwifSwgb25DbGljazogKCkgPT4ge3RoaXMuam9pbigpO319LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGhhbmRsZUVycm9yKCkge1xuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VFcnJvcjogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGpvaW4oKSB7XG4gICAgICAgIHRoaXMucHJvcHMuam9pbih0aGlzKTtcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1JlbG9hZEljb24gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjZGNkZGRlXCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXJlbG9hZCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcbiAgICAgICAgICAgICAgICBzdHlsZToge3dpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCIsIGhlaWdodDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwifVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDB6XCJ9KVxuICAgICAgICApO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKChzZWN0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2V9KSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9XG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcblxubGV0IGZvcm1Nb2R1bGVcbmxldCBzd2l0Y2hJdGVtXG5sZXQgYmV0YUNsYXNzTmFtZXNcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVycm9yOiBmYWxzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyT2xkU2V0dGluZ3MoKSB7XG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBidXR0b25Db21wb25lbnQgPSBidXR0b24gPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge2tleTogXCJ0aXRsZS1idXR0b25cIiwgY2xhc3NOYW1lOiBcImJkLXBmYnRuXCIsIG9uQ2xpY2s6IGJ1dHRvbi5vbkNsaWNrfSwgYnV0dG9uLnRpdGxlKSA6IG51bGw7XG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICAgICAgfSldO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZENhdGNoKGVyciwgZXJySW5mbyl7XG4gICAgICAgIGNvbnNvbGUubG9nKGVyciwgZXJySW5mbylcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBlcnJvcjogdHJ1ZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBpZih0aGlzLnN0YXRlLmVycm9yKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJPbGRTZXR0aW5ncygpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGlmKCFmb3JtTW9kdWxlKWZvcm1Nb2R1bGUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxuICAgICAgICAgICAgICAgIGlmKCFzd2l0Y2hJdGVtKXN3aXRjaEl0ZW0gPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlN3aXRjaEl0ZW1cIilcbiAgICAgICAgICAgICAgICBpZighYmV0YUNsYXNzTmFtZXMpYmV0YUNsYXNzTmFtZXMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmJldGEgJiYgKCFlLmNvbnRhaW5lciAmJiAhZS51c2VyU2V0dGluZ3NWb2ljZSkpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW11cbiAgICAgICAgICAgICAgICBpZih0aGlzLnByb3BzLmRlc2NyaXB0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCg8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBzZWxlY3RhYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1UZXh0PiwgPE1hcmdpblRvcD48L01hcmdpblRvcD4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4udGhpcy5wcm9wcy5zZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmZvID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5leHBlcmltZW50YWwpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wdXNoKDxzdXAgY2xhc3NOYW1lPXtiZXRhQ2xhc3NOYW1lcy5iZXRhfT4oRVhQRVJJTUVOVEFMKTwvc3VwPilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHN3aXRjaEl0ZW0uZGVmYXVsdCBvbkNoYW5nZT17KGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHNldHRpbmcuaWQsIGV2LnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9fSBrZXk9e3NldHRpbmcuaWR9IHZhbHVlPXtzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXX0gY2xhc3NOYW1lPXtfX1NFQ1JFVF9FTU9USU9OX18uY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgfSl9IGRpc2FibGVkPXtmYWxzZX0gaGlkZUJvcmRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtzd2l0Y2hJdGVtLmRlZmF1bHQuU2l6ZXMuREVGQVVMVH0gdGhlbWU9e3N3aXRjaEl0ZW0uZGVmYXVsdC5UaGVtZXMuREVGQVVMVH0gbm90ZT17c2V0dGluZy5pbmZvfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpbmZvfVxuICAgICAgICAgICAgICAgICAgICA8L3N3aXRjaEl0ZW0uZGVmYXVsdD5cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gPGZvcm1Nb2R1bGUuRm9ybVNlY3Rpb24gdGFnPVwiaDJcIiB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+XG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcImgyXCIsXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcbiAgICAgICAgKTtcbiAgICB9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcblxubGV0IGNsYXNzbmFtZXMgPSBbXVxuZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKG5hbWUpe1xuICAgIGxldCBjbGFzc05hbWUgPSBjbGFzc25hbWVzLmZpbmQoZSA9PiBlLnN0YXJ0c1dpdGgobmFtZStcIi1cIikpXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcbiAgICBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZVtuYW1lXSlbMF1bbmFtZV1cbiAgICBjbGFzc25hbWVzLnB1c2goY2xhc3NOYW1lKVxuICAgIHJldHVybiBjbGFzc05hbWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoSXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSAhdGhpcy5wcm9wcy5jaGVja2VkO1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3RleHQsIGluZm99ID0gdGhpcy5wcm9wcy5kYXRhO1xuICAgICAgICBpZighY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKFwiYmV0YS1cIikpKXtcbiAgICAgICAgICAgIGNsYXNzbmFtZXMucHVzaChCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVswXS5iZXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMucHJvcHMuZGF0YS5leHBlcmltZW50YWwpe1xuICAgICAgICAgICAgaW5mbyA9IFtcbiAgICAgICAgICAgICAgICBpbmZvLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdXBcIiwge2NsYXNzTmFtZTogZ2V0Q2xhc3NOYW1lKFwiYmV0YVwiKX0sIFwiKEVYUEVSSU1FTlRBTClcIilcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktZmxleCBmbGV4LXZlcnRpY2FsIGZsZXgtanVzdGlmeS1zdGFydCBmbGV4LWFsaWduLXN0cmV0Y2ggZmxleC1ub3dyYXAgdWktc3dpdGNoLWl0ZW1cIn0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHtrZXk6IFwidGl0bGVcIiwgY2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDMgbWFyZ2luLXJlc2V0IG1hcmdpbi1yZXNldCB1aS1mbGV4LWNoaWxkXCJ9LCB0ZXh0KSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7a2V5OiBcInN3aXRjaFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRleHQgc3R5bGUtZGVzY3JpcHRpb24gbWFyZ2luLXRvcC00XCIsIHN0eWxlOiB7ZmxleDogXCIxIDEgYXV0b1wifX0sIGluZm8pXG4gICAgICAgICk7XG4gICAgfVxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XG4gICAgfVxufSIsIi8qKlxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxuICogV2lsbCBhbHNvIHJlbW92ZSB0aGVtc2VsdmVzIGlmIHRoZSBub2RlIHRvIHdhdGNoIGlzIHJlbW92ZWQgZnJvbSBET00gdGhyb3VnaFxuICogYSBNdXRhdGlvbk9ic2VydmVyLlxuICpcbiAqIE5vdGUgdGhpcyBpcyBub3QgdXNpbmcgRGlzY29yZCdzIGludGVybmFscyBidXQgbm9ybWFsIERPTSBtYW5pcHVsYXRpb24gYW5kIGVtdWxhdGVzXG4gKiBEaXNjb3JkJ3Mgb3duIHRvb2x0aXBzIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuXG4gKlxuICogQG1vZHVsZSBFbXVsYXRlZFRvb2x0aXBcbiAqIEB2ZXJzaW9uIDAuMC4xXG4gKi9cblxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcbmxldCBUb29sdGlwQ2xhc3Nlc1xuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcblx0aWYoVG9vbHRpcENsYXNzZXMpcmV0dXJuIFRvb2x0aXBDbGFzc2VzXG5cdHJldHVybiBUb29sdGlwQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwidG9vbHRpcFwiLCBcInRvb2x0aXBCbGFja1wiKTtcbn1cbmxldCBUb29sdGlwTGF5ZXJzXG5mdW5jdGlvbiBnZXRUb29sdGlwTGF5ZXJzKCl7XG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcblx0cmV0dXJuIFRvb2x0aXBMYXllcnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImxheWVyXCIsIFwibGF5ZXJDb250YWluZXJcIik7XG59XG5cbmNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcbiAgICBjb25zdCB1cHBlckNhc2UgPSBzaWRlT3JDb2xvclswXS50b1VwcGVyQ2FzZSgpICsgc2lkZU9yQ29sb3Iuc2xpY2UoMSk7XG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xuICAgIGlmICh0b29sdGlwQ2xhc3MpIHJldHVybiB0b29sdGlwQ2xhc3M7XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBjbGFzc0V4aXN0cyA9IGZ1bmN0aW9uKHNpZGVPckNvbG9yKSB7XG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBgJHt2YWx1ZX1weGA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xuXHQvKipcblx0ICpcblx0ICogQGNvbnN0cnVjdG9yXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXAgLSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9vbHRpcFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc2lkZT10b3BdIC0gY2FuIGJlIGFueSBvZiB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdHRhY2hFdmVudHM9dHJ1ZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBsaXN0ZW4gdG8gbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBldmVudHMuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihub2RlLCB0ZXh0LCBvcHRpb25zID0ge30pIHtcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlLCBhdHRhY2hFdmVudHMgPSB0cnVlfSA9IG9wdGlvbnM7XG5cdFx0dGhpcy5ub2RlID0gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xuICAgICAgICB0aGlzLmxhYmVsID0gdGV4dDtcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XG5cdFx0dGhpcy5zaWRlID0gc2lkZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLnByZXZlbnRGbGlwID0gcHJldmVudEZsaXA7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcblxuICAgICAgICBpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc2lkZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFNpZGUgJHt0aGlzLnNpZGV9IGRvZXMgbm90IGV4aXN0LmApO1xuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XG5cdFx0XG5cdFx0dGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xuXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcblxuXHRcdHRoaXMubGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XG5cblx0XHRjb25zdCBwb2ludGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcblxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuYXBwZW5kKHBvaW50ZXJFbGVtZW50KTtcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XG5cdFx0dGhpcy5lbGVtZW50LmFwcGVuZCh0aGlzLnRvb2x0aXBFbGVtZW50KTtcblxuXHRcdGlmKGF0dGFjaEV2ZW50cyl7XG5cdFx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLnNob3coKTtcblx0XG5cdFx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRcdFx0XHRcdG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG5cdFx0XHRcdFx0XHRjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2YodGhpcy5ub2RlKSA+IC0xO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnModGhpcy5ub2RlKSk7XG5cdFx0XHRcdFx0XHRpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFxuXHRcdFx0XHRvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcblx0XHRcdH0pO1xuXHRcblx0XHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuICAgIH1cblxuICAgIC8qKiBDb250YWluZXIgd2hlcmUgdGhlIHRvb2x0aXAgd2lsbCBiZSBhcHBlbmRlZC4gKi9cbiAgICBnZXQgY29udGFpbmVyKCkgeyBcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzKStcIiB+IC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIpKTsgXG5cdH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGFib3ZlIHRoZSBlbGVtZW50ICovXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIGJlbG93IHRoZSBlbGVtZW50ICovXG4gICAgZ2V0IGNhblNob3dCZWxvdygpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB0aGlzLm5vZGUub2Zmc2V0SGVpZ2h0ICsgdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCA8PSBVdGlscy5zY3JlZW5IZWlnaHQ7IH1cbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXG4gICAgZ2V0IGNhblNob3dMZWZ0KCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggPj0gMDsgfVxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbGVtZW50ICovXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxuXG4gICAgLyoqIEhpZGVzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWxlYXZlLiAqL1xuXHRoaWRlKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuXHR9XG5cbiAgICAvKiogU2hvd3MgdGhlIHRvb2x0aXAuIEF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIG1vdXNlZW50ZXIuIFdpbGwgYXR0ZW1wdCB0byBmbGlwIGlmIHBvc2l0aW9uIHdhcyB3cm9uZy4gKi9cblx0c2hvdygpIHtcbiAgICAgICAgdGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcblx0XHR0aGlzLmxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubGFiZWw7XG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XG5cblx0XHRpZiAodGhpcy5zaWRlID09IFwidG9wXCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dCZWxvdygpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJib3R0b21cIikge1xuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0JlbG93IHx8ICghdGhpcy5jYW5TaG93QmVsb3cgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0JlbG93KCk7XG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xuXHRcdFx0aWYgKHRoaXMuY2FuU2hvd0xlZnQgfHwgKCF0aGlzLmNhblNob3dMZWZ0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dMZWZ0KCk7XG5cdFx0XHRlbHNlIHRoaXMuc2hvd1JpZ2h0KCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInJpZ2h0XCIpIHtcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xuXHRcdFx0ZWxzZSB0aGlzLnNob3dMZWZ0KCk7XG5cdFx0fVxuXHR9XG5cbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCBhYm92ZSB0aGUgbm9kZS4gKi9cblx0c2hvd0Fib3ZlKCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcInRvcFwiKSk7XG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwidG9wXCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLSAxMCkpO1xuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XG5cdH1cblxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xuXHRzaG93QmVsb3coKSB7XG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwiYm90dG9tXCIpKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XG5cdFx0dGhpcy5jZW50ZXJIb3Jpem9udGFsbHkoKTtcblx0fVxuXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIGxlZnQgb2YgdGhlIG5vZGUuICovXG5cdHNob3dMZWZ0KCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAtIDEwKSk7XG5cdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cdH1cblxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCBvZiB0aGUgbm9kZS4gKi9cblx0c2hvd1JpZ2h0KCkge1xuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcInJpZ2h0XCIpKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgodGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB0aGlzLm5vZGUub2Zmc2V0V2lkdGggKyAxMCkpO1xuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xuXHR9XG5cblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xuICAgICAgICBjb25zdCBub2RlY2VudGVyID0gdGhpcy5ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyAodGhpcy5ub2RlLm9mZnNldFdpZHRoIC8gMik7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCAvIDIpKSk7XG5cdH1cblxuXHRjZW50ZXJWZXJ0aWNhbGx5KCkge1xuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeChub2RlY2VudGVyIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyKSkpO1xuXHR9XG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcbmltcG9ydCBUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdGhpcy5ub2RlID0gQkRWMi5yZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gbmV3IFRvb2x0aXAodGhpcy5ub2RlLCB0ZXh0LCB7c3R5bGUsIHNpZGV9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMudG9vbHRpcDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfWFN2ZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAge3htbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHZpZXdCb3g6IFwiMCAwIDEyIDEyXCIsIHN0eWxlOiB7d2lkdGg6IFwiMThweFwiLCBoZWlnaHQ6IFwiMThweFwifX0sXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJiYWNrZ3JvdW5kXCIsIGZpbGw6IFwibm9uZVwiLCBmaWxsUnVsZTogXCJldmVub2RkXCJ9LFxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTAgMGgxMnYxMkgwXCJ9KSxcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtjbGFzc05hbWU6IFwiZmlsbFwiLCBmaWxsOiBcIiNkY2RkZGVcIiwgZDogXCJNOS41IDMuMjA1TDguNzk1IDIuNSA2IDUuMjk1IDMuMjA1IDIuNWwtLjcwNS43MDVMNS4yOTUgNiAyLjUgOC43OTVsLjcwNS43MDVMNiA2LjcwNSA4Ljc5NSA5LjVsLjcwNS0uNzA1TDYuNzA1IDZcIn0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9kdWxlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/BetterDiscordApp/dist/index.min.js.map b/BetterDiscordApp/dist/index.min.js.map index fbfefa1..4100cff 100644 --- a/BetterDiscordApp/dist/index.min.js.map +++ b/BetterDiscordApp/dist/index.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://BetterDiscord/webpack/bootstrap","webpack://BetterDiscord/external \"electron\"","webpack://BetterDiscord/external \"path\"","webpack://BetterDiscord/external \"fs\"","webpack://BetterDiscord/external \"crypto\"","webpack://BetterDiscord/external \"node-fetch\"","webpack://BetterDiscord/external \"events\"","webpack://BetterDiscord/external \"module\"","webpack://BetterDiscord/./src/0globals.js","webpack://BetterDiscord/./src/modules/webpackModules.js","webpack://BetterDiscord/./src/modules/dataStore.js","webpack://BetterDiscord/./src/modules/bdEvents.js","webpack://BetterDiscord/./src/modules/pluginModule.js","webpack://BetterDiscord/./src/ui/tooltip.js","webpack://BetterDiscord/./src/ui/tooltipWrap.js","webpack://BetterDiscord/./src/modules/pluginCertifier.js","webpack://BetterDiscord/./src/modules/contentManager.js","webpack://BetterDiscord/./src/modules/domtools.js","webpack://BetterDiscord/./src/modules/themeModule.js","webpack://BetterDiscord/./src/modules/v2.js","webpack://BetterDiscord/./src/modules/utils.js","webpack://BetterDiscord/./src/modules/settingsPanelSidebar.js","webpack://BetterDiscord/./src/modules/coloredText.js","webpack://BetterDiscord/./src/modules/24hour.js","webpack://BetterDiscord/./src/ui/settingsTitle.js","webpack://BetterDiscord/./src/ui/tabBarSeparator.js","webpack://BetterDiscord/./src/ui/publicservers/serverCard.js","webpack://BetterDiscord/./src/modules/hooks.js","webpack://BetterDiscord/./src/ui/publicservers/publicServers.js","webpack://BetterDiscord/./src/svg/bug_hunter.jsx","webpack://BetterDiscord/./src/svg/circus.jsx","webpack://BetterDiscord/./src/modules/distant.js","webpack://BetterDiscord/./src/modules/Layers.jsx","webpack://BetterDiscord/./src/modules/publicServers.js","webpack://BetterDiscord/./src/modules/voiceMode.js","webpack://BetterDiscord/./src/modules/classNormalizer.js","webpack://BetterDiscord/./src/modules/devMode.js","webpack://BetterDiscord/./src/ui/components/switch.jsx","webpack://BetterDiscord/./src/ui/switch.js","webpack://BetterDiscord/./src/ui/margintop.jsx","webpack://BetterDiscord/./src/ui/settingsGroup.jsx","webpack://BetterDiscord/./src/ui/sectionedSettingsPanel.js","webpack://BetterDiscord/./src/ui/checkbox.js","webpack://BetterDiscord/./src/ui/cssEditorDetached.js","webpack://BetterDiscord/./src/ui/cssEditor.js","webpack://BetterDiscord/./src/ui/errorBoundary.js","webpack://BetterDiscord/./src/ui/contentColumn.js","webpack://BetterDiscord/./src/ui/reloadIcon.js","webpack://BetterDiscord/./src/ui/xSvg.js","webpack://BetterDiscord/./src/ui/icons/edit.jsx","webpack://BetterDiscord/./src/ui/icons/delete.jsx","webpack://BetterDiscord/./src/ui/addoncard.jsx","webpack://BetterDiscord/./src/ui/icons/downarrow.jsx","webpack://BetterDiscord/./src/ui/components/dropdown.jsx","webpack://BetterDiscord/./src/ui/icons/search.jsx","webpack://BetterDiscord/./src/ui/components/search.jsx","webpack://BetterDiscord/./src/ui/addonlist.jsx","webpack://BetterDiscord/./src/modules/CustomRichPresence.js","webpack://BetterDiscord/./src/ui/presenceSettings.jsx","webpack://BetterDiscord/./src/ui/AccountInfos.jsx","webpack://BetterDiscord/./src/modules/AntiAdDM.js","webpack://BetterDiscord/./src/modules/blurPrivate.js","webpack://BetterDiscord/./src/modules/disableTyping.js","webpack://BetterDiscord/./src/ui/ApiPreview.jsx","webpack://BetterDiscord/./src/ui/icons/history.jsx","webpack://BetterDiscord/./src/modules/popoutWindow.js","webpack://BetterDiscord/./src/modules/settingsPanel.js","webpack://BetterDiscord/./src/ui/bdLogo.js","webpack://BetterDiscord/./src/svg/Lightcord.jsx","webpack://BetterDiscord/./src/modules/emojiModule.js","webpack://BetterDiscord/./src/modules/core.js","webpack://BetterDiscord/./src/modules/bdApi.js","webpack://BetterDiscord/./src/localStorageFix.js","webpack://BetterDiscord/./src/index.js","webpack://BetterDiscord/./src/loadingIcon.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","minimumDiscordVersion","currentDiscordVersion","window","DiscordNative","remoteApp","getVersion","minSupportedVersion","bbdVersion","bbdChangelog","description","changes","title","type","items","settings","id","info","implemented","hidden","cat","category","experimental","process","platform","defaultCookie","settingsCookie","settingsRPC","defaultRPC","Date","now","lightcordSettings","defaultLightcordSettings","bdpluginErrors","bdthemeErrors","bdConfig","BetterDiscordConfig","bdthemes","bdplugins","pluginCookie","themeCookie","req","webpackJsonp","push","__extra_id__","find","filter","default","mod","findAll","findByProps","propNames","every","prop","undefined","findByPrototypes","protoNames","protoProp","findByDisplayName","displayName","Lightcord","BetterDiscord","WebpackModules","fs","path","releaseChannel","globals","app","getReleaseChannel","dataPath","env","APPDATA","join","HOME","XDG_CONFIG_HOME","constructor","this","data","stable","canary","ptb","pluginData","DataStore","initialize","existsSync","BDFile","writeFileSync","JSON","stringify","parse","readFileSync","settingsFile","__non_webpack_require__","unlinkSync","assign","setBDData","err","console","error","Utils","alert","_injectionPath","_configFile","resolve","injectionPath","_BDFile","_settingsFile","getPluginFile","pluginName","ContentManager","pluginsFolder","getSettingGroup","setSettingGroup","getBDData","getPluginData","setPluginData","deletePluginData","EventEmitter","super","BDEvents","dispatch","eventName","args","emit","off","eventAction","removeListener","PluginModule","loadPlugins","async","loadPluginData","splice","plugins","keys","length","plugin","getName","load","file","filename","message","stack","start","showToast","Promise","setTimeout","savePluginData","remote","getCurrentWebContents","on","channelSwitch","startPlugin","reload","stopPlugin","stop","enablePlugin","enable","disablePlugin","disable","togglePlugin","toggle","loadPlugin","loadContent","showContentErrors","values","log","unloadPlugin","filenameOrName","bdplugin","unloadContent","delete","fullPath","reloadPlugin","enabled","reloadContent","edit","shell","openItem","updatePluginList","results","loadNewContent","added","removed","saved","newMessage","onMessage","onSwitch","rawObserver","e","observer","TooltipClasses","TooltipLayers","getTooltipClasses","getTooltipLayers","getClass","sideOrColor","upperCase","toUpperCase","slice","tooltipClass","classExists","toPx","EmulatedTooltip","node","text","options","style","side","preventFlip","disabled","attachEvents","jQuery","label","toLowerCase","element","document","createElement","className","layer","disabledPointerEvents","tooltipElement","tooltip","labelElement","tooltipContent","pointerElement","tooltipPointer","append","addEventListener","show","MutationObserver","mutations","forEach","mutation","nodes","Array","from","removedNodes","directMatch","indexOf","parentMatch","some","parent","contains","hide","disconnect","observe","body","subtree","childList","querySelector","removeDa","BDModules","popouts","layerContainer","getBoundingClientRect","top","offsetHeight","screenHeight","left","offsetWidth","screenWidth","remove","_className","textContent","container","canShowAbove","showAbove","showBelow","canShowBelow","canShowLeft","showLeft","showRight","canShowRight","classList","add","setProperty","centerHorizontally","centerVertically","nodecenter","React","Component","props","BDV2","reactDom","findDOMNode","Tooltip","componentWillUnmount","render","children","cache","cache2","PluginCertifier","patch","attachment","nextTick","getElementById","url","startsWith","endsWith","nodeFetch","headers","electron","sendSync","then","res","status","Error","hash","crypto","Buffer","alloc","chunk","concat","update","hashResult","digest","hashToUrl","checkHash","result","div","childNodes","flowerStarModule","flowerStarContainer","childModule","childContainer","suspect","parentNode","borderColor","nextNode","child","tagName","preventDefault","stopImmediatePropagation","showConfirmationModal","harm","confirmText","cancelText","danger","onCancel","onConfirm","href","includes","react","tooltipWrap","width","height","svg","viewBox","x","y","mask","fill","pointerEvents","official","span","display","float","flowerStar","stroke","color","onClick","link","getKeyedArray","content","buffer","installPath","contentManager","_pluginsFolder","_themesFolder","catch","cursor","fill-rule","class","renderToElements","elem","processAttachment","isTrusted","tests","threats","checkViruses","resultCallback","removeCallback","isHarmful","no_comments","toString","replace","trim","test","scrpt","exec","split","pop","json","processFile","__path","isFromLoader","createReadStream","addonCache","timestamp","saveAddonCache","basename","obj","arr","k","save","generateKey","encryptSettingsCache","cipher","encrypted","final","Api","ensureExported","ObjectStorage","localStorageModule","localStorage","impl","set","btoa","setInterval","val","safeJSONParse","atob","isArray","Module","globalPaths","MetaError","originalJSRequire","_extensions","originalCSSRequire","splitRegex","escapedAtRegex","hasPatched","timeCache","watchers","patchExtensions","getContentRequire","realpathSync","loadAddonCertifierCache","dataStore","decipher","decrypted","decryptSettingsCache","watchContent","contentType","isPlugin","baseFolder","themesFolder","fileEnding","watch","persistent","eventType","statSync","code","pluginModule","themeModule","unloadTheme","isFile","stats","mtime","getTime","loadTheme","reloadTheme","unwatchContent","close","extractMeta","firstLine","parseOldMeta","parseNewMeta","meta","rawMeta","substring","lastIndexOf","parsed","testJSON","format","block","out","field","accum","line","charAt","substr","self","originalRequire","possiblePath","Reflect","apply","arguments","stripBOM","atimeMs","modified","mtimeMs","size","css","_compile","isEmpty","warn","makePlaceholderPlugin","getAuthor","getDescription","source","website","escapeID","isLoaded","cantUnload","basedir","files","readdirSync","contentList","map","f","errors","loadAllContent","loadThemes","DOMTools","head","script","src","onload","timing","_","duration","performance","requestAnimationFrame","animate","time","timeFraction","progress","selector","parseHTML","NodeList","nodeType","query","baseElement","querySelectorAll","html","fragment","template","innerHTML","cloneNode","textNode","createTextNode","spanElement","nodeValue","classes","flat","classname","indicator","oldName","newName","thisNode","thatNode","prepend","targetNode","insertBefore","nextSibling","newNode","nextElementSibling","next","matches","previous","previousElementSibling","num","indexInParent","parentElement","parents","closest","attribute","global","getComputedStyle","parseInt","clientWidth","clientHeight","_listeners","event","delegate","callback","namespace","hasDelegate","eventFunc","target","cancel","removeEventListener","listeners","newCancel","findIndex","matchFilter","listener","defaultFilter","list","__offAll","onMount","wrappedCallback","unsubscribe","subscribe","addedNodes","onMountChange","onUnmount","elements","domWrapper","appendChild","Element","DOM","ThemeModule","loadThemeData","themes","theme","addStyle","unescape","saveThemeData","enableTheme","bdEvents","version","disableTheme","removeStyle","toggleTheme","bdtheme","updateThemeList","editorDetached","protect","theModule","isDefault","clear","sort","getToken","getEmail","showToken","proxy","Proxy","getOwnPropertyDescriptor","func","__proto__","findByUniqueProperties","internal","getInternalInstance","V2","joinBD1","InviteActions","acceptInviteAndTransitionToInviteChannel","leaveBD1","GuildActions","leaveGuild","joinBD2","leaveBD2","joinLC","leaveLC","anchor","anchorUnderlineOnHover","guildsWrapper","wrapper","unreadMentionsBar","guilds","guildsError","selected","pill","blobContainer","defaultProps","search","submit","activateRagingDemon","dismiss","openDM","userId","selfId","UserStore","getCurrentUser","privateChannelId","ChannelStore","getDMFromUserId","PrivateChannelActions","selectPrivateChannel","ChannelActions","openPrivateChannel","parseSettings","reduce","setting","Math","max","documentElement","innerWidth","innerHeight","_windowConfigFile","transparent","frame","charCodeAt","channelTextArea","titleWrapper","textarea","focus","selectionStart","selectionEnd","execCommand","moduleName","groupCollapsed","groupEnd","string","replacement","RegExp","method","params","what","methodName","before","after","instead","once","silent","force","origMethod","canceled","thisObject","methodArguments","cancelPatch","originalMethod","callOriginalMethod","returnValue","tempRet","suppressErrors","__monkeyPatched","__originalMethod","sidebar","hasNotice","form","bottom","toastWrapper","icon","timeout","toastElem","innerText","modalModule","modal","inner","hideOnFullscreen","headerModule","header","responsiveWidthMobile","footer2Module","focusLock","backdrop","backdropWithLayer","footer","addClass","closingListeners","onClose","pluginErrors","themeErrors","generateTab","el","tabs","removeClass","scroller","index","click","ModalStack","ChangelogClasses","TextElement","FlexChild","Titles","Changelog","selectable","MarkdownParser","image","subtitle","ce","changelogItems","entry","margin","marginTop","renderHeader","Child","grow","shrink","tag","Tags","H4","Sizes","SMALL","Colors","STANDARD","date","renderFooter","Anchor","AnchorClasses","joinSupportServer","stopPropagation","supportLink","defaultFooter","onScroll","ModalActions","Markdown","ConfirmationModal","emptyFunction","openModal","red","modalKey","V2_SettingsPanel_Sidebar","panels","register","panel","component","getComponent","Settings","devMode","section","LCitems","LCDevItems","injectColoredText","cancelColoredText","MessageComponent","monkeyPatch","childrenMessageContent","messageContent","originalType","roleColor","colorString","removeColoredText","classNameMarkup","markup","inject24Hour","cancel24Hour","twelveHour","convert","matched","match","padStart","cancelCozy","TimeFormatter","cancelCompact","remove24Hour","V2C_SettingsTitle","reactComponent","V2C_TabBarSeparator","V2C_ServerCard","server","iconUrl","fallback","state","imageError","joined","guildList","identifier","cardModule","card","cardPrimary","flexModule","flexChild","_horizontalReverse","wrapModule","noWrap","streamerModeEnabled","marginBottom8","pinned","ref","onError","handleError","draggable","horizontal","members","flex","categories","minHeight","backgroundColor","setState","useState","SettingsView","V2C_PublicServers","setInitialState","changeCategory","searchKeyDown","checkConnection","connect","GuildStore","AvatarDefaults","SortedGuildStore","hooks","componentDidMount","selectedCategory","loading","servers","connection","user","categorySlugs","fetch","searchEndPoint","end","term","categoryButtons","total","serverCard","acceptInvite","invite_code","joinEndPoint","credentials","windowOptions","round","screenX","screenY","win","joinWindow","webContents","loadURL","setMenuBarVisibility","resizable","maximizable","minimizable","alwaysOnTop","center","webPreferences","nodeIntegration","getFlattenedGuildIds","defaultList","DEFAULT_AVATARS","ServerCard","online","nativejoin","floor","random","response","onSetSection","sections","searchInput","getThis","setValue","marginLeft","serchinput","refs","searchinput","onKeyDown","onChange","placeholder","maxLength","which","notConnected","columnModule","contentColumnDefault","contentColumn","SettingsTitle","bdServer","marginBottom","lineHeight","forceUpdate","useEffect","TabBarSeparator","fontSize","username","discriminator","padding","BugHunterBadge","Circus","xmlns","cx","cy","uuidv4","awaitingBadgesPromises","badgesToFetch","_cache","badges","DistantServer","newPromise","badge","Constants","defaultUsers","fetchedBadges","users","handleRequest","Routes","responseBody","promise","user_id","LightcordError","route","SERVER_URL","Authorization","reject","scopes","layers","Layers","inject","isInjected","classNameLayers","v2","ReactInstance","FindReact","createLayer","getLayer","lay","LayerModules","Layer","animation","Value","keydown","ev","componentWillEnter","toValue","componentWillLeave","interpolation","interpolate","inputRange","outputRange","opacity","transform","scale","Div","__SECRET_EMOTION__","position","right","overflow","WebkitBoxOrient","WebkitBoxDirection","msFlexDirection","flexDirection","zIndex","paddingTop","_appendButton","V2_PublicServers","rootId","btn","guildClasses","listItem","circleButtonMask","classNametutorialContainer","downloadProgress","tutorialContainer","button","addButton","guildPatch","GuildList","webpackModules","GuildListOld","removeButton","randClass","ClassNormalizer","unpatchClassModules","moduleFilter","revertElement","patchClassModules","normalizeElement","patchDOMMethods","patchClassModule","unpatchClassModule","shouldIgnore","isNaN","baseClassName","componentName","classNames","normalClass","camelCase","newString","clen","newClass","toRemove","DOMTokenList","token","tokens","debugListener","copySelectorListener","startDebugListener","startCopySelector","stopDebugListener","stopCopySelector","getSelector","classLayer","classItems","menu","cm","cmWrap","styleFlexible","accommodateScrollbar","clientY","clientX","setAttribute","scrollerClasses","scrollerWrap","scrollerThemed","themeGhostHairline","removeCM","keyCode","cmg","cmi","item","labelContainer","colorDefault","NativeModule","copy","queryAll","focused","separator","scrollHeight","names","unshift","ownerDocument","entries","Switch","checked","switch","Components","inputs","classnames","getClassName","SwitchItem","beta","userSettingsVoice","formModule","switchItem","betaClassNames","marginModule","marginTop60","MarginTop","V2C_SettingsGroup","renderOldSettings","buttonComponent","componentDidCatch","errInfo","FormSection","FormText","hideBorder","DEFAULT","Themes","note","setImmediate","V2C_SectionedSettingsPanel","SettingsGroup","V2C_Checkbox","checkboxElement","checkbox","checkboxInner","V2C_CssEditorDetached","updateCss","saveCss","editor","ace","setTheme","session","setMode","setShowPrintMargin","setFontSize","destroy","updateLineCount","lineCount","lines","lineNumbers","indentUnit","scrollbarStyle","_ccss","ccss","_root","injectRoot","detachedRoot","insertAfter","Checkbox","borderRadius","borderRight","borderLeft","saveSettings","attach","unmountComponentAtNode","root","getValue","V2C_CssEditor","detachedEditor","detach","detached","componentDidUpdate","prevProps","prevState","codeMirror","arg","droot","injectDetachedRoot","BDErrorBoundary","hasError","originalRender","configurable","V2C_ContentColumn","V2C_ReloadIcon","V2C_XSvg","fillRule","Edit","Delete","anchorClasses","V2C_PluginCard","showSettings","hasSettings","addon","getSettingsPanel","settingsPanel","reloads","trusted","closeSettings","panelRef","current","settingsOpen","settingspanel","cardNode","cTop","scrollTop","cBottom","eTop","offsetTop","eBottom","isHidden","thisNodeOffset","offset","containerOffset","original","endPoint","getString","XSvg","dangerouslySetInnerHTML","__html","buildTitle","author","nameIndex","versionIndex","authorIndex","LayerStack","popLayer","makeLink","makeButton","action","unmounted","links","invite","tester","donate","patreon","settingsComponent","authorId","authorLink","isScanning","DownArrow","Select","open","dropdown","createRef","showMenu","hideMenu","opt","isOpen","Search","onFocus","onBlur","CardList","ascending","isPlugins","cookie","manager","reverse","onAddonChanges","openFolder","openPath","confirmDelete","BdApi","toLocaleLowerCase","getProps","getAddons","sortedAddons","a","b","cap","first","second","localeCompare","rendered","renderCheckUpdates","ZeresPluginLibrary","PluginUpdates","checkAll","tooltipIsShowing","onMouseLeave","Button","look","hoverColor","onRightClick","checkUpdateButton","refreshIcon","addonCards","sortOptions","directions","dispatcher","Dispatcher","ActionTypes","pid","game","application_id","details","timestamps","assets","large_image","small_image","sendGame","LOCAL_ACTIVITY_UPDATE","socketId","activity","formatedGame","applicationId","getAssets","V2C_PresenceSettingsModules","V2C_PresenceSettings","preview","isfetching","fetchAssets","assetComponents","Set","updateWhenFetched","comp","defaultSetting","RPCProps","CustomRichPresence","asset","updatePreview","marginBottom20","optionsComponents","RpcPreview","ohgodohfuck","openExternal","_optionsComponents","InputText","InputNumber","InputChoice","choices","inputTextModules","InputNumberModules","InputChoiceModules","PureComponent","removeKeybind","defaultMarginh5","colorStandard","size32","_horizontal","inputMini","size16","size20","input","TextInput","lastEdited","isTiming","rowModule","marginModule2","colorModule","sizeModule","inputModule","sizeModule2","row","size14","h5","Divider","colorTransparent","clipboard","Dropdown","emptyClasses","popoutModules","UserPopoutComponent","PopoutProps","profileModules","UserProfileComponent","ProfileProps","connectedProfileStore","DividerModules","divider","dividerDefault","active","changeTab","tab","setActive","Tab","rpc","isActive","Profile","Popout","PresenceErrorCatcher","emptyStateImage","emptyState","emptyStateHeader","emptyStateSubtext","role","tabindex","UserPopout","userModule","render1","guildId","channelId","disableUserProfileLink","_UserPopout","popout","excludeProperties","UserProfile","render2","render3","render4","profile","scrollbarModule1","scrollbarGhostHairline","GuildModule","getGuilds","relationShipModule","getRelationships","sessionModule","getSessions","V2C_AccountInfos","CodeContent","getProfileValue","language","getStatistics","getSessionValue","sessionsRaw","sessions","sessionId","clientInfo","os","client","activities","repeat","createdAt","avatarURL","avatar","getAvatarURL","getDate","getMonth","getFullYear","getHours","getMinutes","getSeconds","flags","hasPremiumSubscription","email","mfaEnabled","mobile","phone","verified","nsfwAllowed","relations","friends","isFriend","blocked","isBlocked","hightlightJS","highlight","messageModule1","messageModule2","listLanguages","DiscordModules","ChannelModule","getChannel","hasChannel","addRelationship","DMModule","closePrivateChannel","antiDM","bot","guild_id","channel","channel_id","EmbedsContains","location","embeds","embed","fields","selectors","standardSidebarView","defaultClassName","selects","userSettingsAccount","paymentSourceRow","subText","descriptionWrapper","viewBody","userSettingsSecurity","getSelectors","startTyping","typingModule","stopTyping","DisableTyping","ApiPreview","states","allComponents","general","AlertBox","compName","compPath","ComponentPreview","AllPreviews","getStrForProp","lang","String","$$typeof","for","generateCode","openTag","propStrings","childrenProp","str","propObject","isLast","childrenData","help","success","SettingSubTitle","searchable","Tabs","ErrorCatcher","CodeBlock","History","windows","Map","init","popoutModule","getWindow","applyThemes","removeThemes","themeName","existing","removeAttribute","BDSidebarHeader","sidebarComponents","Separator","Header","Item","changelogButton","showChangelogModal","isClearingCache","updateSettings","registerComponents","makeComponent","lightcordComponent","PresenceComponent","AccountInfosComponent","ApiPreviewComponent","coreComponent","customCssComponent","renderAddonPane","getSettings","publicServersModule","voiceMode","tfHour","coloredText","setWindowPreference","dMode","callRingingBeat","settingsStore","showCurrentGame","updateRemoteSettings","ipcRenderer","AntiAdDM","blurPrivate","disableTyping","appSettings","relaunch","popoutWindow","core","methods","NotificationsUseShim","loadSettings","renderSidebar","SectionedSettingsPanel","coreSettings","isChecked","ipc","send","actual","clearable","invoke","argv","clearCache","PresenceSettings","CssEditor","ContentList","prefix","SettingComponent","BDLogo","clipRule","strokeLinecap","strokeLinejoin","LightcordLogo","x1","y1","x2","y2","gradientTransform","gradientUnits","stopColor","EmojiRegex","CustomEmojiModule","CustomEmoji","EmojiModuleApi","getCustomEmojiById","AutocompleteModule","AutoCompletionTemplates","getAutocompleteOptions","EmojiModuleQuery","queryEmojiResults","Messages","EMOJI_MATCHING","guildModule","getGuild","isFetching","emojiSearch","getDisambiguatedEmojiContext","LIGHTCORD_EMOJIS","arg1","arg2","condition","setEmojiUsable","queryResults","renderResults","D","emojis","EMOJI","Emoji","emoji","uniqueName","sentinel","guild","getPlainText","isAnimated","animated","managed","originalName","getRawText","cancelEmojiRender","cancelEmoteRender","getNestedProp","newContent","hasParsed","raw","words","word","emojiId","jumboable","shift","u","onHover","R","Title","classNameLayer","classNameSocialLinks","classNameModal","EmojiFilterModule","isEmojiDisabled","isUsable","usable","surrogates","diversity","Core","setConfig","config","hasStarted","setMethods","ED","WebSocket","patchAttributes","initSettings","checkForGuilds","initializeSettings","getElementsByClassName","initObserver","previousVersion","EmojiModule","patchSocial","patchGuildPills","patchGuildListItems","patchGuildSeparator","patchMessageHeader","patchMemberList","patchAttachment","haveInstalledDefault","logo","attribsPatchs","cancelPatchAttributes","DiscordTag","DiscordTagComp","badgeDiv","TooltipWrap","applyBadges","timesChecked","blob","deferLoaded","readyState","injectExternals","getPredicateSections","settingModule","poped","mlen","animating","socialLinks","getAttribute","socialPatch","TabBar","socialModule1","newOne","returnVal","classNameColorMuted","sizes","classNameVersionHash","colorMuted","versionHash","branch","buildInfo","additional","size12","commit","originalVersions","chat","blockDiv","distant","getBadges","scope","div2","guildListItemsPatch","GuildClasses","getGuildClasses","listItemClass","blobClass","GuildComponent","return","guildData","unread","audio","video","animatable","guildPillPatch","guildPill","hovered","guildSeparatorPatch","Guilds","guildComponents","GuildSeparator","AttachmentPatch","Attachment","messageHeaderPatch","MessageHeader","memberListPatch","MemberListItem","renderDecorators","updateInjector","ReactDom","ReactComponent","WindowConfigFile","getAllWindowPreferences","getWindowPreference","addScript","removeScript","mainCore","protos","getData","loadData","saveData","setData","deleteData","onRemoved","isPluginEnabled","isThemeEnabled","isSettingEnabled","enableSetting","disableSetting","toggleSetting","makeAddonAPI","folder","isEnabled","getAll","Plugins","contentWindowGetter","HTMLIFrameElement","contentWindow","writable","Function","oOpen","XMLHttpRequest","localStorageFix","v2Loader","loadingIcon","deprecateGlobal","globalKeys","Globals","CoreWrapper"],"mappings":"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","file":"index.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","module.exports = require(\"electron\");","module.exports = require(\"path\");","module.exports = require(\"fs\");","module.exports = require(\"crypto\");","module.exports = require(\"node-fetch\");","module.exports = require(\"events\");","module.exports = require(\"module\");","export const minimumDiscordVersion = \"0.0.308\";\nexport const currentDiscordVersion = (window.DiscordNative && window.DiscordNative.remoteApp && window.DiscordNative.remoteApp.getVersion && window.DiscordNative.remoteApp.getVersion()) || \"0.0.308\";\nexport const minSupportedVersion = \"0.3.0\";\nexport const bbdVersion = \"0.3.5\";\nexport const bbdChangelog = {\n description: \"Big things are coming.\",\n changes: [\n {\n title: \"Bug Fixes\",\n type: \"fixed\",\n items: [\n \"Some fixes related to showing modals in the `BdApi`.\",\n \"Fixed the open folder buttons for plugins and themes\"\n ]\n }\n ]\n};\n\nexport const settings = {\n \"Custom css live update\": {id: \"bda-css-0\", info: \"\", implemented: true, hidden: true, cat: \"core\"},\n \"Custom css auto udpate\": {id: \"bda-css-1\", info: \"\", implemented: true, hidden: true, cat: \"core\"},\n \"BetterDiscord Blue\": {id: \"bda-gs-b\", info: \"Replace Discord blue with BD Blue\", implemented: false, hidden: false, cat: \"core\"},\n\n /* Core */\n /* ====== */\n \"Public Servers\": {id: \"bda-gs-1\", info: \"Display public servers button\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Minimal Mode\": {id: \"bda-gs-2\", info: \"Hide elements and reduce the size of elements.\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Voice Mode\": {id: \"bda-gs-4\", info: \"Only show voice chat\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Hide Channels\": {id: \"bda-gs-3\", info: \"Hide channels in minimal mode\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Dark Mode\": {id: \"bda-gs-5\", info: \"Make certain elements dark by default(wip)\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Voice Disconnect\": {id: \"bda-dc-0\", info: \"Disconnect from voice server when closing Discord\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"24 Hour Timestamps\": {id: \"bda-gs-6\", info: \"Replace 12hr timestamps with proper ones\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Colored Text\": {id: \"bda-gs-7\", info: \"Make text color the same as role color\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n \"Normalize Classes\": {id: \"fork-ps-4\", info: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\", implemented: true, hidden: false, cat: \"core\", category: \"modules\"},\n\n /* Content */\n \"Content Error Modal\": {id: \"fork-ps-1\", info: \"Shows a modal with plugin/theme errors\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Scan Plugins\": {id: \"fork-ps-6\", info: \"Scan plugins for any threat that can be hidden inside.\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Show Toasts\": {id: \"fork-ps-2\", info: \"Shows a small notification for important information\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Scroll To Settings\": {id: \"fork-ps-3\", info: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Automatic Loading\": {id: \"fork-ps-5\", info: \"Automatically loads, reloads, and unloads plugins and themes\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Enable Edit Button\": {id: \"fork-ps-7\", info: \"Enable an Edit Button on the plugin and theme panel.\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\"},\n \"Themes in Popout Window\": {id: \"lightcord-9\", info: \"Enable themes in Popout Window. (For example, when detaching screenshare.)\", implemented: true, hidden: false, cat: \"core\", category: \"content manager\", experimental: true},\n\n /* Developer */\n \"Developer Mode\": \t {id: \"bda-gs-8\", info: \"Developer Mode Toggle\", implemented: true, hidden: false, cat: \"core\", category: \"developer settings\"},\n \"Copy Selector\":\t\t\t {id: \"fork-dm-1\", info: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\", implemented: true, hidden: false, cat: \"core\", category: \"developer settings\"},\n\n /** Lightcord */\n \"Disable BetterDiscord\": {id: \"bd-disable\", info: \"Disable Betterdiscord (plugins, themes, etc) (Not implemented).\", implemented: false, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Blur Personal Information\": {id: \"lightcord-6\", info: \"Blur sensitive informations like email, payment infos and more.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Calling Ring Beat\": {id: \"lightcord-2\", info: \"Enable Discord's special calling beat.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Developer Options\": {id: \"lightcord-1\", info: \"Enable Discord's & Lightcord's Internal Developer Options. This allow the \\\"Experiments\\\" tab, the \\\"Developer Options\\\" tab and the \\\"Lightcord Api\\\" section.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Ad Block\": {id: \"lightcord-4\", info: \"Block any BOT that dms you with an invite link. Even in an embed.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Enable Lightcord Servers\": {id: \"lightcord-5\", info: \"Enable Lightcord's servers. Disabling this will disable custom badges.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Disable typing\": {id: \"lightcord-7\", info: \"Don't let other see you're typing.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\"},\n \"Lightcord Tabs\": {id: \"lightcord-8\", info: \"Allows you to launch multiple instances of Lightcord in the same window.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Lightcord\", experimental: true},\n \"Use Notification Shim\": {id: \"lightcord-10\", info: \"Basically don't use Windows's Notifications.\", implemented: true, hidden: process.platform !== \"win32\", cat: \"lightcord\", category: \"Lightcord\", experimental: false},\n\n /** Lightcord Window */\n \"Always-on-Top\": {id: \"lightcord-3\", info: \"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Window\"},\n \"No Window Bounds\": {id: \"no_window_bound\", info: \"Disable Window Bounds. Can be useful if you use a window manager.\", implemented: true, hidden: process.platform !== \"linux\", cat: \"lightcord\", category: \"Window\"},\n \"Enable Glasstron\": {id: \"enable_glasstron\", info: \"Enable Glasstron. If you're not using transparent themes, this can reduce lag.\", implemented: true, hidden: false, cat: \"lightcord\", category: \"Window\"},\n \n /** RichPresence */\n \"Enable\": {id: \"lightcord-presence-1\", info: \"Enable RichPresence below.\", implemented: true, hidden: false, cat: \"status\"}\n};\n\nexport const defaultCookie = {\n \"bda-gs-1\": true,\n \"bda-gs-2\": false,\n \"bda-gs-3\": false,\n \"bda-gs-4\": false,\n \"bda-gs-5\": true,\n \"bda-gs-6\": false,\n \"bda-gs-7\": false,\n \"bda-gs-8\": false,\n \"bda-es-0\": true,\n \"bda-es-1\": true,\n \"bda-es-2\": true,\n \"bda-es-4\": false,\n \"bda-es-6\": true,\n \"bda-es-7\": true,\n \"bda-gs-b\": false,\n \"bda-es-8\": true,\n \"bda-dc-0\": false,\n \"bda-css-0\": false,\n \"bda-css-1\": false,\n \"bda-es-9\": true,\n \"fork-dm-1\": false,\n \"fork-ps-1\": true,\n \"fork-ps-2\": true,\n \"fork-ps-3\": true,\n \"fork-ps-4\": true,\n \"fork-ps-5\": true,\n \"fork-ps-6\": true,\n \"fork-ps-7\": false,\n \"fork-es-2\": false,\n \"fork-es-3\": true,\n \"fork-wp-1\": false,\n \"fork-wp-2\": false,\n \"fork-beta\": true,\n \"lightcord-1\": false,\n \"lightcord-2\": true,\n \"lightcord-presence-1\": false,\n \"lightcord-3\": false,\n \"lightcord-4\": false,\n \"lightcord-5\": true,\n \"lightcord-6\": true,\n \"lightcord-7\": false,\n \"lightcord-8\": false,\n \"lightcord-9\": false,\n \"lightcord-10\": false,\n \"no_window_bound\": false,\n};\n\n\nexport const settingsCookie = {};\n\nexport const settingsRPC = {};\nexport const defaultRPC = {\n \"name\": \"Lightcord\",\n \"application_id\": \"711416957718757418\",\n \"state\": \"Lightcord Client\",\n \"details\": \"Browsing Discord\",\n \"timestamps.start\": Date.now(),\n \"assets.small\": null,\n \"assets.large\": \"712323821037682791\"\n}\n\nexport const lightcordSettings = {};\nexport const defaultLightcordSettings = {};\n\nexport const bdpluginErrors = [];\nexport const bdthemeErrors = []; // define for backwards compatibility\n\nexport const bdConfig = Object.create(BetterDiscordConfig);\n\nexport const bdthemes = {};\nexport const bdplugins = {};\n\nexport const pluginCookie = {};\nexport const themeCookie = {};","const req = webpackJsonp.push([[], {__extra_id__: (module, exports, req) => module.exports = req}, [[\"__extra_id__\"]]]);\r\ndelete req.m.__extra_id__;\r\ndelete req.c.__extra_id__;\r\nconst find = (filter) => {\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) return m.default;\r\n if (m && filter(m))\treturn m;\r\n }\r\n }\r\n // console.warn(\"Cannot find loaded module in cache\");\r\n return null;\r\n};\r\n\r\nconst findAll = (filter) => {\r\n const modules = [];\r\n for (const i in req.c) {\r\n if (req.c.hasOwnProperty(i)) {\r\n const m = req.c[i].exports;\r\n if (m && m.__esModule && m.default && filter(m.default)) modules.push(m.default);\r\n else if (m && filter(m)) modules.push(m);\r\n }\r\n }\r\n return modules;\r\n};\r\n\r\nconst findByProps = (...propNames) => find(module => propNames.every(prop => module[prop] !== undefined));\r\nconst findByPrototypes = (...protoNames) => find(module => module.prototype && protoNames.every(protoProp => module.prototype[protoProp] !== undefined));\r\nconst findByDisplayName = (displayName) => find(module => module.displayName === displayName);\r\n\r\nlet mod = {find, findAll, findByProps, findByPrototypes, findByDisplayName};\r\nexport default mod\r\n\r\nwindow.Lightcord.BetterDiscord.WebpackModules = mod","import Utils from \"./utils\";\nimport ContentManager from \"./contentManager\";\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst releaseChannel = DiscordNative.globals ? DiscordNative.globals.releaseChannel : DiscordNative.app ? DiscordNative.app.getReleaseChannel() : \"stable\";\n\nlet dataPath = \"\";\nif (process.platform === \"win32\") dataPath = process.env.APPDATA;\nelse if (process.platform === \"darwin\") dataPath = path.join(process.env.HOME, \"Library\", \"Preferences\");\nelse dataPath = process.env.XDG_CONFIG_HOME ? process.env.XDG_CONFIG_HOME : path.join(process.env.HOME, \".config\");\ndataPath = path.join(dataPath, \"BetterDiscord\");\n\nexport default new class DataStore {\n constructor() {\n this.data = {settings: {stable: {}, canary: {}, ptb: {}}};\n this.pluginData = {};\n window.Lightcord.BetterDiscord.DataStore = this\n }\n\n initialize() {\n try {\n if (!fs.existsSync(this.BDFile)) fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\n const data = JSON.parse(fs.readFileSync(this.BDFile, \"utf-8\"))\n if (data.hasOwnProperty(\"settings\")) this.data = data;\n if (!fs.existsSync(this.settingsFile)) return;\n let settings = __non_webpack_require__(this.settingsFile);\n fs.unlinkSync(this.settingsFile);\n if (settings.hasOwnProperty(\"settings\")) settings = Object.assign({stable: {}, canary: {}, ptb: {}}, {[releaseChannel]: settings});\n else settings = Object.assign({stable: {}, canary: {}, ptb: {}}, settings);\n this.setBDData(\"settings\", settings);\n }\n catch (err) {\n console.error(err);\n Utils.alert(\"Corrupt Storage\", \"The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.\");\n }\n }\n\n get injectionPath() {\n return this._injectionPath = null;\n }\n\n get configFile() {return this._configFile || (this._configFile = path.resolve(this.injectionPath, \"betterdiscord\", \"config.json\"));}\n get BDFile() {return this._BDFile || (this._BDFile = path.resolve(dataPath, \"bdstorage.json\"));}\n get settingsFile() {return this._settingsFile || (this._settingsFile = path.resolve(dataPath, \"bdsettings.json\"));}\n getPluginFile(pluginName) {return path.resolve(ContentManager.pluginsFolder, pluginName + \".config.json\");}\n\n getSettingGroup(key) {\n return this.data.settings[releaseChannel][key] || null;\n }\n\n setSettingGroup(key, data) {\n this.data.settings[releaseChannel][key] = data;\n fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\n }\n\n getBDData(key) {\n return this.data[key] || \"\";\n }\n\n setBDData(key, value) {\n this.data[key] = value;\n fs.writeFileSync(this.BDFile, JSON.stringify(this.data, null, 4), \"utf-8\");\n }\n\n getPluginData(pluginName, key) {\n if (this.pluginData[pluginName] !== undefined) return this.pluginData[pluginName][key];\n if (!fs.existsSync(this.getPluginFile(pluginName))) return undefined;\n this.pluginData[pluginName] = JSON.parse(fs.readFileSync(this.getPluginFile(pluginName)));\n return this.pluginData[pluginName][key];\n }\n\n setPluginData(pluginName, key, value) {\n if (value === undefined) return;\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n this.pluginData[pluginName][key] = value;\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4), \"utf-8\");\n }\n\n deletePluginData(pluginName, key) {\n if (this.pluginData[pluginName] === undefined) this.pluginData[pluginName] = {};\n delete this.pluginData[pluginName][key];\n fs.writeFileSync(this.getPluginFile(pluginName), JSON.stringify(this.pluginData[pluginName], null, 4), \"utf-8\");\n }\n};","/* BDEvents */\nconst EventEmitter = require(\"events\");\nexport default new class BDEvents extends EventEmitter {\n constructor(){\n super()\n window.Lightcord.BetterDiscord.BDEvents = this\n }\n dispatch(eventName, ...args) {this.emit(eventName, ...args);}\n off(eventName, eventAction) {this.removeListener(eventName, eventAction);}\n};","import {bdpluginErrors, pluginCookie, settingsCookie, bdplugins} from \"../0globals\";\nimport ContentManager from \"./contentManager\";\nimport DataStore from \"./dataStore\";\nimport BDEvents from \"./bdEvents\";\nimport Utils from \"./utils\";\n\nclass PluginModule {\n constructor(){\n window.Lightcord.BetterDiscord.PluginModule = this\n }\n get folder() {return ContentManager.pluginsFolder;}\n}\n\nPluginModule.prototype.loadPlugins = async function () {\n this.loadPluginData();\n bdpluginErrors.splice(0, 0, ...(await ContentManager.loadPlugins()));\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n let plugin, name;\n\n try {\n plugin = bdplugins[plugins[i]].plugin;\n name = plugin.getName();\n if (plugin.load && typeof(plugin.load) == \"function\") plugin.load();\n } catch (err) {\n pluginCookie[name] = false;\n Utils.err(\"Plugins\", name + \" could not be loaded.\", err);\n bdpluginErrors.push({name: name, file: bdplugins[plugins[i]].filename, message: \"load() could not be fired.\", error: {message: err.message, stack: err.stack}});\n continue;\n }\n\n if (!pluginCookie[name]) pluginCookie[name] = false;\n\n if (pluginCookie[name]) {\n try {\n plugin.start();\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin.getName()} v${plugin.getVersion()} has started.`);\n } catch (err) {\n pluginCookie[name] = false;\n Utils.err(\"Plugins\", name + \" could not be started.\", err);\n bdpluginErrors.push({name: name, file: bdplugins[plugins[i]].filename, message: \"start() could not be fired.\", error: {message: err.message, stack: err.stack}});\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n this.savePluginData();\n\n require(\"electron\").remote.getCurrentWebContents().on(\"did-navigate-in-page\", this.channelSwitch.bind(this));\n // if (settingsCookie[\"fork-ps-5\"]) ContentManager.watchContent(\"plugin\");\n};\n\nPluginModule.prototype.startPlugin = function(plugin, reload = false) {\n try {\n bdplugins[plugin].plugin.start();\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} has started.`);\n }\n catch (err) {\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} could not be started.`, {type: \"error\"});\n pluginCookie[plugin] = false;\n this.savePluginData();\n Utils.err(\"Plugins\", plugin + \" could not be started.\", err);\n }\n};\n\nPluginModule.prototype.stopPlugin = function(plugin, reload = false) {\n try {\n bdplugins[plugin].plugin.stop();\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} has stopped.`);\n }\n catch (err) {\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${bdplugins[plugin].plugin.getName()} v${bdplugins[plugin].plugin.getVersion()} could not be stopped.`, {type: \"error\"});\n Utils.err(\"Plugins\", bdplugins[plugin].plugin.getName() + \" could not be stopped.\", err);\n }\n};\n\nPluginModule.prototype.enablePlugin = function (plugin, reload = false) {\n if (pluginCookie[plugin]) return;\n pluginCookie[plugin] = true;\n this.savePluginData();\n this.startPlugin(plugin, reload);\n};\n\nPluginModule.prototype.enable = function (plugin, reload = false) {\n return this.enablePlugin(plugin, reload);\n};\n\nPluginModule.prototype.disablePlugin = function (plugin, reload = false) {\n if (!pluginCookie[plugin]) return;\n pluginCookie[plugin] = false;\n this.savePluginData();\n this.stopPlugin(plugin, reload);\n};\n\nPluginModule.prototype.disable = function (plugin, reload = false) {\n return this.disablePlugin(plugin, reload);\n};\n\nPluginModule.prototype.togglePlugin = function (plugin) {\n if (pluginCookie[plugin]) this.disablePlugin(plugin);\n else this.enablePlugin(plugin);\n};\n\nPluginModule.prototype.toggle = function (plugin, reload = false) {\n return this.togglePlugin(plugin, reload);\n};\n\nPluginModule.prototype.loadPlugin = async function(filename) {\n const error = await ContentManager.loadContent(filename, \"plugin\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${filename} could not be loaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${filename} could not be loaded.`, error);\n }\n const plugin = Object.values(bdplugins).find(p => (console.log(p.filename, filename)) || p.filename == filename).plugin;\n try { if (plugin.load && typeof(plugin.load) == \"function\") plugin.load();}\n catch (err) {if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [err]});}\n Utils.log(\"ContentManager\", `${plugin.getName()} v${plugin.getVersion()} was loaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin.getName()} v${plugin.getVersion()} was loaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-loaded\", plugin.getName());\n};\n\nPluginModule.prototype.unloadPlugin = function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n const plugin = bdplugin.plugin.getName();\n if (pluginCookie[plugin]) this.disablePlugin(plugin, true);\n const error = ContentManager.unloadContent(bdplugins[plugin].filename, \"plugin\");\n delete bdplugins[plugin];\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} could not be unloaded. It may have not been loaded yet.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${plugin} could not be unloaded. It may have not been loaded yet.`, error);\n }\n Utils.log(\"ContentManager\", `${plugin} was unloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} was unloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-unloaded\", plugin);\n};\n\nPluginModule.prototype.delete = function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n this.unloadPlugin(bdplugin.filename);\n const fullPath = require(\"path\").resolve(ContentManager.pluginsFolder, bdplugin.filename);\n require(\"fs\").unlinkSync(fullPath);\n};\n\nPluginModule.prototype.reloadPlugin = async function(filenameOrName) {\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return this.loadPlugin(filenameOrName);\n const plugin = bdplugin.plugin.getName();\n const enabled = pluginCookie[plugin];\n if (enabled) this.stopPlugin(plugin, true);\n const error = await ContentManager.reloadContent(bdplugins[plugin].filename, \"plugin\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({plugins: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} could not be reloaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${plugin} could not be reloaded.`, error);\n }\n if (bdplugins[plugin].plugin.load && typeof(bdplugins[plugin].plugin.load) == \"function\") bdplugins[plugin].plugin.load();\n if (enabled) this.startPlugin(plugin, true);\n Utils.log(\"ContentManager\", `${plugin} v${bdplugins[plugin].plugin.getVersion()} was reloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${plugin} v${bdplugins[plugin].plugin.getVersion()} was reloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"plugin-reloaded\", plugin);\n};\n\nPluginModule.prototype.reload = function(name) {\n return this.reloadPlugin(name);\n};\n\nPluginModule.prototype.edit = function(filenameOrName) {\n console.log(\"Edit \" + filenameOrName);\n const bdplugin = Object.values(bdplugins).find(p => p.filename == filenameOrName) || bdplugins[filenameOrName];\n if (!bdplugin) return;\n const fullPath = require(\"path\").resolve(ContentManager.pluginsFolder, bdplugin.filename);\n console.log(\"Edit \" + fullPath);\n require(\"electron\").shell.openItem(`${fullPath}`);\n};\n\nPluginModule.prototype.updatePluginList = function() {\n const results = ContentManager.loadNewContent(\"plugin\");\n for (const filename of results.added) this.loadPlugin(filename);\n for (const name of results.removed) this.unloadPlugin(name);\n};\n\nPluginModule.prototype.loadPluginData = function () {\n const saved = DataStore.getSettingGroup(\"plugins\");\n if (saved) {\n Object.assign(pluginCookie, saved);\n }\n};\n\nPluginModule.prototype.savePluginData = function () {\n DataStore.setSettingGroup(\"plugins\", pluginCookie);\n};\n\nPluginModule.prototype.newMessage = function () {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.onMessage === \"function\") {\n try { plugin.onMessage(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire onMessage for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nPluginModule.prototype.channelSwitch = function () {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.onSwitch === \"function\") {\n try { plugin.onSwitch(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire onSwitch for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nPluginModule.prototype.rawObserver = function(e) {\n const plugins = Object.keys(bdplugins);\n for (let i = 0; i < plugins.length; i++) {\n const plugin = bdplugins[plugins[i]].plugin;\n if (!pluginCookie[plugin.getName()]) continue;\n if (typeof plugin.observer === \"function\") {\n try { plugin.observer(e); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to fire observer for \" + plugin.getName() + \".\", err); }\n }\n }\n};\n\nexport default new PluginModule();","/**\n * Tooltip that automatically show and hide themselves on mouseenter and mouseleave events.\n * Will also remove themselves if the node to watch is removed from DOM through\n * a MutationObserver.\n *\n * Note this is not using Discord's internals but normal DOM manipulation and emulates\n * Discord's own tooltips as closely as possible.\n *\n * @module EmulatedTooltip\n * @version 0.0.1\n */\n\nimport Utils from \"../modules/utils\";\nimport WebpackModules from \"../modules/webpackModules\";\nlet TooltipClasses\nfunction getTooltipClasses(){\n\tif(TooltipClasses)return TooltipClasses\n\treturn TooltipClasses = WebpackModules.findByProps(\"tooltip\", \"tooltipBlack\");\n}\nlet TooltipLayers\nfunction getTooltipLayers(){\n\tif(TooltipLayers)return TooltipLayers\n\treturn TooltipLayers = WebpackModules.findByProps(\"layer\", \"layerContainer\");\n}\n\nconst getClass = function(sideOrColor) {\n const upperCase = sideOrColor[0].toUpperCase() + sideOrColor.slice(1);\n const tooltipClass = getTooltipClasses()[`tooltip${upperCase}`];\n if (tooltipClass) return tooltipClass;\n return null;\n};\n\nconst classExists = function(sideOrColor) {\n return getClass(sideOrColor) ? true : false;\n};\n\nconst toPx = function(value) {\n return `${value}px`;\n};\n\nexport default class EmulatedTooltip {\n\t/**\n\t *\n\t * @constructor\n\t * @param {(HTMLElement|jQuery)} node - DOM node to monitor and show the tooltip on\n\t * @param {string} tip - string to show in the tooltip\n\t * @param {object} options - additional options for the tooltip\n\t * @param {string} [options.style=black] - correlates to the discord styling/colors (black, brand, green, grey, red, yellow)\n\t * @param {string} [options.side=top] - can be any of top, right, bottom, left\n\t * @param {boolean} [options.preventFlip=false] - prevents moving the tooltip to the opposite side if it is too big or goes offscreen\n * @param {boolean} [options.disabled=false] - whether the tooltip should be disabled from showing on hover\n * @param {boolean} [options.attachEvents=true] - whether the tooltip should listen to mouseenter and mouseleave events.\n\t */\n\tconstructor(node, text, options = {}) {\n\t\tconst {style = \"black\", side = \"top\", preventFlip = false, disabled = false, attachEvents = true} = options;\n\t\tthis.node = node instanceof jQuery ? node[0] : node;\n this.label = text;\n this.style = style.toLowerCase();\n\t\tthis.side = side.toLowerCase();\n this.preventFlip = preventFlip;\n this.disabled = disabled;\n\n if (!classExists(this.side)) return Utils.err(\"EmulatedTooltip\", `Side ${this.side} does not exist.`);\n\t\tif (!classExists(this.style)) return Utils.err(\"EmulatedTooltip\", `Style ${this.style} does not exist.`);\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.className = getTooltipLayers().layer + \" \" + getTooltipLayers().disabledPointerEvents;\n\n\t\tthis.tooltipElement = document.createElement(\"div\");\n\t\tthis.tooltipElement.className = `${getTooltipClasses().tooltip} ${getClass(this.style)}`;\n\n\t\tthis.labelElement = document.createElement(\"div\");\n\t\tthis.labelElement.className = getTooltipClasses().tooltipContent\n\n\t\tconst pointerElement = document.createElement(\"div\");\n\t\tpointerElement.className = getTooltipClasses().tooltipPointer;\n\n\t\tthis.tooltipElement.append(pointerElement);\n\t\tthis.tooltipElement.append(this.labelElement);\n\t\tthis.element.append(this.tooltipElement);\n\n\t\tif(attachEvents){\n\t\t\tthis.node.addEventListener(\"mouseenter\", () => {\n\t\t\t\tif (this.disabled) return;\n\t\t\t\tthis.show();\n\t\n\t\t\t\tconst observer = new MutationObserver((mutations) => {\n\t\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\t\tconst nodes = Array.from(mutation.removedNodes);\n\t\t\t\t\t\tconst directMatch = nodes.indexOf(this.node) > -1;\n\t\t\t\t\t\tconst parentMatch = nodes.some(parent => parent.contains(this.node));\n\t\t\t\t\t\tif (directMatch || parentMatch) {\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\n\t\t\t\tobserver.observe(document.body, {subtree: true, childList: true});\n\t\t\t});\n\t\n\t\t\tthis.node.addEventListener(\"mouseleave\", () => {\n\t\t\t\tthis.hide();\n\t\t\t});\n\t\t}\n }\n\n /** Container where the tooltip will be appended. */\n get container() { \n\t\treturn document.querySelector(\".\"+Utils.removeDa(BDModules.get(e => e.popouts)[0].popouts)+\" ~ .\"+Utils.removeDa(BDModules.get(e => e.layerContainer)[0].layerContainer)); \n\t}\n /** Boolean representing if the tooltip will fit on screen above the element */\n get canShowAbove() { return this.node.getBoundingClientRect().top - this.element.offsetHeight >= 0; }\n /** Boolean representing if the tooltip will fit on screen below the element */\n get canShowBelow() { return this.node.getBoundingClientRect().top + this.node.offsetHeight + this.element.offsetHeight <= Utils.screenHeight; }\n /** Boolean representing if the tooltip will fit on screen to the left of the element */\n get canShowLeft() { return this.node.getBoundingClientRect().left - this.element.offsetWidth >= 0; }\n /** Boolean representing if the tooltip will fit on screen to the right of the element */\n\tget canShowRight() { return this.node.getBoundingClientRect().left + this.node.offsetWidth + this.element.offsetWidth <= Utils.screenWidth; }\n\n /** Hides the tooltip. Automatically called on mouseleave. */\n\thide() {\n this.element.remove();\n this.tooltipElement.className = this._className;\n\t}\n\n /** Shows the tooltip. Automatically called on mouseenter. Will attempt to flip if position was wrong. */\n\tshow() {\n this.tooltipElement.className = `${getTooltipClasses().tooltip} ${getClass(this.style)}`;\n\t\tthis.labelElement.textContent = this.label;\n\t\tthis.container.append(this.element);\n\n\t\tif (this.side == \"top\") {\n\t\t\tif (this.canShowAbove || (!this.canShowAbove && this.preventFlip)) this.showAbove();\n\t\t\telse this.showBelow();\n\t\t}\n\n\t\tif (this.side == \"bottom\") {\n\t\t\tif (this.canShowBelow || (!this.canShowBelow && this.preventFlip)) this.showBelow();\n\t\t\telse this.showAbove();\n\t\t}\n\n\t\tif (this.side == \"left\") {\n\t\t\tif (this.canShowLeft || (!this.canShowLeft && this.preventFlip)) this.showLeft();\n\t\t\telse this.showRight();\n\t\t}\n\n\t\tif (this.side == \"right\") {\n\t\t\tif (this.canShowRight || (!this.canShowRight && this.preventFlip)) this.showRight();\n\t\t\telse this.showLeft();\n\t\t}\n\t}\n\n /** Force showing the tooltip above the node. */\n\tshowAbove() {\n\t\tthis.tooltipElement.classList.add(getClass(\"top\"));\n\t\tthis.element.style.setProperty(\"top\", toPx(this.node.getBoundingClientRect().top - this.element.offsetHeight - 10));\n\t\tthis.centerHorizontally();\n\t}\n\n /** Force showing the tooltip below the node. */\n\tshowBelow() {\n\t\tthis.tooltipElement.classList.add(getClass(\"bottom\"));\n\t\tthis.element.style.setProperty(\"top\", toPx(this.node.getBoundingClientRect().top + this.node.offsetHeight + 10));\n\t\tthis.centerHorizontally();\n\t}\n\n /** Force showing the tooltip to the left of the node. */\n\tshowLeft() {\n\t\tthis.tooltipElement.classList.add(getClass(\"left\"));\n\t\tthis.element.style.setProperty(\"left\", toPx(this.node.getBoundingClientRect().left - this.element.offsetWidth - 10));\n\t\tthis.centerVertically();\n\t}\n\n /** Force showing the tooltip to the right of the node. */\n\tshowRight() {\n\t\tthis.tooltipElement.classList.add(getClass(\"right\"));\n\t\tthis.element.style.setProperty(\"left\", toPx(this.node.getBoundingClientRect().left + this.node.offsetWidth + 10));\n\t\tthis.centerVertically();\n\t}\n\n\tcenterHorizontally() {\n const nodecenter = this.node.getBoundingClientRect().left + (this.node.offsetWidth / 2);\n this.element.style.setProperty(\"left\", toPx(nodecenter - (this.element.offsetWidth / 2)));\n\t}\n\n\tcenterVertically() {\n\t\tconst nodecenter = this.node.getBoundingClientRect().top + (this.node.offsetHeight / 2);\n\t\tthis.element.style.setProperty(\"top\", toPx(nodecenter - (this.element.offsetHeight / 2)));\n\t}\n}","import BDV2 from \"../modules/v2\";\nimport Tooltip from \"./tooltip\";\n\nexport default class extends React.Component {\n constructor(props) {\n super(props);\n }\n\n async componentDidMount() {\n const {style = \"black\", side = \"top\", text = \"\"} = this.props;\n this.node = BDV2.reactDom.findDOMNode(this);\n this.tooltip = new Tooltip(this.node, text, {style, side});\n }\n\n componentWillUnmount() {\n this.tooltip.hide();\n delete this.tooltip;\n }\n\n render() {\n return this.props.children;\n }\n}","import nodeFetch from \"node-fetch\"\nimport * as electron from \"electron\"\nimport * as crypto from \"crypto\"\nimport BDV2 from \"./v2\"\nimport tooltipWrap from \"../ui/tooltipWrap\"\nimport Utils from \"./utils\"\nimport { createReadStream, writeFileSync } from \"fs\"\nimport { basename, join } from \"path\"\nimport contentManager from \"./contentManager\"\nimport { addonCache } from \"./contentManager\"\n\nconst cache = {}\nconst cache2 = {}\n\nexport default new class PluginCertifier {\n constructor(){\n window.Lightcord.BetterDiscord.PluginCertifier = this\n }\n\n patch(attachment, id){\n process.nextTick(() => {\n processAttachment(attachment, id)\n })\n }\n\n start(){\n\n }\n\n isTrusted(hash){\n return cache[hash] && !cache[hash].suspect\n }\n}\n\nconst tests = [\n [/token/gi, 0],\n [/email/gi, 0],\n [/mfa/gi, 0],\n [/2fa/gi, 0],\n [/phone/gi, 0],\n [/child_process/gi, 0],\n [/localStorage/gi, 0],\n [/getGlobal/gi, 0],\n [/BrowserWindow/gi, 0],\n [/\\.exe/gi, 0],\n [/eval/gi, 0],\n [/WebAssembly/gi, 0],\n [/XMLHttpRequest(\\.|\\[[\"'`])prototype/gi, 0],\n [/window\\.fetch( +)?=/gi, 0],\n /** Obfuscation / hidden / workarounds */\n [/([\"'`]\\+)[\"'`]\\w[\"'`]/gi, 1],\n [/[\"'`]\\w[\"'`](\\+[\"'`])/gi, 1],\n [/\\${[\"'`]\\w+[\"'`]}/gi, 1],\n /** hexadecimal */\n [/_0x\\w{4}\\('0x[\\dabcdef]+'\\)/g, 1],\n [/_0x\\w{4}\\('0x[\\dabcdef]+'( +)?,( +)?'[^']{4}'\\)/g, 1], // _0x8db7('0x0', 'x1]f')\n /** mangled */\n [/\\w+\\('0x[\\dabcdef]+'\\)/g, 1], // b('0x0')\n [/\\w+\\('0x[\\dabcdef]+'( +)?,( +)?'[^']{4}'\\)/g, 1], // b('0x0', 'x1]f')\n /** string array at start */\n [/^var [\\w\\d_$]+=\\[\"/gi, 1]\n]\n\nconst threats = [\n \"Account Stealer/Virus\",\n \"Obfuscation/Hidden code\"\n]\n\nexport function checkViruses(hash, data, resultCallback, removeCallback, filename){\n data = data.toString(\"utf8\")\n let isHarmful = false\n /**\n * @type {string}\n */\n const no_comments = data.replace(/\\/\\*[\\s\\S]*?\\*\\/|([^\\\\:]|^)\\/\\/.*$/gm, \"\").trim()// removing all comments from plugins (remove meta and other.)\n\n for(const [test, type] of tests){\n const scrpt = type === 1 ? no_comments : data\n if(test.exec(scrpt)){\n isHarmful = threats[type]\n break\n }\n }\n\n if(!isHarmful)return removeCallback(hash)\n cache[hash] = {\n suspect: true,\n name: hashToUrl[hash].split(\"/\").pop(),\n type: hashToUrl[hash].endsWith(\".js\") ? \"Plugin\" : \"Theme\",\n harm: isHarmful,\n hash: hash,\n filename\n }\n \n console.log(`Found potentially dangerous ${cache[hash].type.toLowerCase()}: ${cache[hash].name}`)\n\n resultCallback(cache[hash])\n}\n\nconst hashToUrl = {}\n\nexport function checkHash(hash, data, filename, resultCallback, removeCallback){\n console.log(`File: ${filename} hash: ${hash}`)\n if(!cache[hash]){\n nodeFetch(\"https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/\"+hash, { // Using node-fetch to bypass cors\n headers: {\n \"User-Agent\": electron.ipcRenderer.sendSync(\"LIGHTCORD_GET_USER_AGENT\") // have to set user-agent\n }\n }).then(async res => {\n if(res.status !== 200){\n if(filename.endsWith(\".theme.css\"))return removeCallback(hash)\n try{\n checkViruses(hash, data, resultCallback, removeCallback, filename)\n }catch(e){\n console.error(e)\n removeCallback()\n }\n return\n }\n const result = await res.json()\n result.hash = hash\n result.filename = filename\n\n cache[hash] = result\n\n resultCallback(result)\n }).catch((err) => {\n console.error(`Could not read from github. ${err}`)\n if(filename.endsWith(\".theme.css\"))return removeCallback(hash)\n checkViruses(hash, data, resultCallback, removeCallback, filename)\n })\n }else{\n const result = cache[hash]\n\n resultCallback(result)\n }\n}\n\nexport function processFile(__path, resultCallback, removeCallback = (hash) => {}, isFromLoader = false){ \n const hash = crypto.createHash(\"sha256\")\n let data = Buffer.alloc(0)\n\n createReadStream(__path).on(\"data\", chunk => {\n data = Buffer.concat([data, chunk])\n hash.update(chunk)\n }).on(\"end\", () => {\n const hashResult = hash.digest(\"hex\")\n\n hashToUrl[hashResult] = __path\n\n if(isFromLoader && addonCache[hashResult]){\n let value = addonCache[hashResult]\n if(value.timestamp < (Date.now() - 6.048e+8)){\n delete addonCache[hashResult]\n contentManager.saveAddonCache()\n }else{\n resultCallback(value.result)\n return\n }\n }\n\n checkHash(hashResult, data, basename(__path), resultCallback, removeCallback)\n })\n}\n\nexport function processAttachment(attachment, id){\n if(!document.getElementById(id))return\n if(!attachment.url.startsWith(\"https://cdn.discordapp.com/\"))return document.getElementById(id).remove()\n if(!attachment.filename.endsWith(\".plugin.js\") && !attachment.filename.endsWith(\".theme.css\"))return document.getElementById(id).remove()\n\n nodeFetch(attachment.url, {\n headers: {\n \"User-Agent\": electron.ipcRenderer.sendSync(\"LIGHTCORD_GET_USER_AGENT\")\n }\n }).then(res => {\n if(res.status !== 200)throw new Error(\"File doesn't exist.\")\n const hash = crypto.createHash(\"sha256\")\n let data = Buffer.alloc(0)\n res.body.on(\"data\", chunk => {\n data = Buffer.concat([data, chunk])\n hash.update(chunk)\n })\n res.body.on(\"end\", () => {\n const hashResult = hash.digest(\"hex\")\n\n cache2[attachment.url] = hashResult\n hashToUrl[hashResult] = attachment.url\n\n checkHash(hashResult, data, attachment.filename, (result) => {\n renderToElements(id, result, attachment.filename)\n }, () => {\n let elem = document.getElementById(id)\n if(elem)elem.remove()\n })\n })\n }).catch(()=>{})\n}\n\nlet flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0]\nlet childModule = BDModules.get(e => e.childContainer)[0]\n\n/**\n * \n * @param {HTMLDivElement[]} elements \n * @param {{type: \"Theme\"|\"Plugin\", name: string, official?: boolean}|{suspect:true, type: \"Theme\"|\"Plugin\", name: string, harm: string}} result\n */\nfunction renderToElements(id, result, filename){\n const div = document.getElementById(id)\n if(!div || div.childNodes.length > 0)return // already certified/div does not exist anymore.\n\n if(!flowerStarModule)flowerStarModule = BDModules.get(e => e.flowerStarContainer)[0]\n if(!childModule)childModule = BDModules.get(e => e.childContainer)[0]\n \n if(result.suspect){\n try{\n div.parentNode.style.borderColor = \"rgb(240, 71, 71)\"\n /**\n * \n * @param {HTMLElement} node \n */\n let nextNode = (node) => {\n for(let child of node.children){\n if(child.tagName === \"A\"){\n child.addEventListener(\"click\", (e) => {\n e.preventDefault()\n e.stopImmediatePropagation()\n\n Utils.showConfirmationModal(\n \"Are you sure you want to download this ?\", \n \"The \"+result.type.toLowerCase()+\" **\"+filename+\"** might be dangerous **(\"+result.harm+\")**. \\n\\n**We don't recommand to download it**. However, you can still do it below.\", \n {\n confirmText: \"Download Anyway\",\n cancelText: \"Don't !\",\n danger: true,\n onCancel: () => {},\n onConfirm: () => {\n electron.ipcRenderer.sendSync(\"LIGHTCORD_OPEN_EXTERNAL\", child.href)\n }\n }\n )\n })\n }else if([\"div\"].includes(child.tagName.toLowerCase())){\n nextNode(child)\n }\n }\n }\n nextNode(div.parentNode)\n }catch(e){\n console.error(e)\n }\n BDV2.reactDom.render(BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" is potentially dangerous.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}},\n BDV2.react.createElement(\"svg\", {className: BDModules.get(e => e.svg)[0].svg, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 40 32\"},\n BDV2.react.createElement(\"rect\", {\n x:\"0\",\n y:\"0\",\n width:\"32\",\n height:\"32\",\n mask:\"url(#svg-mask-avatar-status-round-32)\",\n fill:\"#f04747\",\n mask:\"url(#svg-mask-status-dnd)\",\n className:BDModules.get(e => e.pointerEvents)[0].pointerEvents\n })\n )\n )\n ), div)\n }else if(!result.official){\n div.parentNode.style.borderColor = \"#4087ed\"\n let span = BDV2.react.createElement(\"span\", {style: {display: \"inherit\"}}, [\n BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" is certified by Lightcord.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\", float: \"left\"}},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"},\n BDV2.react.createElement(\"path\", {fill:\"#4f545c\", \"fill-rule\":\"evenodd\",d:\"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"})\n ),\n BDV2.react.createElement(\"div\", {className: childModule.childContainer}, \n BDV2.react.createElement(\"svg\", {\"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"}, \n BDV2.react.createElement(\"path\", {fill:\"#ffffff\",d:\"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z\"})\n )\n )\n )\n ),\n BDV2.react.createElement(tooltipWrap, {text: \"Install this \"+result.type.toLowerCase()+\" on Lightcord.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}, onClick(){\n Utils.showConfirmationModal(\n \"Are you sure you want to download this \"+result.type.toLowerCase()+\" ?\", \n \"Lightcord will automatically install and launch this \"+result.type.toLowerCase()+\". You don't have anything to do.\", \n {\n confirmText: \"Download and Install\",\n cancelText: \"I've changed my mind\",\n danger: false,\n onCancel: () => {},\n onConfirm: () => {\n let link = getKeyedArray(cache2).find(e => e[1] === result.hash)[0]\n console.log(link)\n nodeFetch(link)\n .then(async res => {\n if(res.status !== 200)throw new Error(\"Status was not 200\")\n let content = await res.buffer()\n let installPath = join(result.type === \"Plugin\" ? contentManager._pluginsFolder : contentManager._themesFolder, result.filename)\n console.log(installPath)\n writeFileSync(installPath, content)\n Utils.showToast(result.type+\" succesfully installed.\")\n }).catch(err => {\n err = err instanceof Error ? err : new Error(err)\n Utils.showToast(err.message, {\n type: \"error\"\n })\n })\n }\n }\n )\n }},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 24 24\",style:{\n color: \"rgb(67, 181, 129)\",\n cursor: \"pointer\"\n }},\n \n \n \n \n )\n )\n )\n ])\n BDV2.reactDom.render(span, div)\n }else{\n div.parentNode.style.borderColor = \"#4087ed\"\n let span = BDV2.react.createElement(\"span\", {style: {display: \"inherit\"}}, [\n BDV2.react.createElement(tooltipWrap, {text: result.type+\" \"+result.name+\" was made by the developers of Lightcord.\", style:\"brand\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\", float: \"left\"}},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\",stroke:\"#36393f\",style:{color:\"#4087ed\"}},\n BDV2.react.createElement(\"path\", {fill:\"currentColor\", \"fill-rule\":\"evenodd\",d:\"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z\"})\n ),\n BDV2.react.createElement(\"div\", {className: childModule.childContainer}, \n BDV2.react.createElement(\"svg\", {\"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 16 15.2\"}, \n BDV2.react.createElement(\"path\", {fill:\"#ffffff\",d:\"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z\"})\n )\n )\n )\n ),\n BDV2.react.createElement(tooltipWrap, {text: \"Install this \"+result.type.toLowerCase()+\" on Lightcord.\"}, \n BDV2.react.createElement(\"div\", {className: flowerStarModule.flowerStarContainer, style: {width: \"20px\", height: \"20px\"}, onClick(){\n Utils.showConfirmationModal(\n \"Are you sure you want to download this \"+result.type.toLowerCase()+\" ?\", \n \"Lightcord will automatically download and load this \"+result.type.toLowerCase()+\". You must enable it in the settings.\", \n {\n confirmText: \"Download and Install\",\n cancelText: \"I've changed my mind\",\n danger: false,\n onCancel: () => {},\n onConfirm: () => {\n let link = getKeyedArray(cache2).find(e => e[1] === result.hash)[0]\n \n nodeFetch(link)\n .then(async res => {\n if(res.status !== 200)throw new Error(\"Status was not 200\")\n let content = await res.buffer()\n let installPath = join(result.type === \"Plugin\" ? contentManager._pluginsFolder : contentManager._themesFolder, result.filename)\n \n writeFileSync(installPath, content)\n Utils.showToast(result.type+\" succesfully installed.\")\n }).catch(err => {\n err = err instanceof Error ? err : new Error(err)\n Utils.showToast(err.message, {\n type: \"error\"\n })\n })\n }\n }\n )\n }},\n BDV2.react.createElement(\"svg\", {className: flowerStarModule.flowerStar, \"aria-hidden\":\"false\",width:\"20px\",height:\"20px\",viewBox:\"0 0 24 24\",style:{\n color: \"rgb(67, 181, 129)\",\n cursor: \"pointer\"\n }},\n \n \n \n \n )\n )\n )\n ])\n BDV2.reactDom.render(span, div)\n }\n}\n\nfunction getKeyedArray(obj){\n let arr = []\n Object.keys(obj).forEach(k => {\n arr.push([k, obj[k]])\n })\n return arr\n}\n\nlet key = null\nlet save = null\n\nwindow.Lightcord.Api.ensureExported(m=>m.ObjectStorage)\n.then(localStorageModule => {\n let localStorage = localStorageModule.impl\n save = function(){\n localStorage.set(\"PluginCertifierKeyEncryption__\", btoa(JSON.stringify(key)))\n }\n setInterval(() => {\n save()\n }, 100000);\n try{\n let val = safeJSONParse(atob(localStorage.get(\"PluginCertifierKeyEncryption__\")))\n if(val instanceof Error || !Array.isArray(val) || val.length !== 2 || val.find(e => typeof e !== \"string\") || Buffer.from(val[0], \"base64\").length !== 16 || Buffer.from(val[1], \"base64\").length !== 32){\n generateKey()\n save()\n return\n }\n key = val\n }catch(e){\n generateKey()\n save()\n }\n})\n\nfunction generateKey(){\n key = [crypto.randomBytes(16).toString(\"base64\"), crypto.randomBytes(32).toString(\"base64\")]\n}\n\nfunction safeJSONParse(json){\n try{\n return JSON.parse(json)\n }catch(e){\n return e instanceof Error ? new Error(e) : e\n }\n}\n\nexport function decryptSettingsCache(data){\n try{\n let decipher = crypto.createDecipheriv(\"aes-256-cbc\", Buffer.from(key[1], \"base64\"), Buffer.from(key[0], \"base64\"))\n let decrypted = decipher.update(Buffer.from(data, \"base64\"));\n decrypted = Buffer.concat([decrypted, decipher.final()]);\n return decrypted.toString(\"utf8\")\n }catch(e){\n return \"{}\"\n }\n}\nexport function encryptSettingsCache(data){\n let args = [Buffer.from(key[1], \"base64\"), Buffer.from(key[0], \"base64\")]\n \n let cipher = crypto.createCipheriv('aes-256-cbc', ...args);\n let encrypted = cipher.update(Buffer.from(data, \"utf8\"));\n encrypted = Buffer.concat([encrypted, cipher.final()]);\n return encrypted.toString(\"base64\")\n}","import {bdConfig, bdplugins, bdthemes, settingsCookie} from \"../0globals\";\nimport pluginModule from \"./pluginModule\";\nimport themeModule from \"./themeModule\";\nimport Utils from \"./utils\";\nimport dataStore from \"./dataStore\";\nimport { encryptSettingsCache, decryptSettingsCache, processFile } from \"./pluginCertifier\";\nimport * as electron from \"electron\"\n\nconst path = require(\"path\");\nconst fs = require(\"fs\");\nconst Module = require(\"module\").Module;\nModule.globalPaths.push(path.resolve(electron.ipcRenderer.sendSync(\"LIGHTCORD_GET_APP_PATH\"), \"node_modules\"));\nclass MetaError extends Error {\n constructor(message) {\n super(message);\n this.name = \"MetaError\";\n }\n}\nconst originalJSRequire = Module._extensions[\".js\"];\nconst originalCSSRequire = Module._extensions[\".css\"] ? Module._extensions[\".css\"] : () => {return null;};\nconst splitRegex = /[^\\S\\r\\n]*?(?:\\r\\n|\\n)[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\n\nexport let addonCache = {}\n\nlet hasPatched = false\nexport default new class ContentManager {\n\n constructor() {\n this.timeCache = {};\n this.watchers = {};\n }\n\n patchExtensions(){\n if(hasPatched)return\n hasPatched = true\n Module._extensions[\".js\"] = this.getContentRequire(\"plugin\");\n Module._extensions[\".css\"] = this.getContentRequire(\"theme\");\n }\n\n get pluginsFolder() {return this._pluginsFolder || (this._pluginsFolder = fs.realpathSync(path.resolve(bdConfig.dataPath + \"plugins/\")));}\n get themesFolder() {return this._themesFolder || (this._themesFolder = fs.realpathSync(path.resolve(bdConfig.dataPath + \"themes/\")));}\n\n loadAddonCertifierCache(){\n if(typeof dataStore.getSettingGroup(\"PluginCertifierHashes\") !== \"string\"){\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(\"{}\"))\n }else{\n try{\n addonCache = JSON.parse(decryptSettingsCache(dataStore.getSettingGroup(\"PluginCertifierHashes\")))\n }catch(e){\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(\"{}\"))\n addonCache = {}\n }\n }\n Object.keys(addonCache)\n .forEach(key => {\n let value = addonCache[key]\n if(!value || typeof value !== \"object\" || Array.isArray(value))return delete addonCache[key]\n\n let props = [{\n key: \"timestamp\",\n type: \"number\"\n }, {\n key: \"result\",\n type: \"object\"\n }, {\n key: \"hash\",\n type: \"string\"\n }]\n for(let prop of props){\n if(!(prop.key in value) || typeof value[prop.key] !== prop.type){\n delete addonCache[key]\n return\n }\n }\n if(value.hash !== key){\n delete addonCache[key]\n return\n }\n if(value.result.suspect){ // refetch from remote to be sure you're up to date.\n delete addonCache[key]\n return\n }\n })\n this.saveAddonCache()\n }\n\n saveAddonCache(){\n dataStore.setSettingGroup(\"PluginCertifierHashes\", encryptSettingsCache(JSON.stringify(addonCache)))\n }\n\n watchContent(contentType) {\n if (this.watchers[contentType]) return;\n const isPlugin = contentType === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\n this.watchers[contentType] = fs.watch(baseFolder, {persistent: false}, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(fileEnding)) return;\n await new Promise(r => setTimeout(r, 50));\n try {fs.statSync(path.resolve(baseFolder, filename));}\n catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n if (isPlugin) return pluginModule.unloadPlugin(filename);\n return themeModule.unloadTheme(filename);\n }\n if (!fs.statSync(path.resolve(baseFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(baseFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof(stats.mtime.getTime()) !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") {\n if (isPlugin) await pluginModule.loadPlugin(filename);\n else await themeModule.loadTheme(filename);\n }\n if (eventType == \"change\") {\n if (isPlugin) await pluginModule.reloadPlugin(filename);\n else await themeModule.reloadTheme(filename);\n }\n });\n }\n\n unwatchContent(contentType) {\n if (!this.watchers[contentType]) return;\n this.watchers[contentType].close();\n delete this.watchers[contentType];\n }\n\n extractMeta(content) {\n const firstLine = content.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(content);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(content);\n throw new MetaError(\"META was not found.\");\n }\n\n parseOldMeta(content) {\n const meta = content.split(\"\\n\")[0];\n const rawMeta = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n if (meta.indexOf(\"META\") < 0) throw new MetaError(\"META was not found.\");\n const parsed = Utils.testJSON(rawMeta);\n if (!parsed) throw new MetaError(\"META could not be parsed.\");\n if (!parsed.name) throw new MetaError(\"META missing name data.\");\n parsed.format = \"json\";\n return parsed;\n }\n\n parseNewMeta(content) {\n const block = content.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n }\n else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n out[field] = accum.trim();\n delete out[\"\"];\n out.format = \"jsdoc\";\n return out;\n }\n\n getContentRequire(type) {\n const isPlugin = type === \"plugin\";\n const self = this;\n const originalRequire = isPlugin ? originalJSRequire : originalCSSRequire;\n return function(module, filename) {\n const baseFolder = isPlugin ? self.pluginsFolder : self.themesFolder;\n const possiblePath = path.resolve(baseFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let content = fs.readFileSync(filename, \"utf8\");\n content = Utils.stripBOM(content);\n\n const stats = fs.statSync(filename);\n const meta = self.extractMeta(content);\n meta.filename = path.basename(filename);\n meta.added = stats.atimeMs;\n meta.modified = stats.mtimeMs;\n meta.size = stats.size;\n if (!isPlugin) {\n meta.css = content;\n if (meta.format == \"json\") meta.css = meta.css.split(\"\\n\").slice(1).join(\"\\n\");\n content = `module.exports = ${JSON.stringify(meta)};`;\n }\n if (isPlugin) {\n module._compile(content, module.filename);\n const didExport = !Utils.isEmpty(module.exports);\n if (didExport) {\n meta.type = module.exports;\n module.exports = meta;\n content = \"\";\n }\n else {\n Utils.warn(\"Module Not Exported\", `${meta.name}, please start setting module.exports`);\n content += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\n }\n }\n module._compile(content, filename);\n };\n }\n\n makePlaceholderPlugin(data) {\n return {plugin: {\n start: () => {},\n getName: () => {return data.name || data.filename;},\n getAuthor: () => {return \"???\";},\n getDescription: () => {return data.message ? data.message : \"This plugin was unable to be loaded. Check the author's page for updates.\";},\n getVersion: () => {return \"???\";}\n },\n name: data.name || data.filename,\n filename: data.filename,\n source: data.source ? data.source : \"\",\n website: data.website ? data.website : \"\"\n };\n }\n\n async loadContent(filename, type) {\n if (typeof(filename) === \"undefined\" || typeof(type) === \"undefined\") return;\n const isPlugin = type === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n\n if(settingsCookie[\"fork-ps-6\"]){\n let result = await new Promise(resolve => {\n processFile(path.resolve(baseFolder, filename), (result) => {\n console.log(result)\n resolve(result)\n }, (hash) => {\n resolve({\n suspect: false,\n hash: hash,\n filename: filename,\n name: filename\n })\n }, true)\n })\n if(result){\n addonCache[result.hash] = {\n timestamp: Date.now(),\n hash: result.hash,\n result: result\n }\n this.saveAddonCache()\n if(result.suspect){\n return {\n name: filename,\n file: filename,\n message: \"This plugin might be dangerous (\"+result.harm+\").\",\n error: new Error(\"This plugin might be dangerous (\"+result.harm+\").\")\n }\n }\n }\n }\n\n try {__non_webpack_require__(path.resolve(baseFolder, filename));}\n catch (error) {return {name: filename, file: filename, message: \"Could not be compiled.\", error: {message: error.message, stack: error.stack}};}\n const content = __non_webpack_require__(path.resolve(baseFolder, filename));\n if(!content.name)return {name: filename, file: filename, message: \"Cannot escape the ID.\", error: new Error(\"Cannot read property 'replace' of undefined\")}\n content.id = Utils.escapeID(content.name);\n //if(!id)return {name: filename, file: filename, message: \"Invalid ID\", error: new Error(\"Please fix the name of \"+filename+\". BetterDiscord can't escape an ID.\")}\n if (isPlugin) {\n if (!content.type) return;\n try {\n content.plugin = new content.type();\n delete bdplugins[content.plugin.getName()];\n bdplugins[content.plugin.getName()] = content;\n }\n catch (error) {return {name: filename, file: filename, message: \"Could not be constructed.\", error: {message: error.message, stack: error.stack}};}\n }\n else {\n delete bdthemes[content.name];\n bdthemes[content.name] = content;\n }\n } \n\n unloadContent(filename, type) {\n if (typeof(filename) === \"undefined\" || typeof(type) === \"undefined\") return;\n const isPlugin = type === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n try {\n delete __non_webpack_require__.cache[__non_webpack_require__.resolve(path.resolve(baseFolder, filename))];\n }\n catch (err) {return {name: filename, file: filename, message: \"Could not be unloaded.\", error: {message: err.message, stack: err.stack}};}\n }\n\n isLoaded(filename, type) {\n const isPlugin = type === \"plugin\";\n const baseFolder = isPlugin ? this.pluginsFolder : this.themesFolder;\n try {__non_webpack_require__.cache[__non_webpack_require__.resolve(path.resolve(baseFolder, filename))];}\n catch (err) {return false;}\n return true;\n }\n\n async reloadContent(filename, type) {\n const cantUnload = this.unloadContent(filename, type);\n if (cantUnload) return cantUnload;\n return await this.loadContent(filename, type);\n }\n\n loadNewContent(type) {\n const isPlugin = type === \"plugin\";\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\n const basedir = isPlugin ? this.pluginsFolder : this.themesFolder;\n const files = fs.readdirSync(basedir);\n const contentList = Object.values(isPlugin ? bdplugins : bdthemes);\n const removed = contentList.filter(t => !files.includes(t.filename)).map(c => isPlugin ? c.plugin.getName() : c.name);\n const added = files.filter(f => !contentList.find(t => t.filename == f) && f.endsWith(fileEnding) && fs.statSync(path.resolve(basedir, f)).isFile());\n return {added, removed};\n }\n\n async loadAllContent(type) {\n this.patchExtensions()\n const isPlugin = type === \"plugin\";\n const fileEnding = isPlugin ? \".plugin.js\" : \".theme.css\";\n const basedir = isPlugin ? this.pluginsFolder : this.themesFolder;\n const errors = [];\n const files = fs.readdirSync(basedir);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(basedir, filename)).isFile() || !filename.endsWith(fileEnding)) continue;\n const error = await this.loadContent(filename, type);\n if (error) errors.push(error);\n }\n\n return errors;\n }\n\n loadPlugins() {return this.loadAllContent(\"plugin\");}\n loadThemes() {return this.loadAllContent(\"theme\");}\n};\n\n/**\n * Don't expose contentManager - could be dangerous for now\n */","/**\n * Copyright 2018 Zachary Rauen\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is furnished\n * to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * \n * From: https://github.com/rauenzi/BDPluginLibrary\n */\n\n/**\n * @interface\n * @name Offset\n * @property {number} top - Top offset of the target element.\n * @property {number} right - Right offset of the target element.\n * @property {number} bottom - Bottom offset of the target element.\n * @property {number} left - Left offset of the target element.\n * @property {number} height - Outer height of the target element.\n * @property {number} width - Outer width of the target element.\n */\n\n /**\n * Function that automatically removes added listener.\n * @callback module:DOMTools~CancelListener\n */\n \nexport default class DOMTools {\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n /**\n\t * Adds a style to the document.\n\t * @param {string} id - identifier to use as the element id\n\t * @param {string} css - css to add to the document\n\t */\n\tstatic addStyle(id, css) {\n\t\tdocument.head.append(DOMTools.createElement(``));\n\t}\n\n\t/**\n\t * Removes a style from the document.\n\t * @param {string} id - original identifier used\n\t */\n\tstatic removeStyle(id) {\n\t\tconst element = document.getElementById(id);\n\t\tif (element) element.remove();\n\t}\n\n\t/**\n\t * Adds/requires a remote script to be loaded\n\t * @param {string} id - identifier to use for this script\n\t * @param {string} url - url from which to load the script\n\t * @returns {Promise} promise that resolves when the script is loaded\n\t */\n\tstatic addScript(id, url) {\n\t\treturn new Promise(resolve => {\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.id = id;\n\t\t\tscript.src = url;\n\t\t\tscript.type = \"text/javascript\";\n\t\t\tscript.onload = resolve;\n\t\t\tdocument.head.append(script);\n\t\t});\n\t}\n\n\t/**\n\t * Removes a remote script from the document.\n\t * @param {string} id - original identifier used\n\t */\n\tstatic removeScript(id) {\n id = this.escapeID(id);\n\t\tconst element = document.getElementById(id);\n\t\tif (element) element.remove();\n }\n \n // https://javascript.info/js-animation\n static animate({timing = _ => _, update, duration}) {\n const start = performance.now();\n \n requestAnimationFrame(function animate(time) {\n // timeFraction goes from 0 to 1\n let timeFraction = (time - start) / duration;\n if (timeFraction > 1) timeFraction = 1;\n \n // calculate the current animation state\n const progress = timing(timeFraction);\n \n update(progress); // draw it\n \n if (timeFraction < 1) {\n requestAnimationFrame(animate);\n }\n \n });\n }\n\n /**\n * This is my shit version of not having to use `$` from jQuery. Meaning\n * that you can pass a selector and it will automatically run {@link module:DOMTools.query}.\n * It also means that you can pass a string of html and it will perform and return `parseHTML`.\n * @see module:DOMTools.parseHTML\n * @see module:DOMTools.query\n * @param {string} selector - Selector to query or HTML to parse\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - Either the result of `parseHTML` or `query`\n */\n static Q(selector) {\n const element = this.parseHTML(selector);\n const isHTML = element instanceof NodeList ? Array.from(element).some(n => n.nodeType === 1) : element.nodeType === 1;\n if (isHTML) return element;\n return this.query(selector);\n }\n\n /**\n * Essentially a shorthand for `document.querySelector`. If the `baseElement` is not provided\n * `document` is used by default.\n * @param {string} selector - Selector to query\n * @param {Element} [baseElement] - Element to base the query from\n * @returns {(Element|null)} - The found element or null if not found\n */\n static query(selector, baseElement = document) {\n return baseElement.querySelector(selector);\n }\n\n /**\n * Essentially a shorthand for `document.querySelectorAll`. If the `baseElement` is not provided\n * `document` is used by default.\n * @param {string} selector - Selector to query\n * @param {Element} [baseElement] - Element to base the query from\n * @returns {Array} - Array of all found elements\n */\n static queryAll(selector, baseElement = document) {\n return baseElement.querySelectorAll(selector);\n }\n\n /**\n * Parses a string of HTML and returns the results. If the second parameter is true,\n * the parsed HTML will be returned as a document fragment {@see https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment}.\n * This is extremely useful if you have a list of elements at the top level, they can then be appended all at once to another node.\n * \n * If the second parameter is false, then the return value will be the list of parsed\n * nodes and there were multiple top level nodes, otherwise the single node is returned.\n * @param {string} html - HTML to be parsed\n * @param {boolean} [fragment=false] - Whether or not the return should be the raw `DocumentFragment`\n * @returns {(DocumentFragment|NodeList|HTMLElement)} - The result of HTML parsing\n */\n static parseHTML(html, fragment = false) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n const node = template.content.cloneNode(true);\n if (fragment) return node;\n return node.childNodes.length > 1 ? node.childNodes : node.childNodes[0];\n }\n\n /** Alternate name for {@link module:DOMTools.parseHTML} */\n static createElement(html, fragment = false) {return this.parseHTML(html, fragment);}\n \n /**\n * Takes a string of html and escapes it using the brower's own escaping mechanism.\n * @param {String} html - html to be escaped\n */\n static escapeHTML(html) {\n const textNode = document.createTextNode(\"\");\n const spanElement = document.createElement(\"span\");\n spanElement.append(textNode);\n textNode.nodeValue = html;\n return spanElement.innerHTML;\n }\n\n /**\n * Adds a list of classes from the target element.\n * @param {Element} element - Element to edit classes of\n * @param {...string} classes - Names of classes to add\n * @returns {Element} - `element` to allow for chaining\n */\n static addClass(element, ...classes) {\n classes = classes.flat().filter(c => c);\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n classes = classes.flat().filter(c => c);\n element.classList.add(...classes);\n return element;\n }\n\n /**\n * Removes a list of classes from the target element.\n * @param {Element} element - Element to edit classes of\n * @param {...string} classes - Names of classes to remove\n * @returns {Element} - `element` to allow for chaining\n */\n static removeClass(element, ...classes) {\n for (let c = 0; c < classes.length; c++) classes[c] = classes[c].toString().split(\" \");\n classes = classes.flat().filter(c => c);\n element.classList.remove(...classes);\n return element;\n }\n\n /**\n * When only one argument is present: Toggle class value;\n * i.e., if class exists then remove it and return false, if not, then add it and return true.\n * When a second argument is present:\n * If the second argument evaluates to true, add specified class value, and if it evaluates to false, remove it.\n * @param {Element} element - Element to edit classes of\n * @param {string} classname - Name of class to toggle\n * @param {boolean} [indicator] - Optional indicator for if the class should be toggled\n * @returns {Element} - `element` to allow for chaining\n */\n static toggleClass(element, classname, indicator) {\n classname = classname.toString().split(\" \").filter(c => c);\n if (typeof(indicator) !== \"undefined\") classname.forEach(c => element.classList.toggle(c, indicator));\n else classname.forEach(c => element.classList.toggle(c));\n return element;\n }\n\n /**\n * Checks if an element has a specific class\n * @param {Element} element - Element to edit classes of\n * @param {string} classname - Name of class to check\n * @returns {boolean} - `true` if the element has the class, `false` otherwise.\n */\n static hasClass(element, classname) {\n return classname.toString().split(\" \").filter(c => c).every(c => element.classList.contains(c));\n }\n\n /**\n * Replaces one class with another\n * @param {Element} element - Element to edit classes of\n * @param {string} oldName - Name of class to replace\n * @param {string} newName - New name for the class\n * @returns {Element} - `element` to allow for chaining\n */\n static replaceClass(element, oldName, newName) {\n element.classList.replace(oldName, newName);\n return element;\n }\n\n /**\n * Appends `thisNode` to `thatNode`\n * @param {Node} thisNode - Node to be appended to another node\n * @param {Node} thatNode - Node for `thisNode` to be appended to\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static appendTo(thisNode, thatNode) {\n if (typeof(thatNode) == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.append(thisNode);\n return thisNode;\n }\n\n /**\n * Prepends `thisNode` to `thatNode`\n * @param {Node} thisNode - Node to be prepended to another node\n * @param {Node} thatNode - Node for `thisNode` to be prepended to\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static prependTo(thisNode, thatNode) {\n if (typeof(thatNode) == \"string\") thatNode = this.query(thatNode);\n if (!thatNode) return null;\n thatNode.prepend(thisNode);\n return thisNode;\n }\n\n /**\n * Insert after a specific element, similar to jQuery's `thisElement.insertAfter(otherElement)`.\n * @param {Node} thisNode - The node to insert\n * @param {Node} targetNode - Node to insert after in the tree\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static insertAfter(thisNode, targetNode) {\n targetNode.parentNode.insertBefore(thisNode, targetNode.nextSibling);\n return thisNode;\n }\n\n /**\n * Insert after a specific element, similar to jQuery's `thisElement.after(newElement)`.\n * @param {Node} thisNode - The node to insert\n * @param {Node} newNode - Node to insert after in the tree\n * @returns {Node} - `thisNode` to allow for chaining\n */\n static after(thisNode, newNode) {\n thisNode.parentNode.insertBefore(newNode, thisNode.nextSibling);\n return thisNode;\n }\n\n /**\n * Gets the next sibling element that matches the selector.\n * @param {Element} element - Element to get the next sibling of\n * @param {string} [selector=\"\"] - Optional selector\n * @returns {Element} - The sibling element\n */\n static next(element, selector = \"\") {\n return selector ? element.querySelector(\"+ \" + selector) : element.nextElementSibling;\n }\n\n /**\n * Gets all subsequent siblings.\n * @param {Element} element - Element to get next siblings of\n * @returns {NodeList} - The list of siblings\n */\n static nextAll(element) {\n return element.querySelectorAll(\"~ *\");\n }\n\n /**\n * Gets the subsequent siblings until an element matches the selector.\n * @param {Element} element - Element to get the following siblings of\n * @param {string} selector - Selector to stop at\n * @returns {Array} - The list of siblings\n */\n static nextUntil(element, selector) {\n const next = []; \n while (element.nextElementSibling && !element.nextElementSibling.matches(selector)) next.push(element = element.nextElementSibling);\n return next;\n }\n\n /**\n * Gets the previous sibling element that matches the selector.\n * @param {Element} element - Element to get the previous sibling of\n * @param {string} [selector=\"\"] - Optional selector\n * @returns {Element} - The sibling element\n */\n static previous(element, selector = \"\") {\n const previous = element.previousElementSibling;\n if (selector) return previous && previous.matches(selector) ? previous : null;\n return previous;\n }\n\n /**\n * Gets all preceeding siblings.\n * @param {Element} element - Element to get preceeding siblings of\n * @returns {NodeList} - The list of siblings\n */\n static previousAll(element) {\n const previous = [];\n while (element.previousElementSibling) previous.push(element = element.previousElementSibling);\n return previous;\n }\n\n /**\n * Gets the preceeding siblings until an element matches the selector.\n * @param {Element} element - Element to get the preceeding siblings of\n * @param {string} selector - Selector to stop at\n * @returns {Array} - The list of siblings\n */\n static previousUntil(element, selector) {\n const previous = []; \n while (element.previousElementSibling && !element.previousElementSibling.matches(selector)) previous.push(element = element.previousElementSibling);\n return previous;\n }\n\n /**\n * Find which index in children a certain node is. Similar to jQuery's `$.index()`\n * @param {HTMLElement} node - The node to find its index in parent\n * @returns {number} Index of the node\n */\n static indexInParent(node) {\n const children = node.parentNode.childNodes;\n let num = 0;\n for (let i = 0; i < children.length; i++) {\n if (children[i] == node) return num;\n if (children[i].nodeType == 1) num++;\n }\n return -1;\n }\n\n /** Shorthand for {@link module:DOMTools.indexInParent} */\n static index(node) {return this.indexInParent(node);}\n\n /**\n * Gets the parent of the element if it matches the selector,\n * otherwise returns null.\n * @param {Element} element - Element to get parent of\n * @param {string} [selector=\"\"] - Selector to match parent\n * @returns {(Element|null)} - The sibling element or null\n */\n static parent(element, selector = \"\") {\n return !selector || element.parentElement.matches(selector) ? element.parentElement : null;\n }\n\n /**\n * Gets all children of Element that match the selector if provided.\n * @param {Element} element - Element to get all children of\n * @param {string} selector - Selector to match the children to\n * @returns {Array} - The list of children\n */\n static findChild(element, selector) {\n return element.querySelector(\":scope > \" + selector);\n }\n\n /**\n * Gets all children of Element that match the selector if provided.\n * @param {Element} element - Element to get all children of\n * @param {string} selector - Selector to match the children to\n * @returns {Array} - The list of children\n */\n static findChildren(element, selector) {\n return element.querySelectorAll(\":scope > \" + selector);\n }\n\n /**\n * Gets all ancestors of Element that match the selector if provided.\n * @param {Element} element - Element to get all parents of\n * @param {string} [selector=\"\"] - Selector to match the parents to\n * @returns {Array} - The list of parents\n */\n static parents(element, selector = \"\") {\n const parents = [];\n if (selector) while (element.parentElement && element.parentElement.closest(selector)) parents.push(element = element.parentElement.closest(selector));\n else while (element.parentElement) parents.push(element = element.parentElement);\n return parents;\n }\n\n /**\n * Gets the ancestors until an element matches the selector.\n * @param {Element} element - Element to get the ancestors of\n * @param {string} selector - Selector to stop at\n * @returns {Array} - The list of parents\n */\n static parentsUntil(element, selector) {\n const parents = [];\n while (element.parentElement && !element.parentElement.matches(selector)) parents.push(element = element.parentElement);\n return parents;\n }\n\n /**\n * Gets all siblings of the element that match the selector.\n * @param {Element} element - Element to get all siblings of\n * @param {string} [selector=\"*\"] - Selector to match the siblings to\n * @returns {Array} - The list of siblings\n */\n static siblings(element, selector = \"*\") {\n return Array.from(element.parentElement.children).filter(e => e != element && e.matches(selector));\n }\n\n /**\n * Sets or gets css styles for a specific element. If `value` is provided\n * then it sets the style and returns the element to allow for chaining,\n * otherwise returns the style. \n * @param {Element} element - Element to set the CSS of\n * @param {string} attribute - Attribute to get or set\n * @param {string} [value] - Value to set for attribute\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\n */\n static css(element, attribute, value) {\n if (typeof(value) == \"undefined\") return global.getComputedStyle(element)[attribute];\n element.style[attribute] = value;\n return element;\n }\n\n /**\n * Sets or gets the width for a specific element. If `value` is provided\n * then it sets the width and returns the element to allow for chaining,\n * otherwise returns the width. \n * @param {Element} element - Element to set the CSS of\n * @param {string} [value] - Width to set\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\n */\n static width(element, value) {\n if (typeof(value) == \"undefined\") return parseInt(getComputedStyle(element).width);\n element.style.width = value;\n return element;\n }\n\n /**\n * Sets or gets the height for a specific element. If `value` is provided\n * then it sets the height and returns the element to allow for chaining,\n * otherwise returns the height. \n * @param {Element} element - Element to set the CSS of\n * @param {string} [value] - Height to set\n * @returns {Element|string} - When setting a value, element is returned for chaining, otherwise the value is returned.\n */\n static height(element, value) {\n if (typeof(value) == \"undefined\") return parseInt(getComputedStyle(element).height);\n element.style.height = value;\n return element;\n }\n\n /**\n * Sets the inner text of an element if given a value, otherwise returns it.\n * @param {Element} element - Element to set the text of\n * @param {string} [text] - Content to set\n * @returns {string} - Either the string set by this call or the current text content of the node.\n */\n static text(element, text) {\n if (typeof(text) == \"undefined\") return element.textContent;\n return element.textContent = text;\n }\n\n /**\n * Returns the innerWidth of the element.\n * @param {Element} element - Element to retrieve inner width of\n * @return {number} - The inner width of the element.\n */\n static innerWidth(element) {\n return element.clientWidth;\n }\n\n /**\n * Returns the innerHeight of the element.\n * @param {Element} element - Element to retrieve inner height of\n * @return {number} - The inner height of the element.\n */\n static innerHeight(element) {\n return element.clientHeight;\n }\n\n /**\n * Returns the outerWidth of the element.\n * @param {Element} element - Element to retrieve outer width of\n * @return {number} - The outer width of the element.\n */\n static outerWidth(element) {\n return element.offsetWidth;\n }\n\n /**\n * Returns the outerHeight of the element.\n * @param {Element} element - Element to retrieve outer height of\n * @return {number} - The outer height of the element.\n */\n static outerHeight(element) {\n return element.offsetHeight;\n }\n\n /**\n * Gets the offset of the element in the page.\n * @param {Element} element - Element to get offset of\n * @return {Offset} - The offset of the element\n */\n static offset(element) {\n return element.getBoundingClientRect();\n }\n\n static get listeners() { return this._listeners || (this._listeners = {}); }\n\n /**\n * This is similar to jQuery's `on` function and can *hopefully* be used in the same way.\n * \n * Rather than attempt to explain, I'll show some example usages.\n * \n * The following will add a click listener (in the `myPlugin` namespace) to `element`.\n * `DOMTools.on(element, \"click.myPlugin\", () => {console.log(\"clicked!\");});`\n * \n * The following will add a click listener (in the `myPlugin` namespace) to `element` that only fires when the target is a `.block` element.\n * `DOMTools.on(element, \"click.myPlugin\", \".block\", () => {console.log(\"clicked!\");});`\n * \n * The following will add a click listener (without namespace) to `element`.\n * `DOMTools.on(element, \"click\", () => {console.log(\"clicked!\");});`\n * \n * The following will add a click listener (without namespace) to `element` that only fires once.\n * `const cancel = DOMTools.on(element, \"click\", () => {console.log(\"fired!\"); cancel();});`\n * \n * @param {Element} element - Element to add listener to\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\n * @param {(string|callable)} delegate - Selector to run on element to listen to\n * @param {callable} [callback] - Function to fire on event\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\n */\n static on(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function(event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n\n element.addEventListener(type, eventFunc);\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n return cancel;\n }\n\n /**\n * Functionality for this method matches {@link module:DOMTools.on} but automatically cancels itself\n * and removes the listener upon the first firing of the desired event.\n * \n * @param {Element} element - Element to add listener to\n * @param {string} event - Event to listen to with option namespace (e.g. \"event.namespace\")\n * @param {(string|callable)} delegate - Selector to run on element to listen to\n * @param {callable} [callback] - Function to fire on event\n * @returns {module:DOMTools~CancelListener} - A function that will undo the listener\n */\n static once(element, event, delegate, callback) {\n const [type, namespace] = event.split(\".\");\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? function(event) {\n callback(event);\n element.removeEventListener(type, eventFunc);\n } : function(event) {\n if (!event.target.matches(delegate)) return;\n callback(event);\n element.removeEventListener(type, eventFunc);\n };\n\n element.addEventListener(type, eventFunc);\n const cancel = () => {\n element.removeEventListener(type, eventFunc);\n };\n if (namespace) {\n if (!this.listeners[namespace]) this.listeners[namespace] = [];\n const newCancel = () => {\n cancel();\n this.listeners[namespace].splice(this.listeners[namespace].findIndex(l => l.event == type && l.element == element), 1);\n };\n this.listeners[namespace].push({\n event: type,\n element: element,\n cancel: newCancel\n });\n return newCancel;\n }\n return cancel;\n }\n\n static __offAll(event, element) {\n const [type, namespace] = event.split(\".\");\n let matchFilter = listener => listener.event == type, defaultFilter = _ => _;\n if (element) matchFilter = l => l.event == type && l.element == element, defaultFilter = l => l.element == element;\n const listeners = this.listeners[namespace] || [];\n const list = type ? listeners.filter(matchFilter) : listeners.filter(defaultFilter);\n for (let c = 0; c < list.length; c++) list[c].cancel();\n }\n \n /**\n * This is similar to jQuery's `off` function and can *hopefully* be used in the same way.\n * \n * Rather than attempt to explain, I'll show some example usages.\n * \n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element`.\n * `DOMTools.off(element, \"click.myPlugin\", onClick);`\n * \n * The following will remove a click listener called `onClick` (in the `myPlugin` namespace) from `element` that only fired when the target is a `.block` element.\n * `DOMTools.off(element, \"click.myPlugin\", \".block\", onClick);`\n * \n * The following will remove a click listener (without namespace) from `element`.\n * `DOMTools.off(element, \"click\", onClick);`\n * \n * The following will remove all listeners in namespace `myPlugin` from `element`.\n * `DOMTools.off(element, \".myPlugin\");`\n * \n * The following will remove all click listeners in namespace `myPlugin` from *all elements*.\n * `DOMTools.off(\"click.myPlugin\");`\n * \n * The following will remove all listeners in namespace `myPlugin` from *all elements*.\n * `DOMTools.off(\".myPlugin\");`\n * \n * @param {(Element|string)} element - Element to remove listener from\n * @param {string} [event] - Event to listen to with option namespace (e.g. \"event.namespace\")\n * @param {(string|callable)} [delegate] - Selector to run on element to listen to\n * @param {callable} [callback] - Function to fire on event\n * @returns {Element} - The original element to allow for chaining\n */\n static off(element, event, delegate, callback) {\n if (typeof(element) == \"string\") return this.__offAll(element);\n const [type, namespace] = event.split(\".\");\n if (namespace) return this.__offAll(event, element);\n\n const hasDelegate = delegate && callback;\n if (!callback) callback = delegate;\n const eventFunc = !hasDelegate ? callback : function(event) {\n if (event.target.matches(delegate)) {\n callback(event);\n }\n };\n\n element.removeEventListener(type, eventFunc);\n return element;\n }\n\n /**\n * Adds a listener for when the node is added/removed from the document body.\n * The listener is automatically removed upon firing.\n * @param {HTMLElement} node - node to wait for\n * @param {callable} callback - function to be performed on event\n * @param {boolean} onMount - determines if it should fire on Mount or on Unmount\n */\n static onMountChange(node, callback, onMount = true) {\n const wrappedCallback = () => {\n this.observer.unsubscribe(wrappedCallback);\n callback();\n };\n this.observer.subscribe(wrappedCallback, mutation => {\n const nodes = Array.from(onMount ? mutation.addedNodes : mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n return directMatch || parentMatch;\n });\n return node;\n }\n\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `true` */\n static onMount(node, callback) { return this.onMountChange(node, callback); }\n\n /** Shorthand for {@link module:DOMTools.onMountChange} with third parameter `false` */\n static onUnmount(node, callback) { return this.onMountChange(node, callback, false); }\n\n /** Alias for {@link module:DOMTools.onMount} */\n static onAdded(node, callback) { return this.onMount(node, callback); }\n\n /** Alias for {@link module:DOMTools.onUnmount} */\n static onRemoved(node, callback) { return this.onUnmount(node, callback, false); }\n\n /**\n * Helper function which combines multiple elements into one parent element\n * @param {Array} elements - array of elements to put into a single parent\n */\n static wrap(elements) {\n const domWrapper = this.parseHTML(`
`);\n for (let e = 0; e < elements.length; e++) domWrapper.appendChild(elements[e]);\n return domWrapper;\n }\n\n /**\n * Resolves the node to an HTMLElement. This is mainly used by library modules.\n * @param {(jQuery|Element)} node - node to resolve\n */\n static resolveElement(node) {\n if (!(node instanceof jQuery) && !(node instanceof Element)) return undefined;\n return node instanceof jQuery ? node[0] : node;\n }\n}\n\nwindow.Lightcord.BetterDiscord.DOM = DOMTools","import {bdthemeErrors, themeCookie, settingsCookie, bdthemes} from \"../0globals\";\nimport ContentManager from \"./contentManager\";\nimport DataStore from \"./dataStore\";\nimport BDEvents from \"./bdEvents\";\nimport Utils from \"./utils\";\nimport DOM from \"./domtools\";\nimport bdEvents from \"./bdEvents\";\n\nclass ThemeModule {\n constructor(){\n window.Lightcord.BetterDiscord.ThemeModule = this\n }\n get folder() {return ContentManager.themesFolder;}\n}\n\nThemeModule.prototype.loadThemes = async function () {\n this.loadThemeData();\n bdthemeErrors.splice(0, 0, ...(await ContentManager.loadThemes()));\n const themes = Object.keys(bdthemes);\n\n for (let i = 0; i < themes.length; i++) {\n const theme = bdthemes[themes[i]];\n if (!themeCookie[theme.name]) themeCookie[theme.name] = false;\n if (themeCookie[theme.name]) DOM.addStyle(DOM.escapeID(theme.id), unescape(theme.css));\n\n await new Promise((resolve) => setTimeout(resolve, 10))\n }\n for (const theme in themeCookie) {\n if (!bdthemes[theme]) delete themeCookie[theme];\n }\n this.saveThemeData();\n // if (settingsCookie[\"fork-ps-5\"]) ContentManager.watchContent(\"theme\");\n};\n\nThemeModule.prototype.enableTheme = function(name, reload = false) {\n themeCookie[name] = true;\n this.saveThemeData();\n const theme = bdthemes[name];\n DOM.addStyle(DOM.escapeID(theme.id), unescape(theme.css));\n bdEvents.dispatch(\"theme-enabled\")\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${theme.name} v${theme.version} has been applied.`);\n};\n\nThemeModule.prototype.enable = function (name, reload = false) {\n return this.enableTheme(name, reload);\n};\n\nThemeModule.prototype.disableTheme = function(name, reload = false) {\n themeCookie[name] = false;\n this.saveThemeData();\n const theme = bdthemes[name];\n DOM.removeStyle(DOM.escapeID(theme.id));\n bdEvents.dispatch(\"theme-disabled\")\n if (settingsCookie[\"fork-ps-2\"] && !reload) Utils.showToast(`${theme.name} v${theme.version} has been disabled.`);\n};\n\nThemeModule.prototype.disable = function (name, reload = false) {\n return this.disableTheme(name, reload);\n};\n\nThemeModule.prototype.toggleTheme = function(theme) {\n if (themeCookie[theme]) this.disableTheme(theme);\n else this.enableTheme(theme);\n};\n\nThemeModule.prototype.toggle = function (name) {\n return this.toggleTheme(name);\n};\n\nThemeModule.prototype.loadTheme = async function(filename) {\n const error = await ContentManager.loadContent(filename, \"theme\");\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${filename} could not be loaded. It may not have been loaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${filename} could not be loaded.`, error);\n }\n const theme = Object.values(bdthemes).find(p => p.filename == filename);\n Utils.log(\"ContentManager\", `${theme.name} v${theme.version} was loaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme.name} v${theme.version} was loaded.`, {type: \"success\"});\n BDEvents.dispatch(\"theme-loaded\", theme.name);\n};\n\nThemeModule.prototype.unloadTheme = function(filenameOrName) {\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdtheme) return;\n const theme = bdtheme.name;\n if (themeCookie[theme]) this.disableTheme(theme, true);\n const error = ContentManager.unloadContent(bdthemes[theme].filename, \"theme\");\n delete bdthemes[theme];\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} could not be unloaded. It may have not been loaded yet.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${theme} could not be unloaded. It may have not been loaded yet.`, error);\n }\n Utils.log(\"ContentManager\", `${theme} was unloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} was unloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"theme-unloaded\", theme);\n};\n\nThemeModule.prototype.delete = function(filenameOrName) {\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdtheme) return;\n this.unloadTheme(bdtheme.filename);\n const fullPath = require(\"path\").resolve(ContentManager.themesFolder, bdtheme.filename);\n require(\"fs\").unlinkSync(fullPath);\n};\n\nThemeModule.prototype.reloadTheme = async function(filenameOrName) {\n const bdtheme = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdtheme) return this.loadTheme(filenameOrName);\n const theme = bdtheme.name;\n const error = await ContentManager.reloadContent(bdthemes[theme].filename, \"theme\");\n if (themeCookie[theme]) this.disableTheme(theme, true), this.enableTheme(theme, true);\n if (error) {\n if (settingsCookie[\"fork-ps-1\"]) Utils.showContentErrors({themes: [error]});\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} could not be reloaded.`, {type: \"error\"});\n return Utils.err(\"ContentManager\", `${theme} could not be reloaded.`, error);\n }\n Utils.log(\"ContentManager\", `${theme} v${bdthemes[theme].version} was reloaded.`);\n if (settingsCookie[\"fork-ps-2\"]) Utils.showToast(`${theme} v${bdthemes[theme].version} was reloaded.`, {type: \"success\"});\n BDEvents.dispatch(\"theme-reloaded\", theme);\n};\n\nThemeModule.prototype.reload = function(name) {\n return this.reloadTheme(name);\n};\n\nThemeModule.prototype.edit = function(filenameOrName) {\n const bdplugin = Object.values(bdthemes).find(p => p.filename == filenameOrName) || bdthemes[filenameOrName];\n if (!bdplugin) return;\n const fullPath = require(\"path\").resolve(ContentManager.themesFolder, bdplugin.filename);\n require(\"electron\").shell.openItem(`${fullPath}`);\n};\n\nThemeModule.prototype.updateThemeList = function() {\n const results = ContentManager.loadNewContent(\"theme\");\n for (const filename of results.added) this.loadTheme(filename);\n for (const name of results.removed) this.unloadTheme(name);\n};\n\nThemeModule.prototype.loadThemeData = function() {\n const saved = DataStore.getSettingGroup(\"themes\");\n if (saved) {\n Object.assign(themeCookie, saved);\n }\n};\n\nThemeModule.prototype.saveThemeData = function () {\n DataStore.setSettingGroup(\"themes\", themeCookie);\n};\n\nexport default new ThemeModule();","import {settings} from \"../0globals\";\nimport themeModule from \"./themeModule\";\n\nexport default new class V2 {\n\n constructor() {\n this.editorDetached = false;\n this.WebpackModules = (() => {\n const req = webpackJsonp.push([[], {__extra_id__: (module, exports, req) => module.exports = req}, [[\"__extra_id__\"]]]);\n delete req.m.__extra_id__;\n delete req.c.__extra_id__;\n\n const shouldProtect = theModule => {\n if (theModule.remove && theModule.set && theModule.clear && theModule.get && !theModule.sort) return true;\n if (theModule.getToken || theModule.getEmail || theModule.showToken) return true;\n return false;\n };\n\n const protect = (theModule, isDefault) => {\n let mod = !isDefault ? theModule.default : theModule\n if(!mod)return theModule\n if (mod.remove && mod.set && mod.clear && mod.get && !mod.sort) return null;\n if (!mod.getToken && !mod.getEmail && !mod.showToken)return theModule\n\n const proxy = new Proxy(mod, {\n getOwnPropertyDescriptor: function(obj, prop) {\n if (prop === \"getToken\" || prop === \"getEmail\" || prop === \"showToken\") return undefined;\n return Object.getOwnPropertyDescriptor(obj, prop);\n },\n get: function(obj, func) {\n if (func == \"getToken\" && obj.getToken) return () => \"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa\";\n if (func == \"getEmail\" && obj.getEmail) return () => \"puppet11112@gmail.com\";\n if (func == \"showToken\" && obj.showToken) return () => true;\n if (func == \"__proto__\" && obj.__proto__) return proxy;\n \n return obj[func];\n }\n });\n\n if(!isDefault){\n return Object.assign({}, theModule, {default: proxy})\n }\n\n return proxy;\n };\n\n const find = (filter) => {\n for (const i in req.c) {\n if (req.c.hasOwnProperty(i)) {\n const m = req.c[i].exports;\n if (m && m.__esModule && m.default && filter(m.default)) return protect(m.default, true);\n if (m && filter(m))\treturn protect(m, false);\n }\n }\n // console.warn(\"Cannot find loaded module in cache\");\n return null;\n };\n\n const findAll = (filter) => {\n const modules = [];\n for (const i in req.c) {\n if (req.c.hasOwnProperty(i)) {\n const m = req.c[i].exports;\n if (m && m.__esModule && m.default && filter(m.default)) modules.push(protect(m.default, true));\n else if (m && filter(m)) modules.push(protect(m, false));\n }\n }\n return modules;\n };\n\n const findByUniqueProperties = (propNames) => find(module => propNames.every(prop => module[prop] !== undefined));\n const findByPrototypes = (protoNames) => find(module => module.prototype && protoNames.every(protoProp => module.prototype[protoProp] !== undefined));\n const findByDisplayName = (displayName) => find(module => module.displayName === displayName);\n\n return {find, findAll, findByUniqueProperties, findByPrototypes, findByDisplayName};\n })();\n\n this.internal = {\n react: this.WebpackModules.findByUniqueProperties([\"Component\", \"PureComponent\", \"Children\", \"createElement\", \"cloneElement\"]),\n reactDom: this.WebpackModules.findByUniqueProperties([\"findDOMNode\"])\n };\n this.getInternalInstance = e => e[Object.keys(e).find(k => k.startsWith(\"__reactInternalInstance\"))];\n window.Lightcord.BetterDiscord.V2 = this\n }\n\n initialize() {\n\n }\n\n joinBD1() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"0Tmfo5ZbORCRqbAd\");}\n leaveBD1() {this.GuildActions.leaveGuild(\"86004744966914048\");}\n\n joinBD2() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"2HScm8j\");}\n leaveBD2() {this.GuildActions.leaveGuild(\"280806472928198656\");}\n\n joinLC() {this.InviteActions.acceptInviteAndTransitionToInviteChannel(\"7eFff2A\");}\n leaveLC() {this.GuildActions.leaveGuild(\"705908350218666117\");}\n\n /**\n * @type {typeof React}\n */\n get react() {return this.internal.react;}\n /**\n * @type {typeof React}\n */\n get React() {return this.internal.react;}\n /**\n * @type {typeof import(\"react-dom\")}\n */\n get reactDom() {return this.internal.reactDom;}\n /**\n * @type {typeof import(\"react-dom\")}\n */\n get ReactDom() {return this.internal.reactDom;}\n /**\n * @type {typeof React.Component}\n */\n get reactComponent() {return this.internal.react.Component;}\n /**\n * @type {typeof React.Component}\n */\n get ReactComponent() {return this.internal.react.Component;}\n\n get anchorClasses() {return this.WebpackModules.findByUniqueProperties([\"anchorUnderlineOnHover\"]) || {anchor: \"anchor-3Z-8Bb\", anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"};}\n get slateEditorClasses() {return this.WebpackModules.findByUniqueProperties([\"slateTextArea\"]);}\n get messageClasses() {return this.WebpackModules.findByUniqueProperties([\"message\", \"containerCozy\"]);}\n get guildClasses() {\n\t\tconst guildsWrapper = BDModules.get(e => e.wrapper && e.unreadMentionsBar)[0];\n const guilds = BDModules.get(e => e.guildsError && e.selected)[0]\n const pill = BDModules.get(e => e.blobContainer)[0]\n return Object.assign({}, guildsWrapper, guilds, pill);\n\t}\n\n get MessageContentComponent() {return this.WebpackModules.find(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));}\n get MessageComponent() {return this.WebpackModules.find(m => m.default && m.default.displayName && m.default.displayName == \"Message\");}\n get TimeFormatter() {return this.WebpackModules.findByUniqueProperties([\"dateFormat\"]);}\n get TooltipWrapper() {return this.WebpackModules.findByDisplayName(\"Tooltip\");}\n get NativeModule() {return this.WebpackModules.findByUniqueProperties([\"setBadge\"]);}\n get InviteActions() {return this.WebpackModules.findByUniqueProperties([\"acceptInvite\"]);}\n get GuildActions() {return this.WebpackModules.findByUniqueProperties([\"leaveGuild\"]);}\n get Tooltips() {return this.WebpackModules.find(m => m.hide && m.show && !m.search && !m.submit && !m.search && !m.activateRagingDemon && !m.dismiss);}\n get KeyGenerator() {return this.WebpackModules.find(m => m.toString && /\"binary\"/.test(m.toString()));}\n get LayerStack() {return this.WebpackModules.findByUniqueProperties([\"popLayer\"]);}\n get UserStore() {return this.WebpackModules.findByUniqueProperties([\"getCurrentUser\"]);}\n get ChannelStore() {return this.WebpackModules.findByUniqueProperties([\"getChannel\"]);}\n get ChannelActions() {return this.WebpackModules.findByUniqueProperties([\"openPrivateChannel\"]);}\n get PrivateChannelActions() {return this.WebpackModules.findByUniqueProperties([\"selectPrivateChannel\"]);}\n\n openDM(userId) {\n const selfId = this.UserStore.getCurrentUser().id;\n if (selfId == userId) return;\n const privateChannelId = this.ChannelStore.getDMFromUserId(userId);\n if (privateChannelId) return this.PrivateChannelActions.selectPrivateChannel(privateChannelId);\n this.ChannelActions.openPrivateChannel(selfId, userId);\n }\n\n parseSettings(cat) {\n return Object.keys(settings).reduce((arr, key) => {\n const setting = settings[key];\n if (setting.cat === cat && setting.implemented && !setting.hidden) {\n setting.text = key;\n arr.push(setting);\n } return arr;\n }, []);\n }\n\n};","import {bbdVersion} from \"../0globals\";\nimport WebpackModules from \"./webpackModules\";\nimport BDV2 from \"./v2\";\nimport DOM from \"./domtools\";\nexport default class Utils {\n /** Document/window width */\n static get screenWidth() { return Math.max(document.documentElement.clientWidth, window.innerWidth || 0); }\n /** Document/window height */\n static get screenHeight() { return Math.max(document.documentElement.clientHeight, window.innerHeight || 0); }\n\n static get WindowConfigFile() {\n return this._windowConfigFile = null;\n }\n\n static getAllWindowPreferences() {\n return {\n transparent: true,\n frame: false\n };\n }\n \n static getWindowPreference(key) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n \n static setWindowPreference(key, value) {\n if (key === \"transparent\") return true;\n if (key === \"frame\") return false;\n return null;\n }\n\n static stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n }\n\n static getTextArea() {\n return DOM.query(\".\"+removeDa(BDModules.get(e => e.channelTextArea && e.titleWrapper)[0].channelTextArea)+\" textarea\");\n }\n\n static insertText(textarea, text) {\n textarea.focus();\n textarea.selectionStart = 0;\n textarea.selectionEnd = textarea.value.length;\n document.execCommand(\"insertText\", false, text);\n }\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n static log(moduleName, message) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #3a71c1; font-weight: 700;\", \"color: #3a71c1;\", \"\");\n }\n\n static warn(moduleName, message) {\n console.warn(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: #E8A400; font-weight: 700;\", \"color: #E8A400;\", \"\");\n }\n\n static err(moduleName, message, error) {\n console.log(`%c[BandagedBD]%c [${moduleName}]%c ${message}`, \"color: red; font-weight: 700;\", \"color: red;\", \"\");\n if (error) {\n console.groupCollapsed(\"%cError: \" + error.message, \"color: red;\");\n console.error(error.stack);\n console.groupEnd();\n }\n }\n\n /**\n * Format strings with placeholders (`{{placeholder}}`) into full strings.\n * Quick example: `PluginUtilities.formatString(\"Hello, {{user}}\", {user: \"Zerebos\"})`\n * would return \"Hello, Zerebos\".\n * @param {string} string - string to format\n * @param {object} values - object literal of placeholders to replacements\n * @returns {string} the properly formatted string\n */\n static formatString(string, values) {\n for (const val in values) {\n let replacement = values[val];\n if (Array.isArray(replacement)) replacement = JSON.stringify(replacement);\n if (typeof(replacement) === \"object\" && replacement !== null) replacement = replacement.toString();\n string = string.replace(new RegExp(`{{${val}}}`, \"g\"), replacement);\n }\n return string;\n }\n\n static escape(s) {\n return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n }\n\n static testJSON(data) {\n try {\n return JSON.parse(data);\n }\n catch (err) {\n return false;\n }\n }\n\n static isEmpty(obj) {\n if (obj == null || obj == undefined || obj == \"\") return true;\n if (typeof(obj) !== \"object\") return false;\n if (Array.isArray(obj)) return obj.length == 0;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) return false;\n }\n return true;\n }\n\n static suppressErrors(method, message) {\n return (...params) => {\n try { return method(...params);\t}\n catch (e) { this.err(\"SuppressedError\", \"Error occurred in \" + message, e); }\n };\n }\n\n static monkeyPatch(what, methodName, options) {\n const {before, after, instead, once = false, silent = false, force = false} = options;\n const displayName = options.displayName || what.displayName || what[methodName].displayName || what.name || what.constructor.displayName || what.constructor.name;\n if (!silent) console.log(\"patch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n if (!what[methodName]) {\n if (force) what[methodName] = function() {};\n else return console.error(methodName, \"does not exist for\", displayName); // eslint-disable-line no-console\n }\n const origMethod = what[methodName];\n let canceled = false\n const cancel = () => {\n if (!silent) console.log(\"unpatch\", methodName, \"of\", displayName); // eslint-disable-line no-console\n //what[methodName] = origMethod;\n canceled = true // this allow to monkeypatch more than one time.\n };\n what[methodName] = function() {\n if(canceled){\n return origMethod.call(this, ...arguments)\n }\n const data = {\n thisObject: this,\n methodArguments: arguments,\n cancelPatch: cancel,\n originalMethod: origMethod,\n callOriginalMethod: () => data.returnValue = data.originalMethod.apply(data.thisObject, data.methodArguments)\n };\n if (instead) {\n const tempRet = Utils.suppressErrors(instead, \"`instead` callback of \" + what[methodName].displayName)(data);\n if (tempRet !== undefined) data.returnValue = tempRet;\n }\n else {\n if (before) Utils.suppressErrors(before, \"`before` callback of \" + what[methodName].displayName)(data);\n data.callOriginalMethod();\n if (after) Utils.suppressErrors(after, \"`after` callback of \" + what[methodName].displayName)(data);\n }\n if (once) cancel();\n return data.returnValue;\n };\n Object.assign(what[methodName], origMethod);\n what[methodName].__monkeyPatched = true;\n what[methodName].displayName = displayName;\n if (!what[methodName].__originalMethod) {\n what[methodName].__originalMethod = origMethod;\n what[methodName].toString = function() {return origMethod.toString();};\n }\n return cancel;\n }\n\n static onRemoved(node, callback) {\n const observer = new MutationObserver((mutations) => {\n for (let m = 0; m < mutations.length; m++) {\n const mutation = mutations[m];\n const nodes = Array.from(mutation.removedNodes);\n const directMatch = nodes.indexOf(node) > -1;\n const parentMatch = nodes.some(parent => parent.contains(node));\n if (directMatch || parentMatch) {\n observer.disconnect();\n callback();\n }\n }\n });\n\n observer.observe(document.body, {subtree: true, childList: true});\n }\n\n static getNestedProp(obj, path) {\n return path.split(/\\s?\\.\\s?/).reduce(function(obj, prop) {\n return obj && obj[prop];\n }, obj);\n }\n\n /**\n * This shows a toast similar to android towards the bottom of the screen.\n *\n * @param {string} content The string to show in the toast.\n * @param {object} options Options object. Optional parameter.\n * @param {string} options.type Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\n * @param {boolean} options.icon Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\n * @param {number} options.timeout Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\n */\n static showToast(content, options = {}) {\n if (!document.querySelector(\".bd-toasts\")) {\n const container = document.querySelector(\".\"+removeDa(BDModules.get(e => e.sidebar && e.hasNotice)[0].sidebar)+\" + div\") || null;\n const form = container ? container.querySelector(\"form\") : null;\n const bottom = form ? form.offsetHeight : 80;\n const toastWrapper = document.createElement(\"div\");\n toastWrapper.classList.add(\"bd-toasts\");\n toastWrapper.style.setProperty(\"bottom\", bottom+\"px\");\n document.querySelector(\"#app-mount\").appendChild(toastWrapper);\n }\n const toastWrapper = document.querySelector(\".bd-toasts\")\n const {type = \"\", icon = true, timeout = 3000} = options;\n const toastElem = document.createElement(\"div\");\n toastElem.classList.add(\"bd-toast\");\n if (type) toastElem.classList.add(\"toast-\" + type);\n if (type && icon) toastElem.classList.add(\"icon\");\n toastElem.innerText = content;\n toastWrapper.appendChild(toastElem);\n toastWrapper.style.setProperty(\"left\", `calc(50% - ${toastWrapper.offsetWidth / 2}px)`);\n setTimeout(() => {\n toastElem.classList.add(\"closing\");\n setTimeout(() => {\n toastElem.remove();\n if (!document.querySelectorAll(\".bd-toasts .bd-toast\").length) document.querySelector(\".bd-toasts\").remove();\n }, 300);\n }, timeout);\n }\n\n static alert(title, content) {\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0]\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0]\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0]\n const modal = DOM.createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
\n
${title}
\n
\n
\n
\n
\n ${content}\n
\n
\n
\n
\n \n
\n
\n
\n
`);\n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n });\n DOM.query(\"#app-mount\").append(modal);\n const closingListeners = []\n return {\n close: () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { \n modal.remove(); \n closingListeners.forEach((listener) => {\n try{\n listener()\n }catch(e){\n console.error(e)\n }\n })\n }, 300);\n },\n onClose: (listener) => {\n closingListeners.push(listener)\n }\n }\n }\n\n static showContentErrors({plugins: pluginErrors = [], themes: themeErrors = []}) {\n if (!pluginErrors || !themeErrors) return;\n if (!pluginErrors.length && !themeErrors.length) return;\n let modalModule = BDModules.get(e => e.modal && e.inner && !e.hideOnFullscreen)[0]\n let headerModule = BDModules.get(e => e.header && e.responsiveWidthMobile && e.hideOnFullscreen)[0]\n let footer2Module = BDModules.get(e => e.header && e.responsiveWidthMobile && e.focusLock)[0]\n const modal = DOM.createElement(`
\n
e.backdrop && e.backdropWithLayer)[0].backdrop}\">
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
`);\n \n function generateTab(errors) {\n const container = DOM.createElement(`
`);\n for (const err of errors) {\n const error = DOM.createElement(`
\n
${err.name ? err.name : err.file}
\n
${err.message}
\n \n
`);\n container.append(error);\n if (err.error) {\n error.querySelectorAll(\"a\").forEach(el => el.addEventListener(\"click\", (e) => {\n e.preventDefault();\n Utils.err(\"ContentManager\", `Error details for ${err.name ? err.name : err.file}.`, err.error);\n }));\n }\n }\n return container;\n }\n \n const tabs = [generateTab(pluginErrors), generateTab(themeErrors)];\n \n modal.querySelectorAll(\".tab-bar-item\").forEach(el => el.addEventListener(\"click\", (e) => {\n e.preventDefault();\n const selected = modal.querySelector(\".tab-bar-item.selected\");\n if (selected) DOM.removeClass(selected, \"selected\");\n DOM.addClass(e.target, \"selected\");\n const scroller = modal.querySelector(\".scroller\");\n scroller.innerHTML = \"\";\n scroller.append(tabs[DOM.index(e.target)]);\n }));\n \n modal.querySelector(\".footer button\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { modal.remove(); }, 300);\n });\n modal.querySelector(\".bd-backdrop\").addEventListener(\"click\", () => {\n DOM.addClass(modal, \"closing\");\n setTimeout(() => { modal.remove(); }, 300);\n });\n DOM.query(\"#app-mount\").append(modal);\n if (pluginErrors.length) modal.querySelector(\".tab-bar-item\").click();\n else modal.querySelectorAll(\".tab-bar-item\")[1].click();\n }\n\n static showChangelogModal(options = {}) {\n const ModalStack = WebpackModules.findByProps(\"push\", \"update\", \"pop\", \"popWithKey\");\n const ChangelogClasses = WebpackModules.findByProps(\"fixed\", \"improved\");\n const TextElement = WebpackModules.findByDisplayName(\"Text\");\n const FlexChild = WebpackModules.findByProps(\"Child\");\n const Titles = WebpackModules.findByProps(\"Tags\", \"default\");\n const Changelog = WebpackModules.find(m => m.defaultProps && m.defaultProps.selectable == false);\n const MarkdownParser = WebpackModules.findByProps(\"defaultRules\", \"parse\");\n if (!Changelog || !ModalStack || !ChangelogClasses || !TextElement || !FlexChild || !Titles || !MarkdownParser) return;\n \n const {\n image = \"https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5\", \n description = \"\", \n changes = [], \n title = \"BandagedBD\", \n subtitle = `v${bbdVersion}`, \n footer\n } = options;\n const ce = BDV2.React.createElement;\n const changelogItems = [ce(\"img\", {src: image})];\n if (description) changelogItems.push(ce(\"p\", null, MarkdownParser.parse(description)));\n for (let c = 0; c < changes.length; c++) {\n const entry = changes[c];\n const type = ChangelogClasses[entry.type] ? ChangelogClasses[entry.type] : ChangelogClasses.added;\n const margin = c == 0 ? ChangelogClasses.marginTop : \"\";\n changelogItems.push(ce(\"h1\", {className: `${type} ${margin}`,}, entry.title));\n const list = ce(\"ul\", null, entry.items.map(i => ce(\"li\", null, MarkdownParser.parse(i))));\n changelogItems.push(list);\n }\n const renderHeader = function() {\n return ce(FlexChild.Child, {grow: 1, shrink: 1},\n ce(Titles.default, {tag: Titles.Tags.H4}, title),\n ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.STANDARD, className: ChangelogClasses.date}, subtitle)\n );\n };\n \n const renderFooter = () => {\n const Anchor = WebpackModules.find(m => m.displayName == \"Anchor\");\n const AnchorClasses = WebpackModules.findByProps(\"anchorUnderlineOnHover\") || {anchor: \"anchor-3Z-8Bb\", anchorUnderlineOnHover: \"anchorUnderlineOnHover-2ESHQB\"};\n const joinSupportServer = (click) => {\n click.preventDefault();\n click.stopPropagation();\n ModalStack.pop();\n BDV2.joinBD2();\n };\n const supportLink = Anchor ? ce(Anchor, {onClick: joinSupportServer}, \"Join our Discord Server.\") : ce(\"a\", {className: `${AnchorClasses.anchor} ${AnchorClasses.anchorUnderlineOnHover}`, onClick: joinSupportServer}, \"Join our Discord Server.\");\n const defaultFooter = ce(TextElement,{size: TextElement.Sizes.SMALL, color: TextElement.Colors.STANDARD}, \"Need support? \", supportLink);\n return ce(FlexChild.Child, {grow: 1, shrink: 1}, footer ? footer : defaultFooter);\n };\n\n return ModalStack.push(function(props) {\n return ce(Changelog, Object.assign({\n className: ChangelogClasses.container,\n selectable: true,\n onScroll: _ => _,\n onClose: _ => _,\n renderHeader: renderHeader,\n renderFooter: renderFooter,\n children: changelogItems\n }, props));\n });\n }\n\n /**\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\n * @param {string} title - title of the modal\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Every string is wrapped in Discord's `Markdown` component so strings will show and render properly.\n * @param {object} [options] - options to modify the modal\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\n * @param {string} [options.key] - key used to identify the modal. If not provided, one is generated and returned\n * @returns {string} - the key used for this modal\n */\n static showConfirmationModal(title, content, options = {}) {\n const ModalActions = WebpackModules.findByProps(\"openModal\", \"updateModal\");\n const Markdown = WebpackModules.findByDisplayName(\"Markdown\");\n const ConfirmationModal = WebpackModules.findByDisplayName(\"ConfirmModal\");\n if (!ModalActions || !ConfirmationModal || !Markdown) return Utils.alert(title, content);\n\n const emptyFunction = () => {};\n const {onConfirm = emptyFunction, onCancel = emptyFunction, confirmText = \"Okay\", cancelText = \"Cancel\", danger = false, key = undefined} = options;\n\n if (!Array.isArray(content)) content = [content];\n content = content.map(c => typeof(c) === \"string\" ? BDV2.React.createElement(Markdown, null, c) : c);\n return ModalActions.openModal(props => {\n return BDV2.React.createElement(ConfirmationModal, Object.assign({\n header: title,\n red: danger,\n confirmText: confirmText,\n cancelText: cancelText,\n onConfirm: onConfirm,\n onCancel: onCancel\n }, props), content);\n }, {modalKey: key});\n }\n\n static get removeDa(){\n return removeDa\n }\n}\n\nfunction removeDa(className){\n if(!className)return className\n return className.split(\" \").filter(e => !e.startsWith(\"da-\")).join(\" \")\n}\n\nUtils.showToast = Utils.suppressErrors(Utils.showToast, \"Could not show toast.\");\n\nwindow.Lightcord.BetterDiscord.Utils = Utils","export default class V2_SettingsPanel_Sidebar {\n\n constructor() {\n this.panels = {}\n }\n\n register(panel, component){\n this.panels[panel] = component\n }\n\n getComponent(panel, sidebar){\n return this.panels[panel](sidebar)\n }\n\n get items() {\n return [{\n text: \"BetterDiscord Settings\", \n id: \"core\"\n }, {\n text: \"Plugins\", \n id: \"plugins\"\n }, {\n text: \"Themes\", \n id: \"themes\"\n }, {\n text: \"Custom CSS\", \n id: \"customcss\"\n }];\n }\n\n get LCitems(){\n let items = [\n {\n text: \"Lightcord Settings\",\n id: \"lightcord\"\n }, {\n text: \"RichPresence\", \n id: \"status\"\n }, {\n text: \"Account Info\",\n id: \"accountinfo\"\n }\n ]\n return items\n }\n\n get LCDevItems(){\n let items = []\n if(!window.Lightcord.Settings.devMode)return items\n items.push(...[\n {\n section: \"DIVIDER\"\n },\n {\n section: \"HEADER\",\n label: \"Lightcord Api\"\n },\n {\n text: \"Components Preview\",\n id: \"lcapipreview\"\n }\n ])\n return items\n }\n\n render(sidebar) {\n return [\n {\n section: \"HEADER\",\n label: \"Lightcord\"\n },\n ...this.LCitems.map(e => {\n return {\n section: e.id,\n label: e.text,\n element: this.getComponent(e.id, sidebar)\n }\n }),\n ...this.LCDevItems.map(e => {\n if(e.section)return e\n return {\n section: e.id,\n label: e.text,\n element: this.getComponent(e.id, sidebar)\n }\n }),\n {\n section: \"DIVIDER\"\n },\n {\n section: \"CUSTOM\",\n element: this.getComponent(\"BDChangelogTitle\")\n },\n ...this.items.map(e => {\n return {\n section: e.id,\n label: e.text,\n element: this.getComponent(e.id, sidebar)\n }\n }),\n {\n section: \"DIVIDER\"\n }\n ]\n }\n}\n\n/**\n * No need to export settingsPanelSidebar on window\n */","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class ColoredText {\r\n injectColoredText() {\r\n if (this.cancelColoredText) return;\r\n if (!BDV2.MessageComponent) return;\r\n\r\n this.cancelColoredText = Utils.monkeyPatch(BDV2.MessageComponent, \"default\", {before: (data) => {\r\n const props = data.methodArguments[0];\r\n if (!props || !props.childrenMessageContent) return;\r\n const messageContent = props.childrenMessageContent;\r\n\r\n if (!messageContent.type || !messageContent.type.type || messageContent.type.type.displayName != \"MessageContent\") return;\r\n const originalType = messageContent.type.type;\r\n if (originalType.__originalMethod) return; // Don't patch again\r\n messageContent.type.type = function(props) {\r\n const returnValue = originalType(props);\r\n const roleColor = settingsCookie[\"bda-gs-7\"] ? props.message.colorString || \"\" : \"\";\r\n returnValue.props.style = {color: roleColor};\r\n return returnValue;\r\n };\r\n\r\n messageContent.type.type.__originalMethod = originalType;\r\n Object.assign(messageContent.type.type, originalType);\r\n }});\r\n }\r\n\r\n removeColoredText() {\r\n let classNameMarkup = BDModules.get(e => e.markup)[0].markup\r\n document.querySelectorAll(\".\"+classNameMarkup.split(\" \")[0]).forEach(elem => {\r\n elem.style.setProperty(\"color\", \"\");\r\n });\r\n }\r\n};","import {settingsCookie} from \"../0globals\";\r\nimport BDV2 from \"./v2\";\r\nimport Utils from \"./utils\";\r\n\r\nexport default new class TFHour {\r\n inject24Hour() {\r\n if (this.cancel24Hour) return;\r\n\r\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\r\n const convert = (data) => {\r\n if (!settingsCookie[\"bda-gs-6\"]) return;\r\n const matched = data.returnValue.match(twelveHour);\r\n if (!matched || matched.length !== 4) return;\r\n if (matched[3] === \"AM\") return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\r\n return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\r\n };\r\n\r\n const cancelCozy = Utils.monkeyPatch(BDV2.TimeFormatter, \"calendarFormat\", {after: convert}); // Called in Cozy mode\r\n const cancelCompact = Utils.monkeyPatch(BDV2.TimeFormatter, \"dateFormat\", {after: convert}); // Called in Compact mode\r\n this.cancel24Hour = () => {cancelCozy(); cancelCompact();}; // Cancel both\r\n }\r\n\r\n remove24Hour() {\r\n if (this.cancel24Hour) this.cancel24Hour();\r\n }\r\n};","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_SettingsTitle extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n//h2-2gWE-o title-3sZWYQ size16-14cGz5 height20-mO2eIN weightSemiBold-NJexzi da-h2 da-title da-size16 da-height20 da-weightSemiBold defaultColor-1_ajX0 da-defaultColor marginTop60-3PGbtK da-marginTop60 marginBottom20-32qID7 da-marginBottom20\r\n render() {\r\n return BDV2.react.createElement(\r\n \"h2\",\r\n {className: \"ui-form-title h2 margin-reset margin-bottom-20\"},\r\n this.props.text\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_TabBarSeparator extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"div\", {className: \"ui-tab-bar-separator margin-top-8 margin-bottom-8\"});\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\r\n\r\nexport default class V2C_ServerCard extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n if (!this.props.server.iconUrl) this.props.server.iconUrl = this.props.fallback;\r\n this.state = {\r\n imageError: false,\r\n joined: this.props.guildList.includes(this.props.server.identifier)\r\n };\r\n }\r\n\r\n render() {\r\n const {server} = this.props;\r\n let cardModule = BDModules.get(e => e.card && e.cardPrimary)[0]\r\n let flexModule = BDModules.get(e => e.flexChild && e._horizontalReverse)[0]\r\n let wrapModule = BDModules.get(e => e.noWrap && !e.streamerModeEnabled)[0]\r\n return BDV2.react.createElement(\r\n \"div\", // cardPrimary-1Hv-to\r\n {className: `${cardModule.card} ${cardModule.cardPrimary} ${BDModules.get(e => e.marginBottom8)[0].marginBottom8} bd-server-card${server.pinned ? \" bd-server-card-pinned\" : \"\"}`},\r\n // BDV2.react.createElement(\r\n // \"div\",\r\n // { className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY flex-1O1GKY directionRow-3v3tfG justifyStart-2yIZo0 alignStretch-1hwxMa noWrap-3jynv6\" },\r\n BDV2.react.createElement(\"img\", {ref: \"img\", className: \"bd-server-image\", src: server.iconUrl, onError: this.handleError.bind(this), draggable: false}),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.flexChild+\" bd-server-content\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.horizontal+\" \"+wrapModule.noWrap+\" bd-server-header\"},\r\n BDV2.react.createElement(\r\n \"h5\",\r\n {className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name\"},\r\n server.name\r\n ),\r\n BDV2.react.createElement(\r\n \"h5\",\r\n {className: \"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count\"},\r\n server.members,\r\n \" Members\"\r\n )\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: flexModule.horizontal+\" \"+wrapModule.noWrap},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"scroller-2FKFPG scroller bd-server-description\"},\r\n server.description\r\n )\r\n )\r\n ),\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer\"},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"flexChild-faoVW3 bd-server-tags\", style: {flex: \"1 1 auto\"}},\r\n server.categories.join(\", \")\r\n ),\r\n this.state.joined && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY\", style: {minHeight: \"12px\", marginTop: \"4px\", backgroundColor: \"#3ac15c\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Joined\"\r\n )\r\n ),\r\n server.error && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug\", style: {minHeight: \"12px\", marginTop: \"4px\", backgroundColor: \"#c13a3a\"}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Error\"\r\n )\r\n ),\r\n !server.error && !this.state.joined && BDV2.react.createElement(\r\n \"button\",\r\n {type: \"button\", className: \"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN\", style: {minHeight: \"12px\", marginTop: \"4px\"}, onClick: () => {this.join();}},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"ui-button-contents\"},\r\n \"Join\"\r\n )\r\n )\r\n )\r\n )\r\n // )\r\n );\r\n }\r\n\r\n handleError() {\r\n this.props.server.iconUrl = this.props.fallback;\r\n this.setState({imageError: true});\r\n }\r\n\r\n join() {\r\n this.props.join(this);\r\n //this.setState({joined: true});\r\n }\r\n}","import BDV2 from \"./v2\"\nconst {useState} = BDV2.react\n\n\nexport function useForceUpdate(){\n return useState()[1];\n}","import BDV2 from \"../../modules/v2\";\n\nimport SettingsTitle from \"../settingsTitle\";\nimport TabBarSeparator from \"../tabBarSeparator\";\n\nimport ServerCard from \"./serverCard\";\nimport { useForceUpdate } from \"../../modules/hooks\";\n\nlet SettingsView\nexport default class V2C_PublicServers extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n this.setInitialState();\n this.close = this.close.bind(this);\n this.changeCategory = this.changeCategory.bind(this);\n this.search = this.search.bind(this);\n this.searchKeyDown = this.searchKeyDown.bind(this);\n this.checkConnection = this.checkConnection.bind(this);\n this.join = this.join.bind(this);\n this.connect = this.connect.bind(this);\n\n this.GuildStore = BDV2.WebpackModules.findByUniqueProperties([\"getGuilds\"]);\n this.AvatarDefaults = BDV2.WebpackModules.findByUniqueProperties([\"getUserAvatarURL\", \"DEFAULT_AVATARS\"]);\n this.InviteActions = BDV2.WebpackModules.findByUniqueProperties([\"acceptInvite\"]);\n this.SortedGuildStore = BDV2.WebpackModules.findByUniqueProperties([\"getSortedGuilds\"]);\n\n this.hooks = []\n }\n\n componentDidMount() {\n this.checkConnection();\n }\n\n setInitialState() {\n this.state = {\n selectedCategory: -1,\n title: \"Loading...\",\n loading: true,\n servers: [],\n next: null,\n connection: {\n state: 0,\n user: null\n },\n section: this.categorySlugs[0],\n theme: \"dark\"\n };\n }\n\n close() {\n this.props.close()\n }\n\n search(query, clear) {\n const self = this;\n fetch(`${self.searchEndPoint}${query}${query ? \"&schema=new\" : \"?schema=new\"}`, {\n method: \"get\"\n }).then(async res => {\n if(res.status !== 200)throw await res.text()\n let data = await res.json()\n \n let servers = data.results.reduce((arr, server) => {\n server.joined = false;\n arr.push(server);\n // arr.push();\n return arr;\n }, []);\n\n if (!clear) {\n servers = self.state.servers.concat(servers);\n }\n else {\n //servers.unshift(self.bdServer);\n }\n\n let end = data.size + data.from;\n data.next = `?from=${end}`;\n if (self.state.term) data.next += `&term=${self.state.term}`;\n if (self.state.selectedCategory) data.next += `&category=${self.categoryButtons[self.state.selectedCategory]}`;\n if (end >= data.total) {\n end = data.total;\n data.next = null;\n }\n\n let title = `Showing 1-${end} of ${data.total} results in ${self.categoryButtons[self.state.selectedCategory]}`;\n if (self.state.term) title += ` for ${self.state.term}`;\n\n self.setState({\n loading: false,\n title: title,\n servers: servers,\n next: data.next\n });\n }).catch((err) => {\n console.error(err)\n return self.setState({\n loading: false,\n title: \"Failed to load servers. Check console for details\"\n });\n })\n }\n\n async join(serverCard) {\n if (serverCard.props.pinned) return this.InviteActions.acceptInvite(serverCard.props.invite_code);\n\n await fetch(`${this.joinEndPoint}/${serverCard.props.server.identifier}`,{\n method: \"GET\",\n credentials: \"include\",\n mode: \"cors\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n });\n\n serverCard.setState({joined: true});\n }\n\n connect() {\n const self = this;\n const options = self.windowOptions;\n options.x = Math.round(window.screenX + window.innerWidth / 2 - options.width / 2);\n options.y = Math.round(window.screenY + window.innerHeight / 2 - options.height / 2);\n\n const win = self.joinWindow = new (require(\"electron\").remote.BrowserWindow)(options);\n const url = \"https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info\";\n win.webContents.on(\"did-navigate\", (event, url) => {\n if (url != \"https://auth.discordservers.com/info\") return;\n win.close();\n self.checkConnection();\n });\n win.loadURL(url);\n win.setMenuBarVisibility(false)\n }\n\n get windowOptions() {\n return {\n width: 500,\n height: 550,\n backgroundColor: \"#282b30\",\n show: true,\n resizable: false,\n maximizable: false,\n minimizable: false,\n alwaysOnTop: true,\n frame: true,\n center: false,\n webPreferences: {\n nodeIntegration: false\n }\n };\n }\n\n get bdServer() {\n const server = {\n name: \"BetterDiscord\",\n online: \"30000+\",\n members: \"70000+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official BetterDiscord server for support etc\",\n identifier: \"86004744966914048\",\n iconUrl: \"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp\",\n nativejoin: true,\n invite_code: \"0Tmfo5ZbORCRqbAd\",\n pinned: true\n };\n const server2 = {\n name: \"Lightcord\",\n online: \"100+\",\n members: \"300+\",\n categories: [\"community\", \"programming\", \"support\"],\n description: \"Official Lightcord server for support etc\",\n identifier: \"705908350218666117\",\n iconUrl: \"https://github.com/lightcord.png\",\n nativejoin: true,\n invite_code: \"7eFff2A\",\n pinned: true\n };\n const guildList = this.SortedGuildStore.getFlattenedGuildIds();\n const defaultList = this.AvatarDefaults.DEFAULT_AVATARS;\n return [\n BDV2.react.createElement(ServerCard, {server: server2, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]}),\n BDV2.react.createElement(ServerCard, {server: server, pinned: true, join: this.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]})\n ]\n }\n\n get searchEndPoint() {\n return \"https://search.discordservers.com\";\n }\n\n get joinEndPoint() {\n return \"https://j.discordservers.com\";\n }\n\n get connectEndPoint() {\n return \"https://join.discordservers.com/connect\";\n }\n\n async checkConnection() {\n const self = this;\n try {\n const response = await fetch(`https://auth.discordservers.com/info`,{\n method: \"GET\",\n credentials: \"include\",\n mode: \"cors\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\"\n }\n });\n const text = await response.text()\n if(!text){\n self.setState({\n title: \"Not connected to discordservers.com!\",\n loading: true,\n selectedCategory: -1,\n connection: {\n state: 1,\n user: null\n }\n });\n return\n }\n const data = JSON.parse(text)\n self.setState({\n selectedCategory: 0,\n connection: {\n state: 2,\n user: data\n }\n });\n self.search(\"\", true);\n }\n catch (error) {\n console.error(error)\n self.setState({\n title: \"Not connected to discordservers.com!\",\n loading: true,\n selectedCategory: -1,\n connection: {\n state: 1,\n user: null\n }\n });\n }\n }\n\n render() {\n this.hooks.forEach((e) => e())\n SettingsView = SettingsView || BDV2.WebpackModules.findByDisplayName(\"SettingsView\")\n return BDV2.react.createElement(\"div\", {id: \"pubslayerroot\"}, \n BDV2.react.createElement(\"div\", {id: \"pubslayer\"}, BDV2.react.createElement(SettingsView, {\n onSetSection: (section) => {\n this.changeCategory(this.categorySlugs.indexOf(section))\n },\n sections: this.sections,\n onClose: this.close,\n section: this.state.section\n }))\n );\n }\n\n get sections(){\n let sections = []\n sections.push({\n section: \"HEADER\",\n label: \"Public Servers\"\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: this.searchInput.bind(null, () => this, this.searchKeyDown)\n }, {\n section: \"DIVIDER\"\n }, {\n section: \"HEADER\",\n label: \"Categories\"\n }, ...this.categoryButtons.map((value, index) => {\n return {\n section: this.categorySlugs[index],\n label: value,\n element: this.content.bind(null, () => this)\n }\n }), {\n section: \"DIVIDER\"\n }, {\n section: \"CUSTOM\",\n element: this.footer\n }, {\n section: \"CUSTOM\",\n element: this.connection.bind(null, () => this)\n })\n return sections\n }\n \n searchInput(getThis, searchKeyDown) {\n const [value, setValue] = BDV2.react.useState(\"\")\n return BDV2.react.createElement(\n \"div\",\n {className: \"ui-form-item\"},\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-text-input flex-vertical\", style: {width: \"172px\", marginLeft: \"10px\"}},\n BDV2.react.createElement(\"input\", {\n ref: (serchinput) => (getThis().refs.searchinput = serchinput), \n onKeyDown: searchKeyDown, \n onChange: (e) => {\n setValue(e.target.value)\n }, \n type: \"text\", \n className: \"input default\", \n placeholder: \"Search...\", \n maxLength: \"50\",\n value: value\n })\n )\n );\n }\n\n searchKeyDown(e) {\n const self = this;\n if (self.state.loading || e.which !== 13) return;\n self.setState({\n loading: true,\n title: \"Loading...\",\n term: e.target.value\n });\n let query = `?term=${e.target.value}`;\n if (self.state.selectedCategory !== 0) {\n query += `&category=${self.categoryButtons[self.state.selectedCategory]}`;\n }\n self.search(query, true);\n }\n\n get categorySlugs(){\n return this.categoryButtons.map(e => e.toLowerCase().replace(/[^\\w\\d]+/g, \"_\"))\n }\n\n get categoryButtons() {\n return [\"All\", \"FPS Games\", \"MMO Games\", \"Strategy Games\", \"MOBA Games\", \"RPG Games\", \"Tabletop Games\", \"Sandbox Games\", \"Simulation Games\", \"Music\", \"Community\", \"Language\", \"Programming\", \"Other\"];\n }\n\n changeCategory(id) {\n const self = this;\n if (self.state.loading) return;\n self.setState({\n loading: true,\n selectedCategory: id,\n title: \"Loading...\",\n term: null,\n section: self.categorySlugs[id]\n });\n if (id === 0) {\n self.search(\"\", true);\n return;\n }\n self.search(`?category=${self.categoryButtons[id]}`, true);\n }\n\n content(getThis) {\n const self = getThis();\n self.useState()\n const guildList = self.SortedGuildStore.getFlattenedGuildIds();\n const defaultList = self.AvatarDefaults.DEFAULT_AVATARS;\n if (self.state.connection.state === 1) return BDV2.react.createElement(self.notConnected.bind(null, getThis));\n let columnModule = BDModules.get(e => e.contentColumnDefault)[0]\n return [BDV2.react.createElement(\n \"div\",\n {ref: (ref) => {\n (self.refs.content = ref)\n }, key: \"pc\", className: columnModule.contentColumn+\" \"+columnModule.contentColumn+\" content-column default\"},\n BDV2.react.createElement(SettingsTitle, {text: self.state.title}),\n self.bdServer,\n self.state.servers.map((server) => {\n return BDV2.react.createElement(ServerCard, {key: server.identifier, server: server, join: self.join, guildList: guildList, fallback: defaultList[Math.floor(Math.random() * 5)]});\n }),\n self.state.next && BDV2.react.createElement(\n \"button\",\n {type: \"button\", onClick: () => {\n if (self.state.loading) return;self.setState({loading: true}); self.search(self.state.next, false);\n }, className: \"ui-button filled brand small grow\", style: {width: \"100%\", marginTop: \"10px\", marginBottom: \"10px\"}},\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-button-contents\"},\n self.state.loading ? \"Loading\" : \"Load More\"\n )\n ),\n self.state.servers.length > 0 && BDV2.react.createElement(SettingsTitle, {text: self.state.title})\n )];\n }\n\n notConnected(getThis) {\n const self = getThis();\n //return BDV2.react.createElement(SettingsTitle, { text: self.state.title });\n let columnModule = BDModules.get(e => e.contentColumnDefault)[0]\n return [BDV2.react.createElement(\n \"div\",\n {key: \"ncc\", ref: (ref) => (self.refs.content = ref), className: columnModule.contentColumn+\" \"+columnModule.contentColumn+\" content-column default\"},\n BDV2.react.createElement(\n \"h2\",\n {className: \"ui-form-title h2 margin-reset margin-bottom-20\"},\n \"Not connected to discordservers.com!\",\n BDV2.react.createElement(\n \"button\",\n {\n onClick: self.connect,\n type: \"button\",\n className: \"ui-button filled brand small grow\",\n style: {\n display: \"inline-block\",\n minHeight: \"18px\",\n marginLeft: \"10px\",\n lineHeight: \"14px\"\n }\n },\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-button-contents\"},\n \"Connect\"\n )\n )\n ), self.bdServer\n )];\n }\n\n footer() {\n return BDV2.react.createElement(\n \"div\",\n {className: \"ui-tab-bar-header\"},\n BDV2.react.createElement(\n \"a\",\n {href: \"https://discordservers.com\", target: \"_blank\"},\n \"Discordservers.com\"\n )\n );\n }\n\n useState(){\n const forceUpdate = useForceUpdate()\n BDV2.React.useEffect(() => {\n const listener = () => {\n forceUpdate()\n }\n this.hooks.push(listener)\n return () => {\n const index = this.hooks.findIndex(e => e===listener)\n if(index < 0)return\n this.hooks.splice(index, 1)\n }\n }, [])\n }\n\n connection(getThis) {\n const self = getThis();\n self.useState()\n const {connection} = self.state;\n if (connection.state !== 2) return BDV2.react.createElement(\"span\", null);\n\n return BDV2.react.createElement(\n \"span\",\n null,\n BDV2.react.createElement(TabBarSeparator, null),\n BDV2.react.createElement(\n \"span\",\n {style: {color: \"#b9bbbe\", fontSize: \"10px\", marginLeft: \"10px\"}},\n \"Connected as: \",\n `${connection.user.username}#${connection.user.discriminator}`\n ),\n BDV2.react.createElement(\n \"div\",\n {style: {padding: \"5px 10px 0 10px\"}},\n BDV2.react.createElement(\n \"button\",\n {style: {width: \"100%\", minHeight: \"20px\"}, type: \"button\", className: \"ui-button filled brand small grow\"},\n BDV2.react.createElement(\n \"div\",\n {className: \"ui-button-contents\", onClick: self.connect},\n \"Reconnect\"\n )\n )\n )\n );\n }\n}","export default class BugHunterBadge extends React.Component {\r\n render(){\r\n const props = this.props\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n } \r\n}","export default class Circus extends React.Component {\r\n render(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n } \r\n}","import BugHunterBadge from \"../svg/bug_hunter\"\nimport nodeFetch from \"node-fetch\"\nimport { settingsCookie } from \"../0globals\";\nimport Circus from \"../svg/circus\";\n\nexport function uuidv4() { // Generate UUID (No crypto rng)\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n} \n\nconst awaitingBadgesPromises = {}\nlet badgesToFetch = []\n\nexport default new class DistantServer {\n constructor(){\n this._cache = {\n badges: {\n\n }\n }\n window.Lightcord.BetterDiscord.DistantServer = this\n }\n\n get cache(){\n return this._cache\n }\n\n set cache(data){\n if(typeof data !== \"object\" || typeof this._cache !== \"object\")return this._cache = data\n return this._cache = Object.assign(this._cache, data)\n }\n\n /**\n * Get custom badges from the user ID.\n * @param {string} user The user ID \n * @returns {Promise}\n */\n async getBadges(user){\n if(this.cache.badges[user])return this.cache.badges[user]\n if(awaitingBadgesPromises[user])return awaitingBadgesPromises[user]\n\n let resolve\n const newPromise = new Promise((res) => (resolve = res))\n awaitingBadgesPromises[user] = newPromise\n\n const badges = []\n for(let badge of Constants.badges){\n if(badge.defaultUsers.includes(user))badges.push(badge)\n }\n const fetchedBadges = await new Promise((resolve) => {\n if(!settingsCookie[\"lightcord-5\"])return resolve([])\n badgesToFetch.push([user, resolve])\n setTimeout(() => {\n let users = badgesToFetch\n if(users.length === 0)return\n badgesToFetch = []\n handleRequest(Routes.badges, \"POST\", JSON.stringify(users.map(e => e[0])))\n .then(async res => {\n if(res.status !== 200){// Couldn't fetch badges: server error\n users.forEach(data => {\n data[1]([])// resolve no badge fetched\n })\n }\n const responseBody = await res.json()\n \n for(let user of responseBody){\n let promise = users.find(promise => promise[0] === user.user_id)\n promise[1](user.badges)\n }\n }).catch((err) => {// Couldn't fetch badges: error\n if(!(err instanceof LightcordError))console.error(err)\n users.forEach(data => {\n data[1]([])// resolve no badge fetched\n })\n })\n }, 0)\n })\n for(let badge of fetchedBadges){\n if(!Constants.badges.find(e => e.id === badge))continue // We do not have the Component, skip it.\n if(badges.find(e => e.id === badge))continue // Already inserted.\n badges.push(Constants.badges.find(e => e.id === badge))\n }\n this.cache = {\n badges: Object.assign(this.cache.badges, {[user]: badges})\n }\n setTimeout(() => {\n delete this.cache.badges[user]\n }, 600000);\n\n resolve(badges)\n delete awaitingBadgesPromises[user]\n return badges\n }\n}\n\nconst handleRequest = function(route, method, data){\n if(!settingsCookie[\"lightcord-5\"]){\n return Promise.reject(new LightcordError(\"The current settings blocked the request.\"))\n }\n return nodeFetch(`${Constants.SERVER_URL}/api/v1${route}`, {\n method,\n headers: {\n \"CLIENT\": \"Lightcord\",\n \"Authorization\": window.Lightcord.Api.Authorization || \"None::Anonymous\"\n },\n ...(data ? {\n body: data\n } : {})\n })\n}\n\nclass LightcordError extends Error {\n constructor(){\n super(...arguments)\n this.name = \"LightcordError\"\n }\n}\n\nexport const Constants = {\n SERVER_URL: \"https://lightcord.deroku.xyz\",\n badges: [ // TODO: Add more badges + server side svg\n {\n name: \"Lightcord Bug Hunter\",\n id: \"f04698f5-816b-41e3-bd01-92291193d7a5\",\n defaultUsers: [\n \"696481194443014174\",\n \"696003456611385396\"\n ],\n scopes: [],\n component: BugHunterBadge,\n href: \"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter\"\n }, {\n name: \"Buffoon\",\n id: \"06904d31-65b4-41ec-a50c-8658bbd1af96\",\n defaultUsers: [\n \"389016895543705602\",\n \"664600134528663565\",\n \"625350657829896224\"\n ],\n scopes: [],\n component: Circus,\n href: \"https://youtu.be/EJtb6z-dlT8?t=145\"\n }\n ]\n}\n\nexport const Routes = {\n badges: `/users/badges`\n}","import Utils from \"./utils\";\nimport v2 from \"./v2\";\nimport { uuidv4 } from \"./distant\";\nimport { timingSafeEqual } from \"crypto\";\n\nexport default new class Layers {\n constructor(){\n this.layers = []\n window.Lightcord.BetterDiscord.Layers = this\n }\n\n get isInjected(){\n return !!document.querySelector(\"div.Layers.injected\")\n }\n\n inject(){\n if(this.isInjected)return\n let [\n classNameLayers\n ] = [\n Utils.removeDa(v2.WebpackModules.find(e => e.layers && e.layer).layers)\n ]\n const layers = document.querySelector(\".\"+classNameLayers);\n if (!layers) return false;\n const ReactInstance = Lightcord.Api.Utils.FindReact(layers, 1)\n if(!ReactInstance)return layers\n this.ReactInstance = ReactInstance\n let render = ReactInstance.render\n ReactInstance.render = () => {\n let returnValue = render.call(ReactInstance)\n let classList = returnValue.props.children[1].props.className.split(\" \")\n classList.push(\"Layers\")\n classList.push(\"injected\")\n returnValue.props.children[1].props.className = classList.join(\" \")\n\n this.layers.forEach(layer => {\n returnValue.props.children[1].props.children.push(layer[1])\n })\n\n return returnValue\n }\n ReactInstance.forceUpdate()\n }\n\n createLayer(children, props = {}){\n let id = uuidv4()\n let layer = null\n this.layers.push([id, {\n layer = lay\n }} key={id} id={id} remove={() => {\n let index = this.layers.findIndex(e => e[0] === id)\n if(index === -1)return\n this.layers.splice(index, 1)\n layer = null\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\n this.inject()\n }}>{children}])\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\n this.inject()\n return {\n remove: () => {\n if(!layer){\n let index = this.layers.findIndex(e => e[0] === id)\n if(index === -1)return\n this.layers.splice(index, 1)\n layer = null\n if(this.ReactInstance)this.ReactInstance.forceUpdate()\n this.inject()\n }else{\n layer.remove()\n }\n }\n }\n }\n}\n\n\nlet LayerModules\nexport class Layer extends React.Component {\n constructor(){\n super(...arguments)\n this.state = {\n animation: new this.modules[0].default.Value(0)\n } \n this.props.getLayer(this)\n this.keydown = this.keydown.bind(this)\n }\n\n keydown(e){\n if (e.which === 27) {\n this.remove()\n }\n }\n\n get modules(){\n return LayerModules || (LayerModules = [\n v2.WebpackModules.find(e => e.default && e.default.Value && e.default.div)\n ])\n }\n\n componentWillUnmount(){\n window.removeEventListener(\"keydown\", this.keydown)\n }\n\n componentDidMount(ev){\n window.addEventListener(\"keydown\", this.keydown)\n }\n\n remove(){\n this.props.remove()\n }\n\n componentWillEnter(ev){\n this.modules[0].default.timing(this.state.animation, {\n toValue: 1,\n duration: 100\n }).start(ev)\n }\n\n componentWillLeave(ev){\n this.modules[0].default.timing(this.state.animation, {\n toValue: 0,\n duration: 100\n }).start(ev)\n }\n\n render(){\n let interpolation = this.state.animation.interpolate({\n inputRange: [0, 1],\n outputRange: [1.07, 1]\n })\n let style = {\n opacity: this.state.animation,\n transform: [{\n scale: interpolation\n }]\n }\n let Div = this.modules[0].default.div\n return
e).join(\" \") || null} style={style}>\n {this.props.children(() => {\n this.remove()\n })}\n
\n }\n}\nLayer.defaultProps = {\n id: null,\n children: null\n}","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"./v2\";\nimport webpackModules from \"./webpackModules\";\nimport Utils from \"./utils\";\nimport DOM from \"./domtools\";\n\nimport V2C_PublicServers from \"../ui/publicservers/publicServers\";\nimport Layers from \"./Layers\";\n\nexport default new class V2_PublicServers {\n\n constructor() {\n this._appendButton = this._appendButton.bind(this);\n window.Lightcord.BetterDiscord.V2_PublicServers = this\n }\n\n render() {\n Layers.createLayer((close) => {\n return BDV2.react.createElement(V2C_PublicServers, {rootId: \"pubslayerroot\", close})\n })\n }\n\n get button() {\n const btn = DOM.createElement(`
`);\n if (!settingsCookie[\"bda-gs-1\"]) btn.style.display = \"none\";\n const label = DOM.createElement(`
public
`);\n label.addEventListener(\"click\", () => {this.render();});\n btn.append(label);\n return btn;\n }\n\n _appendButton() {\n let [\n classNametutorialContainer\n ] = [\n Utils.removeDa(BDModules.get(e => e.downloadProgress && e.tutorialContainer)[0].tutorialContainer)\n ]\n if (DOM.query(\"#bd-pub-li\")) return;\n const guilds = DOM.query(`div.${classNametutorialContainer} > div`);\n DOM.after(guilds, this.button);\n }\n\n addButton() {\n if (this.guildPatch) return;\n const GuildList = webpackModules.find(m => m.default && m.default.displayName == \"NavigableGuilds\");\n const GuildListOld = webpackModules.findByDisplayName(\"Guilds\");\n if (!GuildList && !GuildListOld) Utils.warn(\"PublicServer\", \"Can't find GuildList component\");\n this.guildPatch = Utils.monkeyPatch(GuildList ? GuildList : GuildListOld.prototype, GuildList ? \"default\" : \"render\", {after: this._appendButton});\n this._appendButton();\n }\n\n removeButton() {\n this.guildPatch();\n delete this.guildPatch;\n const button = DOM.query(\"#bd-pub-li\");\n if (button) button.remove();\n }\n};","import DOM from \"./domtools\";\r\n\r\nconst style = `\r\n .container-2Rl01u {\r\n display: none!important;\r\n }\r\n\r\n .chat-3bRxxu {\r\n display: none!important;\r\n }\r\n\r\n .sidebar-2K8pFh {\r\n flex-grow: 1!important;\r\n }\r\n`;\r\n\r\nexport default new class VoiceMode {\r\n start() {\r\n DOM.addStyle(\"VoiceMode\", style);\r\n }\r\n\r\n stop() {\r\n DOM.removeStyle(\"VoiceMode\");\r\n }\r\n};","import WebpackModules from \"./webpackModules\";\n\nconst normalizedPrefix = \"da\";\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\n\nexport default new class ClassNormalizer {\n constructor(){\n window.Lightcord.BetterDiscord.ClassNormalizer = this\n }\n stop() {\n if (!this.hasPatched) return;\n this.unpatchClassModules(WebpackModules.findAll(this.moduleFilter.bind(this)));\n this.revertElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = false;\n }\n\n start() {\n if (this.hasPatched) return;\n this.patchClassModules(WebpackModules.findAll(this.moduleFilter.bind(this)));\n this.normalizeElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = true;\n this.patchDOMMethods();\n }\n\n patchClassModules(modules) {\n for (const module of modules) {\n this.patchClassModule(normalizedPrefix, module);\n }\n }\n\n unpatchClassModules(modules) {\n for (const module of modules) {\n this.unpatchClassModule(normalizedPrefix, module);\n }\n }\n\n shouldIgnore(value) {\n if (!isNaN(value)) return true;\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\n if (value.startsWith(\"layerContainer-\")) return true;\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\n return false;\n }\n\n moduleFilter(module) {\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\n if (module.__esModule) return false;\n if (!Object.keys(module).length) return false;\n for (const baseClassName in module) {\n const value = module[baseClassName];\n if (typeof value !== \"string\") return false;\n if (this.shouldIgnore(value)) continue;\n if (value.split(\"-\").length === 1) return false;\n if (!randClass.test(value.split(\" \")[0])) return false;\n }\n\n return true;\n }\n\n patchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n const classList = value.split(\" \");\n for (const normalClass of classList) {\n const match = normalClass.match(randClass);\n if (!match || !match.length || match.length < 2) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\n const camelCase = match[1].split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\n }\n }\n }\n\n unpatchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n let newString = \"\";\n const classList = value.split(\" \");\n for (const normalClass of classList) {\n if (normalClass.startsWith(`${componentName}-`)) continue;\n newString += ` ${normalClass}`;\n }\n classNames[baseClassName] = newString.trim();\n }\n }\n\n normalizeElement(element) {\n if (!(element instanceof Element)) return;\n const classes = element.classList;\n for (let c = 0, clen = classes.length; c < clen; c++) {\n if (!randClass.test(classes[c])) continue;\n const match = classes[c].match(randClass)[1];\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n element.classList.add(`${normalizedPrefix}-${newClass}`);\n }\n for (const child of element.children) this.normalizeElement(child);\n }\n\n revertElement(element) {\n if (!(element instanceof Element)) return;\n if (element.children && element.children.length) this.revertElement(element.children[0]);\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\n const classes = element.classList;\n const toRemove = [];\n for (let c = 0; c < classes.length; c++) {\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\n }\n element.classList.remove(...toRemove);\n }\n\n patchDOMMethods() {\n const contains = DOMTokenList.prototype.contains;\n DOMTokenList.prototype.contains = function(token) {\n // const tokens = token.split(\" \");\n return Reflect.apply(contains, this, [token.split(\" \")[0]]);\n // return tokens.every(t => contains.call(this, t));\n };\n\n const add = DOMTokenList.prototype.add;\n DOMTokenList.prototype.add = function(...tokens) {\n for (let t = 0; t < tokens.length; t++) {\n tokens[t] = tokens[t].split(\" \")[0];\n }\n return Reflect.apply(add, this, tokens);\n };\n\n const remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.remove = function(...tokens) {\n for (let t = 0; t < tokens.length; t++) {\n tokens[t] = tokens[t].split(\" \")[0];\n }\n return Reflect.apply(remove, this, tokens);\n };\n }\n\n};","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"./v2\";\nimport DOM from \"./domtools\";\nimport Utils from \"./utils\";\n\nexport default new class DevMode {\n constructor() {\n this.debugListener = this.debugListener.bind(this);\n this.copySelectorListener = this.copySelectorListener.bind(this);\n }\n\n start() {\n this.startDebugListener();\n if (settingsCookie[\"fork-dm-1\"]) this.startCopySelector();\n }\n \n stop() {\n this.stopDebugListener();\n this.stopCopySelector();\n }\n\n startDebugListener() {\n this.stopDebugListener();\n document.addEventListener(\"keydown\", this.debugListener);\n }\n\n stopDebugListener() {\n document.removeEventListener(\"keydown\", this.debugListener);\n }\n\n startCopySelector() {\n this.stopCopySelector();\n document.addEventListener(\"contextmenu\", this.copySelectorListener);\n }\n\n stopCopySelector() {\n document.removeEventListener(\"contextmenu\", this.copySelectorListener);\n }\n\n debugListener(e) {\n if (e.which === 119 || e.which == 118) {//F8\n console.log(\"%c[%cDevMode%c] %cBreak/Resume\", \"color: red;\", \"color: #303030; font-weight:700;\", \"color:red;\", \"\");\n debugger; // eslint-disable-line no-debugger\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n }\n\n copySelectorListener(e) {\n try{\n e.stopPropagation();\n const selector = this.getSelector(e.target);\n \n let [\n classLayer, \n classItems\n ] = [\n BDModules.get((e) => e.layer && typeof e.layer === \"string\" && e.disabledPointerEvents)[0],\n BDModules.get((e) => e.menu)[0]\n ]\n \n function attach() {\n if(!classItems || !classLayer.layer)return console.log(classItems, classLayer.layer)\n\n let cm = DOM.query(\".\"+Utils.removeDa(classItems.menu));\n if (!cm) {\n const container = DOM.query(\"#app-mount > .\"+Utils.removeDa(classLayer.layerContainer));\n const cmWrap = DOM.createElement(`
`);\n cm = DOM.createElement(`
`);\n cmWrap.append(cm);\n container.append(cmWrap);\n cmWrap.style.top = e.clientY + \"px\";\n cmWrap.style.left = e.clientX + \"px\";\n cmWrap.setAttribute(\"role\", \"menu\")\n cmWrap.setAttribute(\"tabindex\", \"-1\")\n cmWrap.id = \"bd-copy-selector-context\"\n cmWrap.setAttribute(\"aria-label\", \"Copy Selector Actions\")\n\n const scrollerClasses = BDModules.get((e) => e.scrollerWrap)[0]\n const scrollerWrap = DOM.createElement(`
`)\n const scroller = DOM.createElement(`
e.scroller)[0].scroller} ${classItems.scroller}\">
`)\n scrollerWrap.append(scroller)\n cm.append(scrollerWrap)\n\n const removeCM = function(e) {\n if (e.keyCode && e.keyCode !== 27) return;\n cmWrap.remove();\n document.removeEventListener(\"click\", removeCM);\n document.removeEventListener(\"contextmenu\", removeCM);\n document.removeEventListener(\"keyup\", removeCM);\n };\n document.addEventListener(\"click\", removeCM);\n document.addEventListener(\"contextmenu\", removeCM);\n document.addEventListener(\"keyup\", removeCM);\n }\n const cmWrap = cm.parentElement\n \n const scroller = cm.childNodes[0].childNodes[0]\n const cmg = DOM.createElement(`
`);\n /**\n * @type {HTMLElement}\n */\n const cmi = DOM.createElement(`
`);\n cmi.append(DOM.createElement(`
Copy Selector
`));\n cmi.addEventListener(\"click\", () => {\n BDV2.NativeModule.copy(selector);\n cmWrap.style.display = \"none\"\n });\n cmi.addEventListener(\"mouseover\", (e) => {\n let elements = DOM.queryAll(\"div[role=menuitem].\"+Utils.removeDa(classItems.focused))\n elements && elements.forEach(elem => elem.classList.remove(classItems.focused))\n cmi.classList.add(classItems.focused)\n })\n cmi.addEventListener(\"mouseout\", (e) => {\n cmi.classList.remove(classItems.focused)\n })\n cmg.append(cmi);\n if(scroller.childNodes.length){ // apend a separator\n const separator = DOM.createElement(`
`)\n scroller.append(separator)\n }\n scroller.append(cmg);\n if(cmWrap.clientHeight < cmWrap.scrollHeight){\n console.log(\"overflowing \"+cmWrap.style.top)\n cmWrap.style.top = (cmWrap.style.top - cmg.clientHeight) + \"px\";\n console.log(\"overflowing\"+cmWrap.style.top)\n }\n }\n \n setTimeout(attach, 1);\n }catch(e){\n console.error(e)\n }\n }\n\n getSelector(element) {\n if (element.id) return `#${element.id}`;\n /**\n * \n * @param {HTMLElement} el \n */\n function fullPath(el){\n var names = [];\n while (el.parentNode){\n if (el.id){\n names.unshift('#'+el.id);\n break;\n }else{\n if (el==el.ownerDocument.documentElement) names.unshift(el.tagName.toLowerCase()+Array.from(el.classList.entries()).map(e => \".\"+e).join(\"\"));\n else{\n for (var c=1,e=el;e.previousElementSibling;e=e.previousElementSibling,c++);\n names.unshift(el.tagName.toLowerCase()+((typeof el.className === \"string\" && el.className) || \"\").split(\" \").filter(e => !!e).map(e => \".\"+e).join(\"\")+\":nth-child(\"+c+\")\");\n }\n el=el.parentNode;\n }\n }\n return names.join(\" > \");\n }\n return fullPath(element)\n }\n};","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Switch extends React.Component {\n constructor(props) {\n super(props);\n this.state = {checked: this.props.checked};\n this.onChange = this.onChange.bind(this);\n this.switch = \n }\n\n onChange(value) {\n if (this.props.disabled) return;\n this.props.onChange(value);\n this.setState({checked: value});\n }\n\n render() {\n return this.switch\n }\n}","import BDV2 from \"../modules/v2\";\nimport Switch from \"./components/switch\";\n\nlet classnames = []\nfunction getClassName(name){\n let className = classnames.find(e => e.startsWith(name+\"-\"))\n if(className)return className\n className = BDModules.get(e => e[name])[0][name]\n classnames.push(className)\n return className\n}\n\nexport default class SwitchItem extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange() {\n this.props.checked = !this.props.checked;\n this.props.onChange(this.props.id, this.props.checked);\n }\n\n render() {\n let {text, info} = this.props.data;\n if(!classnames.find(e => e.startsWith(\"beta-\"))){\n classnames.push(BDModules.get(e => e.beta && (!e.container && !e.userSettingsVoice))[0].beta)\n }\n if(this.props.data.experimental){\n info = [\n info,\n React.createElement(\"sup\", {className: getClassName(\"beta\")}, \"(EXPERIMENTAL)\")\n ]\n }\n return BDV2.react.createElement(\"div\", {className: \"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item\"},\n BDV2.react.createElement(\"div\", {className: \"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap\"},\n BDV2.react.createElement(\"h3\", {key: \"title\", className: \"ui-form-title h3 margin-reset margin-reset ui-flex-child\"}, text),\n BDV2.react.createElement(Switch, {key: \"switch\", onChange: this.onChange, checked: this.props.checked})\n ),\n BDV2.react.createElement(\"div\", {className: \"ui-form-text style-description margin-top-4\", style: {flex: \"1 1 auto\"}}, info)\n );\n }\n}","let marginModule = BDModules.get(e => e.marginTop60)[0]\r\n\r\nexport default class MarginTop extends React.Component {\r\n render(){\r\n if(!marginModule)marginModule = BDModules.get(e => e.marginTop60)[0]\r\n return
\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"../modules/v2\";\n\nimport SettingsTitle from \"./settingsTitle\";\nimport Switch from \"./switch\";\nimport MarginTop from \"./margintop\";\n\nlet formModule\nlet switchItem\nlet betaClassNames\nexport default class V2C_SettingsGroup extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n\n this.state = {\n error: false\n }\n }\n\n renderOldSettings() {\n const {title, settings, button} = this.props;\n const buttonComponent = button ? BDV2.react.createElement(\"button\", {key: \"title-button\", className: \"bd-pfbtn\", onClick: button.onClick}, button.title) : null;\n return [BDV2.react.createElement(SettingsTitle, {text: title}),\n buttonComponent,\n settings.map(setting => {\n return BDV2.react.createElement(Switch, {id: setting.id, key: setting.id, data: setting, checked: settingsCookie[setting.id], onChange: (id, checked) => {\n this.props.onChange(id, checked);\n }});\n })];\n }\n\n componentDidCatch(err, errInfo){\n console.log(err, errInfo)\n this.setState({\n error: true\n })\n }\n\n render(){\n if(this.state.error){\n try{\n return this.renderOldSettings()\n }catch(e){\n console.error(e)\n return null\n }\n }else{\n try{\n if(!formModule)formModule = BDV2.WebpackModules.find(e => e.FormSection)\n if(!switchItem)switchItem = BDV2.WebpackModules.find(e => e.default && e.default.displayName === \"SwitchItem\")\n if(!betaClassNames)betaClassNames = BDV2.WebpackModules.find(e => e.beta && (!e.container && !e.userSettingsVoice))\n \n let children = []\n if(this.props.description){\n children.push(\n {this.props.description}\n , )\n }\n children.push(...this.props.settings.map(setting => {\n let info = [\n setting.text\n ]\n if(setting.experimental){\n info.push((EXPERIMENTAL))\n }\n return {\n this.props.onChange(setting.id, ev.target.checked);\n this.forceUpdate()\n }} key={setting.id} value={settingsCookie[setting.id]} className={__SECRET_EMOTION__.css({\n marginBottom: \"20px\"\n })} disabled={false} hideBorder={false}\n size={switchItem.default.Sizes.DEFAULT} theme={switchItem.default.Themes.DEFAULT} note={setting.info}>\n {info}\n \n }))\n return \n {children}\n \n }catch(e){\n console.error(e)\n setImmediate(()=>{\n this.setState({\n error: true\n })\n })\n return null\n }\n }\n }\n}","import BDV2 from \"../modules/v2\";\r\n\r\nimport SettingsGroup from \"./settingsGroup\";\r\nimport MarginTop from \"./margintop\";\r\n\r\nexport default class V2C_SectionedSettingsPanel extends BDV2.reactComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return this.props.sections.map((section, i) => {\r\n return [\r\n i !== 0 ? BDV2.react.createElement(MarginTop, {}) : null,\r\n BDV2.react.createElement(SettingsGroup, Object.assign({}, section, {onChange: this.props.onChange}))\r\n ]\r\n })\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_Checkbox extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.onClick = this.onClick.bind(this);\r\n this.setInitialState();\r\n }\r\n\r\n setInitialState() {\r\n this.state = {\r\n checked: this.props.checked || false\r\n };\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"li\",\r\n null,\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"checkbox \"+BDModules.get(e => e.checkboxElement)[0].checkbox, onClick: this.onClick},\r\n BDV2.react.createElement(\r\n \"div\",\r\n {className: \"checkbox-inner \"+BDModules.get(e => e.checkboxInner)[0].checkboxInner},\r\n BDV2.react.createElement(\"input\", {className: BDModules.get(e => e.checkboxElement)[0].checkboxElement, checked: this.state.checked, onChange: () => {}, type: \"checkbox\"}),\r\n BDV2.react.createElement(\"span\", null)\r\n ),\r\n BDV2.react.createElement(\r\n \"span\",\r\n null,\r\n this.props.text\r\n )\r\n )\r\n );\r\n }\r\n\r\n onClick() {\r\n this.props.onChange(this.props.id, !this.state.checked);\r\n this.setState({\r\n checked: !this.state.checked\r\n });\r\n }\r\n}","import {settingsCookie} from \"../0globals\";\nimport Settings from \"../modules/settingsPanel\";\nimport BDV2 from \"../modules/v2\";\nimport DataStore from \"../modules/dataStore\";\nimport DOM from \"../modules/domtools\";\nimport Utils from \"../modules/utils\"\n\nimport Checkbox from \"./checkbox\";\n\nexport default class V2C_CssEditorDetached extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n const self = this;\n self.onClick = self.onClick.bind(self);\n self.updateCss = self.updateCss.bind(self);\n self.saveCss = self.saveCss.bind(self);\n self.onChange = self.onChange.bind(self);\n }\n\n componentDidMount() {\n DOM.addClass(DOM.query(\"#app-mount\"), \"bd-detached-editor\");\n BDV2.editorDetached = true;\n // this.updateLineCount();\n this.editor = ace.edit(\"bd-customcss-editor-detached\");\n this.editor.setTheme(\"ace/theme/discord\");\n this.editor.session.setMode(\"ace/mode/css\");\n this.editor.setShowPrintMargin(false);\n this.editor.setFontSize(14);\n this.editor.on(\"change\", () => {\n if (!settingsCookie[\"bda-css-0\"]) return;\n this.saveCss();\n this.updateCss();\n });\n\n }\n\n componentWillUnmount() {\n DOM.removeClass(DOM.query(\"#app-mount\"), \"bd-detached-editor\");\n BDV2.editorDetached = false;\n this.editor.destroy();\n }\n\n updateLineCount() {\n const lineCount = this.refs.editor.value.split(\"\\n\").length;\n if (lineCount == this.props.lines) return;\n this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(\".\\n\") + \".\";\n this.props.lines = lineCount;\n }\n\n get options() {\n return {\n lineNumbers: true,\n mode: \"css\",\n indentUnit: 4,\n theme: \"material\",\n scrollbarStyle: \"simple\"\n };\n }\n\n get css() {\n const _ccss = DataStore.getBDData(\"bdcustomcss\");\n let ccss = \"\";\n if (_ccss && _ccss !== \"\") {\n ccss = Buffer.from(_ccss, \"base64\").toString(\"utf8\");\n }\n return ccss;\n }\n\n get root() {\n const _root = DOM.query(\"#bd-customcss-detach-container\");\n if (!_root) {\n if (!this.injectRoot()) return null;\n return this.detachedRoot;\n }\n return _root;\n }\n\n injectRoot() {\n const app = DOM.query(\".app, .\"+Utils.removeDa(BDModules.get(e => e.app && e.layers)[0].app));\n if (!app) return false;\n DOM.insertAfter(DOM.createElement(`
`), app);\n return true;\n }\n\n render() {\n const self = this;\n return BDV2.react.createElement(\n \"div\",\n {className: \"bd-detached-css-editor\", id: \"bd-customcss-detach-editor\"},\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-innerpane\"},\n BDV2.react.createElement(\"div\", {className: \"editor-wrapper\"},\n BDV2.react.createElement(\"div\", {id: \"bd-customcss-editor-detached\", className: \"editor\", ref: \"editor\"}, self.css)\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-attach-controls\"},\n BDV2.react.createElement(\n \"ul\",\n {className: \"checkbox-group\"},\n BDV2.react.createElement(Checkbox, {id: \"live-update\", text: \"Live Update\", onChange: self.onChange, checked: settingsCookie[\"bda-css-0\"]})\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-detach-controls-button\"},\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"3px 0 0 3px\", borderRight: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"update\");\n }},\n \"Update\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0\", borderLeft: \"1px solid #2d2d2d\", borderRight: \"1px solid #2d2d2d\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"save\");\n }},\n \"Save\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0 3px 3px 0\", borderLeft: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"attach\");\n }},\n \"Attach\"\n ),\n BDV2.react.createElement(\n \"span\",\n {style: {fontSize: \"10px\", marginLeft: \"5px\"}},\n \"Unsaved changes are lost on attach\"\n )\n )\n )\n )\n );\n }\n\n onChange(id, checked) {\n switch (id) {\n case \"live-update\":\n settingsCookie[\"bda-css-0\"] = checked;\n Settings.saveSettings();\n break;\n }\n }\n\n onClick(id) {\n const self = this;\n switch (id) {\n case \"attach\":\n if (DOM.query(\"#editor-detached\")) self.props.attach();\n BDV2.reactDom.unmountComponentAtNode(self.root);\n self.root.remove();\n break;\n case \"update\":\n self.updateCss();\n break;\n case \"save\":\n self.saveCss();\n break;\n }\n }\n\n updateCss() {\n DOM.removeStyle(\"customcss\");\n DOM.addStyle(\"customcss\", this.editor.session.getValue());\n }\n\n saveCss() {\n DataStore.setBDData(\"bdcustomcss\", Buffer.from(this.editor.session.getValue(), \"utf-8\").toString(\"base64\"));\n }\n}","import {settingsCookie} from \"../0globals\";\nimport Settings from \"../modules/settingsPanel\";\nimport BDV2 from \"../modules/v2\";\nimport DataStore from \"../modules/dataStore\";\nimport DOM from \"../modules/domtools\";\nimport Utils from \"../modules/utils\"\n\nimport SettingsTitle from \"./settingsTitle\";\nimport Checkbox from \"./checkbox\";\nimport V2C_CssEditorDetached from \"./cssEditorDetached\";\n\nexport default class V2C_CssEditor extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n const self = this;\n self.props.lines = 0;\n self.setInitialState();\n self.attach = self.attach.bind(self);\n self.detachedEditor = BDV2.react.createElement(V2C_CssEditorDetached, {attach: self.attach});\n self.onClick = self.onClick.bind(self);\n self.updateCss = self.updateCss.bind(self);\n self.saveCss = self.saveCss.bind(self);\n self.detach = self.detach.bind(self);\n }\n\n setInitialState() {\n this.state = {\n detached: this.props.detached || BDV2.editorDetached\n };\n }\n\n componentDidMount() {\n // this.updateLineCount();\n this.editor = ace.edit(\"bd-customcss-editor\");\n this.editor.setTheme(\"ace/theme/discord\");\n this.editor.session.setMode(\"ace/mode/css\");\n this.editor.setShowPrintMargin(false);\n this.editor.setFontSize(14);\n this.editor.on(\"change\", () => {\n if (!settingsCookie[\"bda-css-0\"]) return;\n this.saveCss();\n this.updateCss();\n });\n }\n\n componentWillUnmount() {\n this.editor.destroy();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const self = this;\n if (prevState.detached && !self.state.detached) {\n BDV2.reactDom.unmountComponentAtNode(self.detachedRoot);\n }\n }\n\n codeMirror() {\n }\n\n get options() {\n return {\n lineNumbers: true,\n mode: \"css\",\n indentUnit: 4,\n theme: \"material\",\n scrollbarStyle: \"simple\"\n };\n }\n\n get css() {\n const _ccss = DataStore.getBDData(\"bdcustomcss\");\n let ccss = \"\";\n if (_ccss && _ccss !== \"\") {\n ccss = Buffer.from(_ccss, \"base64\").toString(\"utf8\");\n }\n return ccss;\n }\n\n updateLineCount() {\n const lineCount = this.refs.editor.value.split(\"\\n\").length;\n if (lineCount == this.props.lines) return;\n this.refs.lines.textContent = Array.from(new Array(lineCount), (_, i) => i + 1).join(\".\\n\") + \".\";\n this.props.lines = lineCount;\n }\n\n render() {\n const self = this;\n\n const {detached} = self.state;\n return [\n detached && BDV2.react.createElement(\n \"div\",\n {id: \"editor-detached\"},\n BDV2.react.createElement(SettingsTitle, {text: \"Custom CSS Editor\"}),\n BDV2.react.createElement(\n \"h3\",\n null,\n \"Editor Detached\"\n ),\n BDV2.react.createElement(\n \"button\",\n {className: \"btn btn-primary\", onClick: () => {\n self.attach();\n }},\n \"Attach\"\n )\n ),\n !detached && BDV2.react.createElement(\n \"div\",\n null,\n BDV2.react.createElement(SettingsTitle, {text: \"Custom CSS Editor\"}),\n BDV2.react.createElement(\"div\", {className: \"editor-wrapper\"},\n BDV2.react.createElement(\"div\", {id: \"bd-customcss-editor\", className: \"editor\", ref: \"editor\"}, self.css)\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-attach-controls\"},\n BDV2.react.createElement(\n \"ul\",\n {className: \"checkbox-group\"},\n BDV2.react.createElement(Checkbox, {id: \"live-update\", text: \"Live Update\", onChange: this.onChange, checked: settingsCookie[\"bda-css-0\"]})\n ),\n BDV2.react.createElement(\n \"div\",\n {id: \"bd-customcss-detach-controls-button\"},\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"3px 0 0 3px\", borderRight: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"update\");\n }},\n \"Update\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0\", borderLeft: \"1px solid #2d2d2d\", borderRight: \"1px solid #2d2d2d\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"save\");\n }},\n \"Save\"\n ),\n BDV2.react.createElement(\n \"button\",\n {style: {borderRadius: \"0 3px 3px 0\", borderLeft: \"1px solid #3f4146\"}, className: \"btn btn-primary\", onClick: () => {\n self.onClick(\"detach\");\n }},\n \"Detach\"\n ),\n BDV2.react.createElement(\n \"span\",\n {style: {fontSize: \"10px\", marginLeft: \"5px\"}},\n \"Unsaved changes are lost on detach\"\n ),\n BDV2.react.createElement(\"div\", {className: \"help-text\"},\n \"Press \",\n BDV2.react.createElement(\"code\", {className: \"inline\"}, \"ctrl\"),\n \"+\",\n BDV2.react.createElement(\"span\", {className: \"inline\"}, \",\"),\n \" with the editor focused to access the editor's settings.\"\n )\n )\n )\n )\n ]\n }\n\n onClick(arg) {\n const self = this;\n switch (arg) {\n case \"update\":\n self.updateCss();\n break;\n case \"save\":\n self.saveCss();\n break;\n case \"detach\":\n self.detach();\n break;\n }\n }\n\n onChange(id, checked) {\n switch (id) {\n case \"live-update\":\n settingsCookie[\"bda-css-0\"] = checked;\n Settings.saveSettings();\n break;\n }\n }\n\n updateCss() {\n DOM.removeStyle(\"customcss\");\n DOM.addStyle(\"customcss\", this.editor.session.getValue());\n }\n\n saveCss() {\n DataStore.setBDData(\"bdcustomcss\", Buffer.from(this.editor.session.getValue(), \"utf-8\").toString(\"base64\"));\n }\n\n detach() {\n const self = this;\n self.setState({\n detached: true\n });\n const droot = self.detachedRoot;\n if (!droot) {\n console.log(\"FAILED TO INJECT ROOT: .app\");\n return;\n }\n BDV2.reactDom.render(self.detachedEditor, droot);\n }\n\n get detachedRoot() {\n const _root = DOM.query(\"#bd-customcss-detach-container\");\n if (!_root) {\n if (!this.injectDetachedRoot()) return null;\n return this.detachedRoot;\n }\n return _root;\n }\n\n injectDetachedRoot() {\n const app = DOM.query(\".app, .\"+Utils.removeDa(BDModules.get(e => e.app && e.layers)[0].app));\n if (!app) return false;\n DOM.insertAfter(DOM.createElement(`
`), app);\n return true;\n }\n\n attach() {\n const self = this;\n self.setState({\n detached: false\n });\n }\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class BDErrorBoundary extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {hasError: false};\r\n }\r\n\r\n componentDidCatch() {\r\n this.setState({hasError: true});\r\n }\r\n\r\n render() {\r\n if (this.state.hasError) return BDV2.react.createElement(\"div\", {className: \"react-error\"}, \"Component Error\"); \r\n return this.props.children; \r\n }\r\n}\r\n\r\nconst originalRender = BDErrorBoundary.prototype.render;\r\nObject.defineProperty(BDErrorBoundary.prototype, \"render\", {\r\n enumerable: false,\r\n configurable: false,\r\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\r\n get: () => originalRender\r\n}); ","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_ContentColumn extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n static get displayName() {return \"ContentColumn\";}\r\n\r\n render() {\r\n //let contentModule = BDModules.get(e => e.contentColumn)[0]\r\n let title = this.props.title ? BDV2.react.createElement(\"h2\", {className: \"ui-form-title h2 margin-reset margin-bottom-20\"}, this.props.title) : null\r\n return [\r\n title,\r\n this.props.children\r\n ]\r\n return BDV2.react.createElement(\r\n \"div\",\r\n {className: contentModule.contentColumn + \" \"+contentModule.contentColumnDefault+\" content-column default\", style: {padding: \"60px 40px 0px\"}},\r\n title,\r\n this.props.children\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_ReloadIcon extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\"svg\", {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n viewBox: \"0 0 24 24\",\r\n fill: \"#dcddde\",\r\n className: \"bd-reload \" + this.props.className,\r\n onClick: this.props.onClick,\r\n style: {width: this.props.size || \"24px\", height: this.props.size || \"24px\"}\r\n },\r\n BDV2.react.createElement(\"path\", {d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"}),\r\n BDV2.react.createElement(\"path\", {fill: \"none\", d: \"M0 0h24v24H0z\"})\r\n );\r\n }\r\n}","import BDV2 from \"../modules/v2\";\r\n\r\nexport default class V2C_XSvg extends BDV2.reactComponent {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return BDV2.react.createElement(\r\n \"svg\",\r\n {xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 12 12\", style: {width: \"18px\", height: \"18px\"}},\r\n BDV2.react.createElement(\r\n \"g\",\r\n {className: \"background\", fill: \"none\", fillRule: \"evenodd\"},\r\n BDV2.react.createElement(\"path\", {d: \"M0 0h12v12H0\"}),\r\n BDV2.react.createElement(\"path\", {className: \"fill\", fill: \"#dcddde\", d: \"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6\"})\r\n )\r\n );\r\n }\r\n}","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Edit extends React.Component {\n render() {\n const size = this.props.size || \"24px\";\n return \n \n \n ;\n }\n}","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Delete extends React.Component {\n render() {\n const size = this.props.size || \"24px\";\n return \n \n \n ;\n }\n}","import {settingsCookie} from \"../0globals\";\nimport BDV2 from \"../modules/v2\";\nimport Utils from \"../modules/utils\";\nimport DOM from \"../modules/domtools\";\n\nimport XSvg from \"./xSvg\";\nimport ReloadIcon from \"./reloadIcon\";\nimport EditIcon from \"./icons/edit\";\nimport DeleteIcon from \"./icons/delete\";\nimport Switch from \"./components/switch\";\nimport TooltipWrap from \"./tooltipWrap\";\nimport { processFile } from \"../modules/pluginCertifier\";\nimport contentManager from \"../modules/contentManager\";\nimport { resolve } from \"path\";\n\nconst React = BDV2.React;\nconst anchorClasses = BDV2.anchorClasses;\n\nexport default class V2C_PluginCard extends BDV2.reactComponent {\n\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.setInitialState();\n this.hasSettings = this.props.addon.plugin && typeof(this.props.addon.plugin.getSettingsPanel) === \"function\";\n this.settingsPanel = \"\";\n\n this.edit = this.edit.bind(this);\n this.delete = this.delete.bind(this);\n this.reload = this.reload.bind(this);\n }\n\n setInitialState() {\n this.state = {\n checked: this.props.enabled,\n settings: false,\n reloads: 0,\n trusted: false\n };\n }\n\n showSettings() {\n if (!this.hasSettings) return;\n this.setState({settings: true});\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({settingsOpen: false});\n }\n\n componentDidUpdate() {\n if (!this.state.settings) return;\n if (typeof this.settingsPanel === \"object\") {\n this.refs.settingspanel.appendChild(this.settingsPanel);\n }\n\n if (!settingsCookie[\"fork-ps-3\"]) return;\n setImmediate(() => {\n const isHidden = (container, element) => {\n if(!container){\n console.error(new Error(`Container is undefined.`))\n return false\n }\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return (eTop < cTop || eBottom > cBottom);\n };\n\n const thisNode = this.refs.cardNode;\n const container = thisNode.closest(\"div[class*=\\\"contentRegionScroller-\\\"]\")\n if (!isHidden(container, thisNode)) return;\n const thisNodeOffset = DOM.offset(thisNode);\n const containerOffset = DOM.offset(container);\n const original = container.scrollTop;\n const endPoint = thisNodeOffset.top - containerOffset.top + container.scrollTop - 30;\n DOM.animate({\n duration: 300,\n update: function(progress) {\n if (endPoint > original) container.scrollTop = original + (progress * (endPoint - original));\n else container.scrollTop = original - (progress * (original - endPoint));\n }\n });\n });\n }\n\n\n getString(value) {\n if (!value) return \"???\";\n return typeof value == \"string\" ? value : value.toString();\n }\n\n get settingsComponent() {\n try { this.settingsPanel = this.props.addon.plugin.getSettingsPanel(); }\n catch (err) { Utils.err(\"Plugins\", \"Unable to get settings panel for \" + this.name + \".\", err); }\n\n return BDV2.react.createElement(\"div\", {className: \"bd-card bd-addon-card settings-open ui-switch-item\", ref: \"cardNode\"},\n BDV2.react.createElement(\"div\", {style: {\"float\": \"right\", \"cursor\": \"pointer\"}, onClick: () => {\n this.refs.settingspanel.innerHTML = \"\";\n this.setState({settings: false});\n }},\n BDV2.react.createElement(XSvg, null)\n ),\n typeof this.settingsPanel === \"object\" && BDV2.react.createElement(\"div\", {id: `plugin-settings-${this.name}`, className: \"plugin-settings\", ref: \"settingspanel\"}),\n typeof this.settingsPanel !== \"object\" && BDV2.react.createElement(\"div\", {id: `plugin-settings-${this.name}`, className: \"plugin-settings\", ref: \"settingspanel\", dangerouslySetInnerHTML: {__html: this.settingsPanel}})\n );\n }\n\n buildTitle(name, version, author) {\n const title = \"{{name}} v{{version}} by {{author}}\".split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = React.createElement(\"span\", {className: \"name bda-name\"}, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = React.createElement(\"span\", {className: \"version bda-version\"}, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) {\n const props = {className: \"author bda-author\"};\n if (author.link || author.id) {\n props.className += ` ${anchorClasses.anchor} ${anchorClasses.anchorUnderlineOnHover}`;\n props.target = \"_blank\";\n\n if (author.link) props.href = author.link;\n if (author.id) props.onClick = () => {BDV2.LayerStack.popLayer(); BDV2.openDM(author.id);};\n }\n title[authorIndex] = React.createElement(author.link || author.id ? \"a\" : \"span\", props, author.name);\n }\n return title.flat();\n }\n\n makeLink(title, url) {\n const props = {className: \"bda-link bda-link-website\", target: \"_blank\"};\n if (typeof(url) == \"string\") props.href = url;\n if (typeof(url) == \"function\") props.onClick = (event) => {event.preventDefault(); event.stopPropagation(); url();};\n return BDV2.react.createElement(\"a\", props, title);\n }\n\n makeButton(title, children, action) {\n return \n
{children}
\n
;\n }\n\n componentWillUnmount(){\n this.unmounted = true\n }\n\n get links() {\n const links = [];\n const addon = this.props.addon;\n if (addon.website) links.push(this.makeLink(\"Website\", addon.website));\n if (addon.source) links.push(this.makeLink(\"Source\", addon.source));\n if (addon.invite) {\n links.push(this.makeLink(\"Support Server\", () => {\n const tester = /\\.gg\\/(.*)$/;\n let code = addon.invite;\n if (tester.test(code)) code = code.match(tester)[1];\n BDV2.LayerStack.popLayer();\n BDV2.InviteActions.acceptInviteAndTransitionToInviteChannel(code);\n }));\n }\n if (addon.donate) links.push(this.makeLink(\"Donate\", addon.donate));\n if (addon.patreon) links.push(this.makeLink(\"Patreon\", addon.patreon));\n return links;\n }\n\n get footer() {\n const links = this.links;\n return (links.length || this.hasSettings) && BDV2.react.createElement(\"div\", {className: \"bd-card-footer bda-footer\"},\n BDV2.react.createElement(\"span\", {className: \"bd-addon-links bda-links\"},\n ...(links.map((element, index) => index < links.length - 1 ? [element, \" | \"] : element).flat())\n ),\n this.hasSettings && BDV2.react.createElement(\"button\", {onClick: this.showSettings, className: \"bd-button bda-settings-button\", disabled: !this.state.checked}, \"Settings\")\n );\n }\n\n onChange() {\n this.props.toggle && this.props.toggle(this.name);\n this.setState({checked: !this.state.checked});\n }\n\n edit() {this.props.edit(this.name);}\n delete() {this.props.remove(this.name);}\n reload() {this.props.reload(this.name);}\n\n get name() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getName() : this.props.addon.name);}\n get author() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getAuthor() : this.props.addon.author);}\n get description() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getDescription() : this.props.addon.description);}\n get version() {return this.getString(this.props.addon.plugin ? this.props.addon.plugin.getVersion() : this.props.addon.version);}\n\n render() {\n if (this.state.settings) return this.settingsComponent;\n const {authorId, authorLink} = this.props.addon;\n\n const style = {}\n if(settingsCookie[\"fork-ps-6\"]){\n if(!this.isScanning){\n this.isScanning = true\n processFile(resolve(this.props.addon.filename.endsWith(\".plugin.js\") ? contentManager.pluginsFolder : contentManager.themesFolder, this.props.addon.filename), (result) => {\n if(this.unmounted)return\n \n this.setState({\n isTrusted: result.suspect ? \"suspect\" : true\n })\n }, () => {})\n }else{\n if(this.state.isTrusted === true){\n style.borderColor = \"#4087ed\"\n }\n if(this.state.isTrusted === \"suspect\"){\n style.borderColor = \"rgb(240, 71, 71)\"\n }\n }\n }\n \n return BDV2.react.createElement(\"div\", {className: \"bd-card bd-addon-card settings-closed ui-switch-item\", style},\n BDV2.react.createElement(\"div\", {className: \"bd-addon-header bda-header\"},\n BDV2.react.createElement(\"div\", {className: \"bd-card-title bda-header-title\"}, this.buildTitle(this.name, this.version, {name: this.author, id: authorId, link: authorLink})),\n BDV2.react.createElement(\"div\", {className: \"bd-addon-controls bda-controls\"},\n this.props.edit && this.makeButton(\"Edit\", , this.edit),\n this.props.remove && this.makeButton(\"Delete\", , this.delete),\n this.props.reload && this.makeButton(\"Reload\", , this.reload),\n React.createElement(Switch, {onChange: this.onChange, checked: this.state.checked})\n )\n ),\n BDV2.react.createElement(\"div\", {className: \"bd-scroller-wrap bda-description-wrap scroller-wrap fade\"},\n BDV2.react.createElement(\"div\", {className: \"bd-scroller bd-addon-description bda-description scroller\"}, this.description)\n ),\n this.footer\n );\n }\n}\n\nconst originalRender = V2C_PluginCard.prototype.render;\nObject.defineProperty(V2C_PluginCard.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\n get: () => originalRender\n});","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class DownArrow extends React.Component {\n render() {\n const size = this.props.size || \"16px\";\n return \n \n ;\n }\n}","import BDV2 from \"../../modules/v2\";\r\nimport Arrow from \"../icons/downarrow\";\r\n\r\nconst React = BDV2.React;\r\n\r\n\r\nexport default class Select extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {open: false, value: this.props.value || this.props.options[0].value};\r\n this.dropdown = React.createRef();\r\n this.onChange = this.onChange.bind(this);\r\n this.showMenu = this.showMenu.bind(this);\r\n this.hideMenu = this.hideMenu.bind(this);\r\n }\r\n\r\n showMenu(event) {\r\n event.preventDefault();\r\n this.setState({open: true}, () => {\r\n document.addEventListener(\"click\", this.hideMenu);\r\n });\r\n }\r\n\r\n hideMenu() {\r\n this.setState({open: false}, () => {\r\n document.removeEventListener(\"click\", this.hideMenu);\r\n });\r\n }\r\n\r\n onChange(value) {\r\n this.setState({value});\r\n if (this.props.onChange) this.props.onChange(value);\r\n }\r\n\r\n get selected() {return this.props.options.find(o => o.value == this.state.value);}\r\n\r\n get options() {\r\n const selected = this.selected;\r\n return
\r\n {this.props.options.map(opt => \r\n
{opt.label}
\r\n )}\r\n
;\r\n }\r\n\r\n render() {\r\n const style = this.props.style == \"transparent\" ? \" bd-select-transparent\" : \"\";\r\n const isOpen = this.state.open ? \" menu-open\" : \"\";\r\n return
\r\n
{this.selected.label}
\r\n \r\n {this.state.open && this.options}\r\n
;\r\n }\r\n}\r\n\r\n// return
\r\n// \r\n//
\r\n//
\r\n//
{this.selected.label}
\r\n// \r\n//
\r\n//
\r\n// {this.state.open && this.options}\r\n//
;","import BDV2 from \"../../modules/v2\";\n\nconst React = BDV2.React;\n\nexport default class Search extends React.Component {\n render() {\n const size = this.props.size || \"16px\";\n return \n \n \n ;\n }\n}","import BDV2 from \"../../modules/v2\";\nimport SearchIcon from \"../icons/search\";\n\nconst React = BDV2.React;\n\nexport default class Search extends React.Component {\n constructor(props){\n super(props)\n this.state = {\n focused: false\n }\n }\n render() {\n const className = [\"bd-search-wrapper\"]\n if(this.state.focused)className.push(\"focused\")\n return
\n {\n this.setState({focused: true})\n }} onBlur={() => {\n this.setState({focused: false})\n }}/>\n \n
;\n }\n}","import ErrorBoundary from \"./errorBoundary\";\nimport ContentColumn from \"./contentColumn\";\nimport ReloadIcon from \"./reloadIcon\";\nimport AddonCard from \"./addoncard\";\nimport Dropdown from \"./components/dropdown\";\nimport Search from \"./components/search\";\n\nimport {settingsCookie, pluginCookie, themeCookie, bdplugins, bdthemes} from \"../0globals\";\nimport ContentManager from \"../modules/contentManager\";\nimport BDV2 from \"../modules/v2\";\nimport pluginModule from \"../modules/pluginModule\";\nimport themeModule from \"../modules/themeModule\";\nimport WebpackModules from \"../modules/webpackModules\";\nimport BdApi from \"../modules/bdApi\";\nimport Utils from \"../modules/utils\";\nimport TooltipWrap from \"./tooltipWrap\";\nimport bdEvents from \"../modules/bdEvents\";\nimport EmulatedTooltip from \"./tooltip\";\n\nconst Tooltip = WebpackModules.findByDisplayName(\"Tooltip\");\n\nconst React = BDV2.react;\n\nexport default class CardList extends BDV2.reactComponent {\n constructor(props) {\n super(props);\n this.state = {sort: \"name\", ascending: true, query: \"\"};\n this.isPlugins = this.props.type == \"plugins\";\n this.cookie = this.isPlugins ? pluginCookie : themeCookie;\n this.manager = this.isPlugins ? pluginModule : themeModule;\n\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n\n this.onAddonChanges = function(){\n this.forceUpdate()\n }\n this.onAddonChanges = this.onAddonChanges.bind(this)\n }\n\n componentDidMount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.on(`${type}loaded`, this.onAddonChanges)\n bdEvents.on(`${type}unloaded`, this.onAddonChanges)\n bdEvents.on(`${type}reloaded`, this.onAddonChanges)\n }\n\n componentWillUnmount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.off(`${type}loaded`, this.onAddonChanges)\n bdEvents.off(`${type}unloaded`, this.onAddonChanges)\n bdEvents.off(`${type}reloaded`, this.onAddonChanges)\n }\n\n openFolder() {\n const shell = require(\"electron\").shell;\n const open = shell.openPath || shell.openItem;\n open(this.isPlugins ? ContentManager.pluginsFolder : ContentManager.themesFolder);\n }\n\n edit(name) {\n console.log(name);\n this.manager.edit(name);\n }\n\n async delete(name) {\n const shouldDelete = await this.confirmDelete(name);\n if (!shouldDelete) return;\n this.manager.delete(name);\n }\n\n confirmDelete(name) {\n return new Promise(resolve => {\n BdApi.showConfirmationModal(\"Are You Sure?\", `Are you sure you want to delete ${name}?`, {\n danger: true,\n confirmText: \"Delete\",\n onConfirm: () => {resolve(true);},\n onCancel: () => {resolve(false);}\n });\n });\n }\n\n get sortOptions() {\n return [\n {label: \"Name\", value: \"name\"},\n {label: \"Author\", value: \"author\"},\n {label: \"Version\", value: \"version\"},\n {label: \"Recently Added\", value: \"added\"},\n {label: \"Last Modified\", value: \"modified\"},\n {label: \"File Size\", value: \"size\"},\n ];\n }\n\n get directions() {\n return [\n {label: \"Ascending\", value: true},\n {label: \"Descending\", value: false}\n ];\n }\n\n reverse(value) {\n this.setState({ascending: value});\n }\n\n sort(value) {\n this.setState({sort: value});\n }\n\n search(event) {\n this.setState({query: event.target.value.toLocaleLowerCase()});\n }\n\n getProps(addon) {\n return {\n key: this.getName(addon),\n enabled: this.cookie[this.getName(addon)],\n toggle: this.manager.toggle.bind(this.manager),\n edit: settingsCookie[\"fork-ps-7\"] ? this.edit.bind(this) : null,\n remove: this.delete.bind(this),\n addon: addon,\n hash: addon.hash\n };\n }\n\n getString(value) {\n if (!value) return \"???\";\n return typeof value == \"string\" ? value : value.toString();\n }\n\n get list(){\n return this.props.type === \"plugins\" ? Object.values(bdplugins) : Object.values(bdthemes);\n }\n\n getAddons() {\n const sortedAddons = this.list.sort((a, b) => {\n const cap = this.state.sort.charAt(0).toUpperCase() + this.state.sort.slice(1);\n const first = a.plugin && a.plugin[`get${cap}`] ? this.getString(a.plugin[`get${cap}`]()) : this.getString(a[this.state.sort]);\n const second = b.plugin && b.plugin[`get${cap}`] ? this.getString(b.plugin[`get${cap}`]()) : this.getString(b[this.state.sort]);\n if (typeof(first) == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n const rendered = [];\n for (let a = 0; a < sortedAddons.length; a++) {\n const addon = sortedAddons[a];\n if (this.state.query) {\n let matches = null;\n const name = this.getName(addon);\n const author = this.getAuthor(addon);\n const description = this.getDescription(addon);\n const version = this.getVersion(addon);\n if (name) matches = name.toLocaleLowerCase().includes(this.state.query);\n if (author) matches = matches || author.toLocaleLowerCase().includes(this.state.query);\n if (description) matches = matches || description.toLocaleLowerCase().includes(this.state.query);\n if (version) matches = matches || version.toLocaleLowerCase().includes(this.state.query);\n if (!matches) continue;\n }\n const props = this.getProps(addon);\n rendered.push();\n }\n return rendered;\n }\n\n getName(addon) {return this.getString(addon.plugin ? addon.plugin.getName() : addon.name);}\n getAuthor(addon) {return this.getString(addon.plugin ? addon.plugin.getAuthor() : addon.author);}\n getDescription(addon) {return this.getString(addon.plugin ? addon.plugin.getDescription() : addon.description);}\n getVersion(addon) {return this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version);}\n\n renderCheckUpdates(){\n if(!window.ZeresPluginLibrary)return null\n if(!window.PluginUpdates)return null\n if(typeof window.PluginUpdates.checkAll !== \"function\")return null\n if(!this.isPlugins)return null\n\n let tooltipIsShowing = false\n let tooltip\n return \n {\n tooltipIsShowing = false\n tooltip.hide()\n }}>\n {\n try{\n Utils.showToast(\"Plugin update check in progress.\", {type: \"info\"})\n window.PluginUpdates.checkAll()\n .then(() => {\n Utils.showToast(\"Plugin update check complete.\", {type: \"success\"})\n }).catch(err => {\n console.error(err)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n })\n }catch(e){\n console.error(e)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n }\n }} wrapper={false} disabled={false} onRightClick={() => {\n if(!this.refs.checkUpdateButton)return\n if (!window.PluginUpdates || !window.PluginUpdates.plugins) return;\n if(tooltipIsShowing)return\n tooltip = new EmulatedTooltip(this.refs.checkUpdateButton.refs.original.refs.button, Object.values(window.PluginUpdates.plugins).map(p => p.name).join(\", \"), {\n side: \"bottom\",\n attachEvents: false\n })\n tooltip.show()\n tooltipIsShowing = true\n }}>\n Check for Updates\n \n \n \n }\n\n render() {\n const refreshIcon = \n {(props) => \n {\n if (this.isPlugins) pluginModule.updatePluginList();\n else themeModule.updateThemeList();\n this.forceUpdate();\n }} />\n };\n const addonCards = this.getAddons();\n\n return \n \n Open {this.isPlugins ? \"Plugin\" : \"Theme\"} Folder\n \n {this.renderCheckUpdates()}\n {!settingsCookie[\"fork-ps-5\"] && refreshIcon}\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
{addonCards}
\n
\n }\n}\n\nconst originalRender = CardList.prototype.render;\nObject.defineProperty(CardList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\n get: () => originalRender\n});","import {settingsRPC, defaultRPC} from \"../0globals\";\r\n\r\nconst dispatcher = BDModules.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default\r\nconst ActionTypes = BDModules.get(m=>m.ActionTypes)[0].ActionTypes\r\n\r\nconst socketId = \"lightcord-spoof-socket\"\r\nconst pid = process.pid\r\n\r\nexport default new class CustomRichPresence {\r\n constructor(){\r\n this.enabled = false\r\n\r\n this.game = settingsRPC\r\n }\r\n \r\n get formatedGame(){\r\n if(!this.game)return null\r\n if(this.enabled === false)return null\r\n let game = {\r\n name: this.game.name || defaultRPC.name,\r\n application_id: this.game.application_id || defaultRPC.application_id,\r\n details: this.game.details || undefined,\r\n state: this.game.state || undefined,\r\n timestamps: this.game[\"timestamps.start\"] ? {\r\n start: this.game[\"timestamps.start\"]\r\n } : undefined,\r\n assets: this.game[\"assets.large\"] ? {\r\n large_image: this.game[\"assets.large\"],\r\n small_image: this.game[\"assets.small\"] || undefined\r\n } : undefined\r\n }\r\n return game\r\n }\r\n\r\n sendGame(){\r\n dispatcher.dispatch({\r\n type: ActionTypes.LOCAL_ACTIVITY_UPDATE,\r\n socketId,\r\n pid,\r\n activity: this.formatedGame\r\n }) \r\n }\r\n\r\n enable() {\r\n if(this.enabled)return\r\n this.enabled = true\r\n console.log(\"Enabling custom RichPresence\")\r\n\r\n this.set(settingsRPC || Object.create(defaultRPC))\r\n\r\n this.sendGame()\r\n }\r\n\r\n disable() {\r\n if(!this.enabled)return\r\n this.enabled = false\r\n console.log(\"Disabling custom RichPresence\")\r\n\r\n this.sendGame()\r\n }\r\n\r\n async fetchAssets(applicationId){\r\n let assets = await BDModules.get(e => e.getAssets)[0].getAssets(applicationId)\r\n if(assets.undefined && typeof assets.undefined === \"number\"){\r\n throw new Error(\"Unknown Application\")\r\n }\r\n return assets\r\n }\r\n\r\n set(activity){\r\n this.game = activity\r\n\r\n this.sendGame()\r\n }\r\n}","import BDV2 from \"../modules/v2\";\nimport V2C_SettingsTitle from \"./settingsTitle\";\nimport V2C_SettingsGroup from \"./settingsGroup\";\nimport dataStore from \"../modules/dataStore\";\nimport { defaultRPC, settingsRPC } from \"../0globals\";\nimport CustomRichPresence from \"../modules/CustomRichPresence\"\nimport { remote } from \"electron\";\nimport MarginTop from \"./margintop\";\nimport Utils from \"../modules/utils\";\n\nconst React = BDV2.React;\n\nlet V2C_PresenceSettingsModules\nexport default class V2C_PresenceSettings extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n data: dataStore.getSettingGroup(\"rpc\") || defaultRPC,\n assets: []\n }\n\n this.preview = null\n this.isfetching = false\n if(this.state.data.application_id){\n this.fetchAssets()\n }\n\n this.assetComponents = new Set()\n }\n\n updateWhenFetched(comp){\n this.assetComponents.add(comp)\n }\n\n /**\n * \n * @param {InputText} setting \n */\n onChange(setting, value){\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id)\n\n this.setState({\n data: Object.assign(settingsRPC, this.state.data, {\n [defaultSetting.id]: !!value ? value : null\n }),\n assets: this.state.assets\n })\n if(setting.props.id === \"application_id\"){\n this.fetchAssets()\n }\n\n dataStore.setSettingGroup(\"rpc\", settingsRPC);\n this.preview.forceUpdate()\n CustomRichPresence.set(settingsRPC)\n }\n\n fetchAssets(){\n if(this.isfetching === true){\n let app = this.state.data.application_id\n setTimeout(() => {\n if(this.state.data.application_id !== app){\n return\n }\n this.fetchAssets()\n }, 5000);\n }\n if(!this.state.data.application_id){\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n return\n }\n this.isfetching = true\n CustomRichPresence.fetchAssets(this.state.data.application_id)\n .then(assets => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: Object.keys(assets).map(k => {\n let asset = assets[k]\n return {\n id: asset.id,\n name: asset.name,\n type: asset.type\n }\n })\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n }).catch(() => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n })\n }\n\n updatePreview(data){\n this.setState({\n data\n })\n }\n\n get modules(){\n return V2C_PresenceSettingsModules || (V2C_PresenceSettingsModules = [\n BDModules.get(e => e.marginBottom20)[0]\n ])\n }\n\n render() {\n let [\n marginModule\n ] = this.modules\n return [\n ,\n ,\n ,\n
\n {/** options */}\n {this.optionsComponents}\n
,\n
\n \n \n {/** preview */}\n \n
,\n
,\n ,\n \n ]\n }\n\n get optionsComponents(){\n return this._optionsComponents || (this._optionsComponents = RPCProps.map(e => {\n if(e.type === \"text\"){\n return \n }else if(e.type === \"number\"){\n let array = []/*\n if(e.id === \"timestamps.start\"){\n array.unshift( {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} />)\n }*/\n return array\n }else if(e.type === \"choice\"){\n if([\"assets.small\", \"assets.large\"].includes(e.id)){\n return {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n }))}/>\n }else{\n return \"Unknown choice.\"\n }\n }\n }))\n }\n}\nconst RPCProps = [\n {\n title: \"Application ID\",\n id: \"application_id\",\n type: \"number\",\n placeholder: \"711416957718757418\"\n },\n {\n title: \"Name\",\n id: \"name\",\n type: \"text\",\n placeholder: \"Lightcord\"\n },\n {\n title: \"Details\",\n id: \"details\",\n type: \"text\",\n placeholder: \"Browsing Discord\"\n },\n {\n title: \"State\",\n id: \"state\",\n type: \"text\",\n placeholder: \"Lightcord Client\"\n },\n {\n title: \"Timestamp Start\",\n id: \"timestamps.start\",\n type: \"number\",\n get placeholder(){\n return Date.now()\n }\n },\n {\n title: \"LargeAsset\",\n id: \"assets.large\",\n type: \"choice\"\n },\n {\n title: \"SmallAsset\",\n id: \"assets.small\",\n type: \"choice\"\n },\n]\n\nlet inputTextModules\nclass InputText extends React.PureComponent {\n get modules(){\n if(inputTextModules && inputTextModules[0])return inputTextModules\n return inputTextModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n ]\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n this.setState({\n data: value\n })\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n inputModule,\n sizeModule2,\n ] = this.modules\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n
\n \n
)\n }\n}\n\nlet InputNumberModules\nclass InputNumber extends React.PureComponent {\n get modules(){\n return InputNumberModules || (InputNumberModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n BDModules.get(e => e.colorTransparent)[0],\n ])\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n value = value.replace(/[^\\d]+/g, \"\")\n if(value == this.state.data){\n input.setValue(value)\n return\n }\n\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n ] = this.modules\n\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n {setting.id === \"timestamps.start\" ? \n {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} color=\"brand\">Copy current timestamp : null}\n
\n \n
)\n }\n}\n\nlet InputChoiceModules\nclass InputChoice extends React.PureComponent {\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id] ? \"asset-\"+this.props.manager.state.data[setting.id] : \"none\"\n }\n this.props.manager.updateWhenFetched(this)\n }\n\n onChange(value){\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value === \"none\" ? null : value.replace(\"asset-\", \"\"))\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data === \"none\" ? null : this.state.data.replace(\"asset-\", \"\"))\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n this.forceUpdate()\n }\n \n get modules(){\n return InputChoiceModules || (InputChoiceModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0]\n ])\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule\n ] = this.modules\n \n let options = this.props.manager.state.assets.map(e => {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n })\n\n options.unshift({\n value: \"none\",\n label: \"No assets\"\n })\n\n return (
\n
\n
\n {setting.title}\n
\n \n {/* {\n this.setState({focused: true})\n }} onBlur={() => {\n this.setState({focused: false})\n }}/>\n \n
;\n }\n}","import ErrorBoundary from \"./errorBoundary\";\nimport ContentColumn from \"./contentColumn\";\nimport ReloadIcon from \"./reloadIcon\";\nimport AddonCard from \"./addoncard\";\nimport Dropdown from \"./components/dropdown\";\nimport Search from \"./components/search\";\n\nimport {settingsCookie, pluginCookie, themeCookie, bdplugins, bdthemes} from \"../0globals\";\nimport ContentManager from \"../modules/contentManager\";\nimport BDV2 from \"../modules/v2\";\nimport pluginModule from \"../modules/pluginModule\";\nimport themeModule from \"../modules/themeModule\";\nimport WebpackModules from \"../modules/webpackModules\";\nimport BdApi from \"../modules/bdApi\";\nimport Utils from \"../modules/utils\";\nimport TooltipWrap from \"./tooltipWrap\";\nimport bdEvents from \"../modules/bdEvents\";\nimport EmulatedTooltip from \"./tooltip\";\n\nconst Tooltip = WebpackModules.findByDisplayName(\"Tooltip\");\n\nconst React = BDV2.react;\n\nexport default class CardList extends BDV2.reactComponent {\n constructor(props) {\n super(props);\n this.state = {sort: \"name\", ascending: true, query: \"\"};\n this.isPlugins = this.props.type == \"plugins\";\n this.cookie = this.isPlugins ? pluginCookie : themeCookie;\n this.manager = this.isPlugins ? pluginModule : themeModule;\n\n this.sort = this.sort.bind(this);\n this.reverse = this.reverse.bind(this);\n this.search = this.search.bind(this);\n\n this.onAddonChanges = function(){\n this.forceUpdate()\n }\n this.onAddonChanges = this.onAddonChanges.bind(this)\n }\n\n componentDidMount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.on(`${type}loaded`, this.onAddonChanges)\n bdEvents.on(`${type}unloaded`, this.onAddonChanges)\n bdEvents.on(`${type}reloaded`, this.onAddonChanges)\n }\n\n componentWillUnmount(){\n const type = (this.isPlugins ? \"plugin\" : \"theme\") + \"-\"\n bdEvents.off(`${type}loaded`, this.onAddonChanges)\n bdEvents.off(`${type}unloaded`, this.onAddonChanges)\n bdEvents.off(`${type}reloaded`, this.onAddonChanges)\n }\n\n openFolder() {\n const shell = require(\"electron\").shell;\n const open = shell.openPath || shell.openItem;\n open(this.isPlugins ? ContentManager.pluginsFolder : ContentManager.themesFolder);\n }\n\n edit(name) {\n console.log(name);\n this.manager.edit(name);\n }\n\n async delete(name) {\n const shouldDelete = await this.confirmDelete(name);\n if (!shouldDelete) return;\n this.manager.delete(name);\n }\n\n confirmDelete(name) {\n return new Promise(resolve => {\n BdApi.showConfirmationModal(\"Are You Sure?\", `Are you sure you want to delete ${name}?`, {\n danger: true,\n confirmText: \"Delete\",\n onConfirm: () => {resolve(true);},\n onCancel: () => {resolve(false);}\n });\n });\n }\n\n get sortOptions() {\n return [\n {label: \"Name\", value: \"name\"},\n {label: \"Author\", value: \"author\"},\n {label: \"Version\", value: \"version\"},\n {label: \"Recently Added\", value: \"added\"},\n {label: \"Last Modified\", value: \"modified\"},\n {label: \"File Size\", value: \"size\"},\n ];\n }\n\n get directions() {\n return [\n {label: \"Ascending\", value: true},\n {label: \"Descending\", value: false}\n ];\n }\n\n reverse(value) {\n this.setState({ascending: value});\n }\n\n sort(value) {\n this.setState({sort: value});\n }\n\n search(event) {\n this.setState({query: event.target.value.toLocaleLowerCase()});\n }\n\n getProps(addon) {\n return {\n key: this.getName(addon),\n enabled: this.cookie[this.getName(addon)],\n toggle: this.manager.toggle.bind(this.manager),\n edit: settingsCookie[\"fork-ps-7\"] ? this.edit.bind(this) : null,\n remove: this.delete.bind(this),\n addon: addon,\n hash: addon.hash\n };\n }\n\n getString(value) {\n if (!value) return \"???\";\n return typeof value == \"string\" ? value : value.toString();\n }\n\n get list(){\n return this.props.type === \"plugins\" ? Object.values(bdplugins) : Object.values(bdthemes);\n }\n\n getAddons() {\n const sortedAddons = this.list.sort((a, b) => {\n const cap = this.state.sort.charAt(0).toUpperCase() + this.state.sort.slice(1);\n const first = a.plugin && a.plugin[`get${cap}`] ? this.getString(a.plugin[`get${cap}`]()) : this.getString(a[this.state.sort]);\n const second = b.plugin && b.plugin[`get${cap}`] ? this.getString(b.plugin[`get${cap}`]()) : this.getString(b[this.state.sort]);\n if (typeof(first) == \"string\") return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase());\n if (first > second) return 1;\n if (second > first) return -1;\n return 0;\n });\n if (!this.state.ascending) sortedAddons.reverse();\n const rendered = [];\n for (let a = 0; a < sortedAddons.length; a++) {\n const addon = sortedAddons[a];\n if (this.state.query) {\n let matches = null;\n const name = this.getName(addon);\n const author = this.getAuthor(addon);\n const description = this.getDescription(addon);\n const version = this.getVersion(addon);\n if (name) matches = name.toLocaleLowerCase().includes(this.state.query);\n if (author) matches = matches || author.toLocaleLowerCase().includes(this.state.query);\n if (description) matches = matches || description.toLocaleLowerCase().includes(this.state.query);\n if (version) matches = matches || version.toLocaleLowerCase().includes(this.state.query);\n if (!matches) continue;\n }\n const props = this.getProps(addon);\n rendered.push();\n }\n return rendered;\n }\n\n getName(addon) {return this.getString(addon.plugin ? addon.plugin.getName() : addon.name);}\n getAuthor(addon) {return this.getString(addon.plugin ? addon.plugin.getAuthor() : addon.author);}\n getDescription(addon) {return this.getString(addon.plugin ? addon.plugin.getDescription() : addon.description);}\n getVersion(addon) {return this.getString(addon.plugin ? addon.plugin.getVersion() : addon.version);}\n\n renderCheckUpdates(){\n if(!window.ZeresPluginLibrary)return null\n if(!window.PluginUpdates)return null\n if(typeof window.PluginUpdates.checkAll !== \"function\")return null\n if(!this.isPlugins)return null\n\n let tooltipIsShowing = false\n let tooltip\n return \n {\n tooltipIsShowing = false\n tooltip.hide()\n }}>\n {\n try{\n Utils.showToast(\"Plugin update check in progress.\", {type: \"info\"})\n window.PluginUpdates.checkAll()\n .then(() => {\n Utils.showToast(\"Plugin update check complete.\", {type: \"success\"})\n }).catch(err => {\n console.error(err)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n })\n }catch(e){\n console.error(e)\n Utils.showToast(\"An error occured while checking update.\", {type: \"error\"})\n }\n }} wrapper={false} disabled={false} onRightClick={() => {\n if(!this.refs.checkUpdateButton)return\n if (!window.PluginUpdates || !window.PluginUpdates.plugins) return;\n if(tooltipIsShowing)return\n tooltip = new EmulatedTooltip(this.refs.checkUpdateButton.refs.original.refs.button, Object.values(window.PluginUpdates.plugins).map(p => p.name).join(\", \"), {\n side: \"bottom\",\n attachEvents: false\n })\n tooltip.show()\n tooltipIsShowing = true\n }}>\n Check for Updates\n \n \n \n }\n\n render() {\n const refreshIcon = \n {(props) => \n {\n if (this.isPlugins) pluginModule.updatePluginList();\n else themeModule.updateThemeList();\n this.forceUpdate();\n }} />\n };\n const addonCards = this.getAddons();\n\n return \n \n Open {this.isPlugins ? \"Plugin\" : \"Theme\"} Folder\n \n {this.renderCheckUpdates()}\n {!settingsCookie[\"fork-ps-5\"] && refreshIcon}\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n
\n
{addonCards}
\n
\n }\n}\n\nconst originalRender = CardList.prototype.render;\nObject.defineProperty(CardList.prototype, \"render\", {\n enumerable: false,\n configurable: false,\n set: function() {console.warn(\"Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins\");},\n get: () => originalRender\n});","import {settingsRPC, defaultRPC} from \"../0globals\";\n\nconst dispatcher = BDModules.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default\nconst ActionTypes = BDModules.get(m=>m.ActionTypes)[0].ActionTypes\n\nconst socketId = \"lightcord-spoof-socket\"\nconst pid = process.pid\n\nexport default new class CustomRichPresence {\n constructor(){\n this.enabled = false\n\n this.game = settingsRPC\n }\n \n get formatedGame(){\n if(!this.game)return null\n if(this.enabled === false)return null\n let game = {\n name: this.game.name || defaultRPC.name,\n application_id: this.game.application_id || defaultRPC.application_id,\n details: this.game.details || undefined,\n state: this.game.state || undefined,\n timestamps: this.game[\"timestamps.start\"] ? {\n start: this.game[\"timestamps.start\"]\n } : undefined,\n assets: this.game[\"assets.large\"] ? {\n large_image: this.game[\"assets.large\"],\n small_image: this.game[\"assets.small\"] || undefined\n } : undefined\n }\n return game\n }\n\n sendGame(){\n dispatcher.dispatch({\n type: ActionTypes.LOCAL_ACTIVITY_UPDATE,\n socketId,\n pid,\n activity: this.formatedGame\n }) \n }\n\n enable() {\n if(this.enabled)return\n this.enabled = true\n console.log(\"Enabling custom RichPresence\")\n\n this.set(settingsRPC || Object.create(defaultRPC))\n\n this.sendGame()\n }\n\n disable() {\n if(!this.enabled)return\n this.enabled = false\n console.log(\"Disabling custom RichPresence\")\n\n this.sendGame()\n }\n\n async fetchAssets(applicationId){\n let assets = await BDModules.get(e => e.getAssets)[0].getAssets(applicationId)\n if(assets.undefined && typeof assets.undefined === \"number\"){\n throw new Error(\"Unknown Application\")\n }\n return assets\n }\n\n set(activity){\n this.game = activity\n\n this.sendGame()\n }\n}","import BDV2 from \"../modules/v2\";\nimport V2C_SettingsTitle from \"./settingsTitle\";\nimport V2C_SettingsGroup from \"./settingsGroup\";\nimport dataStore from \"../modules/dataStore\";\nimport { defaultRPC, settingsRPC } from \"../0globals\";\nimport CustomRichPresence from \"../modules/CustomRichPresence\"\nimport { remote } from \"electron\";\nimport MarginTop from \"./margintop\";\nimport Utils from \"../modules/utils\";\n\nconst React = BDV2.React;\n\nlet V2C_PresenceSettingsModules\nexport default class V2C_PresenceSettings extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n data: dataStore.getSettingGroup(\"rpc\") || defaultRPC,\n assets: []\n }\n\n this.preview = null\n this.isfetching = false\n if(this.state.data.application_id){\n this.fetchAssets()\n }\n\n this.assetComponents = new Set()\n }\n\n updateWhenFetched(comp){\n this.assetComponents.add(comp)\n }\n\n /**\n * \n * @param {InputText} setting \n */\n onChange(setting, value){\n let defaultSetting = RPCProps.find(e => e.id === setting.props.id)\n\n this.setState({\n data: Object.assign(settingsRPC, this.state.data, {\n [defaultSetting.id]: !!value ? value : null\n }),\n assets: this.state.assets\n })\n if(setting.props.id === \"application_id\"){\n this.fetchAssets()\n }\n\n dataStore.setSettingGroup(\"rpc\", settingsRPC);\n this.preview.forceUpdate()\n CustomRichPresence.set(settingsRPC)\n }\n\n fetchAssets(){\n if(this.isfetching === true){\n let app = this.state.data.application_id\n setTimeout(() => {\n if(this.state.data.application_id !== app){\n return\n }\n this.fetchAssets()\n }, 5000);\n }\n if(!this.state.data.application_id){\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n return\n }\n this.isfetching = true\n CustomRichPresence.fetchAssets(this.state.data.application_id)\n .then(assets => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: Object.keys(assets).map(k => {\n let asset = assets[k]\n return {\n id: asset.id,\n name: asset.name,\n type: asset.type\n }\n })\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n }).catch(() => {\n this.isfetching = false\n this.setState({\n data: this.state.data,\n assets: []\n })\n this.forceUpdate()\n this.assetComponents.forEach(e => e.forceUpdate())\n })\n }\n\n updatePreview(data){\n this.setState({\n data\n })\n }\n\n get modules(){\n return V2C_PresenceSettingsModules || (V2C_PresenceSettingsModules = [\n BDModules.get(e => e.marginBottom20)[0]\n ])\n }\n\n render() {\n let [\n marginModule\n ] = this.modules\n return [\n ,\n ,\n ,\n
\n {/** options */}\n {this.optionsComponents}\n
,\n
\n \n \n {/** preview */}\n \n
,\n
,\n ,\n \n ]\n }\n\n get optionsComponents(){\n return this._optionsComponents || (this._optionsComponents = RPCProps.map(e => {\n if(e.type === \"text\"){\n return \n }else if(e.type === \"number\"){\n let array = []/*\n if(e.id === \"timestamps.start\"){\n array.unshift( {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} />)\n }*/\n return array\n }else if(e.type === \"choice\"){\n if([\"assets.small\", \"assets.large\"].includes(e.id)){\n return {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n }))}/>\n }else{\n return \"Unknown choice.\"\n }\n }\n }))\n }\n}\nconst RPCProps = [\n {\n title: \"Application ID\",\n id: \"application_id\",\n type: \"number\",\n placeholder: \"711416957718757418\"\n },\n {\n title: \"Name\",\n id: \"name\",\n type: \"text\",\n placeholder: \"Lightcord\"\n },\n {\n title: \"Details\",\n id: \"details\",\n type: \"text\",\n placeholder: \"Browsing Discord\"\n },\n {\n title: \"State\",\n id: \"state\",\n type: \"text\",\n placeholder: \"Lightcord Client\"\n },\n {\n title: \"Timestamp Start\",\n id: \"timestamps.start\",\n type: \"number\",\n get placeholder(){\n return Date.now()\n }\n },\n {\n title: \"LargeAsset\",\n id: \"assets.large\",\n type: \"choice\"\n },\n {\n title: \"SmallAsset\",\n id: \"assets.small\",\n type: \"choice\"\n },\n]\n\nlet inputTextModules\nclass InputText extends React.PureComponent {\n get modules(){\n if(inputTextModules && inputTextModules[0])return inputTextModules\n return inputTextModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n ]\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n this.setState({\n data: value\n })\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n inputModule,\n sizeModule2,\n ] = this.modules\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n
\n \n
)\n }\n}\n\nlet InputNumberModules\nclass InputNumber extends React.PureComponent {\n get modules(){\n return InputNumberModules || (InputNumberModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0],\n BDModules.get(e => e.inputMini)[0],\n BDModules.get(e => e.size16 && e.size20)[0],\n BDModules.get(e => e.colorTransparent)[0],\n ])\n }\n\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id]\n }\n\n this.input = {\n value = value.replace(/[^\\d]+/g, \"\")\n if(value == this.state.data){\n input.setValue(value)\n return\n }\n\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value)\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data)\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n }} type=\"text\"/>\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule,\n ] = this.modules\n\n\n return (
\n
\n
\n {setting.title}\n
\n {this.input}\n {setting.id === \"timestamps.start\" ? \n {\n DiscordNative.clipboard.copy(Date.now()+\"\")\n }} color=\"brand\">Copy current timestamp : null}\n
\n \n
)\n }\n}\n\nlet InputChoiceModules\nclass InputChoice extends React.PureComponent {\n constructor(props){\n super(props)\n let setting = this.props.setting\n this.state = {\n data: this.props.manager.state.data[setting.id] ? \"asset-\"+this.props.manager.state.data[setting.id] : \"none\"\n }\n this.props.manager.updateWhenFetched(this)\n }\n\n onChange(value){\n if(!this.lastEdited || this.lastEdited < Date.now() - 500){\n this.props.manager.onChange(this, value === \"none\" ? null : value.replace(\"asset-\", \"\"))\n this.lastEdited = Date.now()\n }else if(!this.isTiming){\n this.isTiming = setTimeout(() => {\n this.props.manager.onChange(this, this.state.data === \"none\" ? null : this.state.data.replace(\"asset-\", \"\"))\n this.isTiming = null\n this.lastEdited = Date.now()\n }, 500);\n }\n this.setState({\n data: value\n })\n this.forceUpdate()\n }\n \n get modules(){\n return InputChoiceModules || (InputChoiceModules = [\n BDModules.get(e => e.removeKeybind)[0],\n BDModules.get(e => e.marginBottom20)[0],\n BDModules.get(e => e.defaultMarginh5)[0],\n BDModules.get(e => e.colorStandard)[0],\n BDModules.get(e => e.size32)[0],\n BDModules.get(e => e._horizontal)[0]\n ])\n }\n\n render(){\n let setting = this.props.setting\n\n let [\n rowModule,\n marginModule,\n marginModule2,\n colorModule,\n sizeModule,\n flexModule\n ] = this.modules\n \n let options = this.props.manager.state.assets.map(e => {\n return {\n value: \"asset-\"+e.id,\n label: e.name\n }\n })\n\n options.unshift({\n value: \"none\",\n label: \"No assets\"\n })\n\n return (
\n
\n
\n {setting.title}\n
\n \n {/*