@nlabs/lex 1.51.7 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Button.stories.js +1 -1
- package/lib/LexConfig.d.ts +1 -1
- package/lib/LexConfig.js +36 -14
- package/lib/commands/build/build.js +111 -21
- package/lib/commands/clean/clean.js +1 -1
- package/lib/commands/compile/compile.js +95 -28
- package/lib/commands/config/config.js +1 -1
- package/lib/commands/copy/copy.js +1 -1
- package/lib/commands/create/create.js +1 -1
- package/lib/commands/dev/dev.js +5 -6
- package/lib/commands/init/init.js +1 -1
- package/lib/commands/link/link.js +1 -1
- package/lib/commands/lint/lint.js +1 -1
- package/lib/commands/serverless/serverless.js +1 -1
- package/lib/commands/storybook/storybook.js +1 -1
- package/lib/commands/versions/versions.js +1 -1
- package/lib/utils/aiService.js +1 -1
- package/lib/utils/app.d.ts +1 -1
- package/lib/utils/app.js +22 -17
- package/lib/utils/postcss/postcss-for.d.ts +1 -1
- package/lib/utils/postcss/postcss-for.js +6 -8
- package/lib/utils/postcss/postcss-percentage.d.ts +1 -1
- package/lib/utils/postcss/postcss-percentage.js +14 -13
- package/package.json +10 -3
- package/webpack.config.js +3 -1
|
@@ -110,4 +110,4 @@ export const init = async (appName, packageName, cmd, callback = ()=>({}))=>{
|
|
|
110
110
|
return 0;
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9pbml0L2luaXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7cmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCBzZXRQYWNrYWdlSnNvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZX0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGw/OiBib29sZWFuO1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgSW5pdENhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgY29uc3QgaW5pdCA9IGFzeW5jIChcbiAgYXBwTmFtZTogc3RyaW5nLFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICBjbWQ6IEluaXRPcHRpb25zLFxuICBjYWxsYmFjazogSW5pdENhbGxiYWNrID0gKCkgPT4gKHt9KVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgaW5zdGFsbCwgcGFja2FnZU1hbmFnZXI6IGNtZFBhY2thZ2VNYW5hZ2VyLCBxdWlldCwgdHlwZXNjcmlwdH0gPSBjbWQ7XG4gIGNvbnN0IGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBTcGlubmVyXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICAvLyBEb3dubG9hZCBhcHAgbW9kdWxlIGludG8gdGVtcG9yYXJ5IGRpcmVjdG9yeVxuICBsb2coYCR7Y2xpTmFtZX0gaXMgZG93bmxvYWRpbmcgdGhlIGFwcCBtb2R1bGUuLi5gLCAnaW5mbycsIHF1aWV0KTtcbiAgc3Bpbm5lci5zdGFydCgnRG93bmxvYWRpbmcgYXBwLi4uJyk7XG4gIGNvbnN0IHRtcFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vLmxleFRtcCcpO1xuICBjb25zdCBhcHBQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7YXBwTmFtZX1gKTtcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgY29uc3QgZG5wUGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb3dubG9hZC1ucG0tcGFja2FnZS9iaW4vY2xpLmpzJyk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuICBjb25zdCB7cGFja2FnZU1hbmFnZXI6IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyLCB1c2VUeXBlc2NyaXB0OiBjb25maWdUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmcgPSBjbWRQYWNrYWdlTWFuYWdlciB8fCBjb25maWdQYWNrYWdlTWFuYWdlciB8fCAnJztcbiAgY29uc3QgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiA9IHR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCA/IHR5cGVzY3JpcHQgOiBjb25maWdUeXBlc2NyaXB0IHx8IGZhbHNlO1xuXG4gIGxldCBhcHBNb2R1bGU6IHN0cmluZyA9IHBhY2thZ2VOYW1lO1xuXG4gIC8vIFVzZSBiYXNlIGFwcCBtb2R1bGUgYmFzZWQgb24gY29uZmlnXG4gIGlmKCFhcHBNb2R1bGUpIHtcbiAgICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgICBhcHBNb2R1bGUgPSAnQG5sYWJzL2Fya2hhbWpzLWV4YW1wbGUtdHMtcmVhY3QnO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBNb2R1bGUgPSAnQG5sYWJzL2Fya2hhbWpzLWV4YW1wbGUtZmxvdy1yZWFjdCc7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjYShkbnBQYXRoLCBbYXBwTW9kdWxlLCB0bXBQYXRoXSwge30pO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyIGFuZCB1cGRhdGUgc3RhdHVzXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdTdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBhcHAhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcik7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUaGVyZSB3YXMgYW4gZXJyb3IgZG93bmxvYWRpbmcgJHthcHBNb2R1bGV9LiBNYWtlIHN1cmUgdGhlIHBhY2thZ2UgZXhpc3RzIGFuZCB0aGVyZSBpcyBhIG5ldHdvcmsgY29ubmVjdGlvbi5gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXIgYW5kIGtpbGwgcHJvY2Vzc1xuICAgIHNwaW5uZXIuZmFpbCgnRG93bmxvYWRlZCBvZiBhcHAgZmFpbGVkLicpO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBNb3ZlIGludG8gY29uZmlndXJlZCBkaXJlY3RvcnlcbiAgdHJ5IHtcbiAgICByZW5hbWVTeW5jKGAke3RtcFBhdGh9LyR7YXBwTW9kdWxlfWAsIGFwcFBhdGgpO1xuICB9IGNhdGNoKF9lcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVGhlcmUgd2FzIGFuIGVycm9yIGNvcHlpbmcgJHthcHBNb2R1bGV9IHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIENvbmZpZ3VyZSBwYWNrYWdlLmpzb25cbiAgY29uc3QgcGFja2FnZVBhdGg6IHN0cmluZyA9IGAke2FwcFBhdGh9L3BhY2thZ2UuanNvbmA7XG4gIGNvbnN0IHBhY2thZ2VKc29uID0gZ2V0UGFja2FnZUpzb24ocGFja2FnZVBhdGgpO1xuICBwYWNrYWdlSnNvbi5uYW1lID0gYXBwTmFtZTtcbiAgcGFja2FnZUpzb24uZGVzY3JpcHRpb24gPSBgJHtjbGlOYW1lfSBjcmVhdGVkIGFwcGA7XG4gIHBhY2thZ2VKc29uLnZlcnNpb24gPSAnMC4xLjAnO1xuICBkZWxldGUgcGFja2FnZUpzb24ua2V5d29yZHM7XG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5hdXRob3I7XG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5jb250cmlidXRvcnM7XG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5yZXBvc2l0b3J5O1xuICBkZWxldGUgcGFja2FnZUpzb24uaG9tZXBhZ2U7XG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5idWdzO1xuXG4gIHRyeSB7XG4gICAgLy8gVXBkYXRlIHBhY2thZ2UuanNvblxuICAgIHNldFBhY2thZ2VKc29uKHBhY2thZ2VKc29uLCBwYWNrYWdlUGF0aCk7XG5cbiAgICAvLyBVcGRhdGUgUkVBRE1FXG4gICAgY29uc3QgcmVhZG1lUGF0aDogc3RyaW5nID0gYCR7YXBwUGF0aH0vUkVBRE1FLm1kYDtcbiAgICB3cml0ZUZpbGVTeW5jKHJlYWRtZVBhdGgsIGAjICR7YXBwTmFtZX1gKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmKGluc3RhbGwpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdJbnN0YWxsaW5nIGRlcGVuZGVuY2llcy4uLicpO1xuXG4gICAgLy8gQ2hhbmdlIHRvIHRoZSBhcHAgZGlyZWN0b3J5XG4gICAgcHJvY2Vzcy5jaGRpcihhcHBQYXRoKTtcblxuICAgIC8vIEluc3RhbGwgZGVwZW5kZW5jaWVzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWNhKHBhY2thZ2VNYW5hZ2VyLCBbJ2luc3RhbGwnXSwge1xuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICBzdGRpbzogJ2luaGVyaXQnXG4gICAgICB9KTtcblxuICAgICAgLy8gU3RvcCBzcGlubmVyXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgZGVwZW5kZW5jaWVzIScpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzLicpO1xuXG4gICAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgLy8gS2lsbCBwcm9jZXNzXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gMDtcbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwicmVuYW1lU3luYyIsIndyaXRlRmlsZVN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZ2V0UGFja2FnZUpzb24iLCJzZXRQYWNrYWdlSnNvbiIsImdldERpck5hbWUiLCJsb2ciLCJpbml0IiwiYXBwTmFtZSIsInBhY2thZ2VOYW1lIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwiaW5zdGFsbCIsInBhY2thZ2VNYW5hZ2VyIiwiY21kUGFja2FnZU1hbmFnZXIiLCJxdWlldCIsInR5cGVzY3JpcHQiLCJjd2QiLCJwcm9jZXNzIiwic3Bpbm5lciIsInN0YXJ0IiwidG1wUGF0aCIsImFwcFBhdGgiLCJkaXJOYW1lIiwiZG5wUGF0aCIsInBhcnNlQ29uZmlnIiwiY29uZmlnUGFja2FnZU1hbmFnZXIiLCJ1c2VUeXBlc2NyaXB0IiwiY29uZmlnVHlwZXNjcmlwdCIsImNvbmZpZyIsInVuZGVmaW5lZCIsImFwcE1vZHVsZSIsInN1Y2NlZWQiLCJlcnJvciIsImNvbnNvbGUiLCJmYWlsIiwiX2Vycm9yIiwicGFja2FnZVBhdGgiLCJwYWNrYWdlSnNvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInZlcnNpb24iLCJrZXl3b3JkcyIsImF1dGhvciIsImNvbnRyaWJ1dG9ycyIsInJlcG9zaXRvcnkiLCJob21lcGFnZSIsImJ1Z3MiLCJyZWFkbWVQYXRoIiwibWVzc2FnZSIsImNoZGlyIiwiZW5jb2RpbmciLCJzdGRpbyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUM3QyxTQUFRQyxXQUFXQyxXQUFXLFFBQU8sT0FBTztBQUU1QyxTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGFBQWEsRUFBRUMsY0FBYyxFQUFF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
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9pbml0L2luaXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7cmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCBzZXRQYWNrYWdlSnNvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZX0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGw/OiBib29sZWFuO1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSB0eXBlc2NyaXB0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgSW5pdENhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKT0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gYXN5bmMgKFxuICBhcHBOYW1lOiBzdHJpbmcsXG4gIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gIGNtZDogSW5pdE9wdGlvbnMsXG4gIGNhbGxiYWNrOiBJbml0Q2FsbGJhY2sgPSAoKSA9PiAoe30pXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBpbnN0YWxsLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHF1aWV0LCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIFNwaW5uZXJcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIC8vIERvd25sb2FkIGFwcCBtb2R1bGUgaW50byB0ZW1wb3JhcnkgZGlyZWN0b3J5XG4gIGxvZyhgJHtjbGlOYW1lfSBpcyBkb3dubG9hZGluZyB0aGUgYXBwIG1vZHVsZS4uLmAsICdpbmZvJywgcXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdEb3dubG9hZGluZyBhcHAuLi4nKTtcbiAgY29uc3QgdG1wUGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCAnLi8ubGV4VG1wJyk7XG4gIGNvbnN0IGFwcFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHthcHBOYW1lfWApO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuICBjb25zdCBkbnBQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25sb2FkLW5wbS1wYWNrYWdlL2Jpbi9jbGkuanMnKTtcblxuICAvLyBHZXQgY3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG4gIGNvbnN0IHtwYWNrYWdlTWFuYWdlcjogY29uZmlnUGFja2FnZU1hbmFnZXIsIHVzZVR5cGVzY3JpcHQ6IGNvbmZpZ1R5cGVzY3JpcHR9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3QgcGFja2FnZU1hbmFnZXI6IHN0cmluZyA9IGNtZFBhY2thZ2VNYW5hZ2VyIHx8IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyIHx8ICcnO1xuICBjb25zdCB1c2VUeXBlc2NyaXB0OiBib29sZWFuID0gdHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkID8gdHlwZXNjcmlwdCA6IGNvbmZpZ1R5cGVzY3JpcHQgfHwgZmFsc2U7XG5cbiAgbGV0IGFwcE1vZHVsZTogc3RyaW5nID0gcGFja2FnZU5hbWU7XG5cbiAgLy8gVXNlIGJhc2UgYXBwIG1vZHVsZSBiYXNlZCBvbiBjb25maWdcbiAgaWYoIWFwcE1vZHVsZSkge1xuICAgIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICAgIGFwcE1vZHVsZSA9ICdAbmxhYnMvYXJraGFtanMtZXhhbXBsZS10cy1yZWFjdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcE1vZHVsZSA9ICdAbmxhYnMvYXJraGFtanMtZXhhbXBsZS1mbG93LXJlYWN0JztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNhKGRucFBhdGgsIFthcHBNb2R1bGUsIHRtcFBhdGhdLCB7fSk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXIgYW5kIHVwZGF0ZSBzdGF0dXNcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGFwcCEnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKTtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZXJlIHdhcyBhbiBlcnJvciBkb3dubG9hZGluZyAke2FwcE1vZHVsZX0uIE1ha2Ugc3VyZSB0aGUgcGFja2FnZSBleGlzdHMgYW5kIHRoZXJlIGlzIGEgbmV0d29yayBjb25uZWN0aW9uLmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lciBhbmQga2lsbCBwcm9jZXNzXG4gICAgc3Bpbm5lci5mYWlsKCdEb3dubG9hZGVkIG9mIGFwcCBmYWlsZWQuJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIE1vdmUgaW50byBjb25maWd1cmVkIGRpcmVjdG9yeVxuICB0cnkge1xuICAgIHJlbmFtZVN5bmMoYCR7dG1wUGF0aH0vJHthcHBNb2R1bGV9YCwgYXBwUGF0aCk7XG4gIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUaGVyZSB3YXMgYW4gZXJyb3IgY29weWluZyAke2FwcE1vZHVsZX0gdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgLy8gQ29uZmlndXJlIHBhY2thZ2UuanNvblxuICBjb25zdCBwYWNrYWdlUGF0aDogc3RyaW5nID0gYCR7YXBwUGF0aH0vcGFja2FnZS5qc29uYDtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBnZXRQYWNrYWdlSnNvbihwYWNrYWdlUGF0aCk7XG4gIHBhY2thZ2VKc29uLm5hbWUgPSBhcHBOYW1lO1xuICBwYWNrYWdlSnNvbi5kZXNjcmlwdGlvbiA9IGAke2NsaU5hbWV9IGNyZWF0ZWQgYXBwYDtcbiAgcGFja2FnZUpzb24udmVyc2lvbiA9ICcwLjEuMCc7XG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5rZXl3b3JkcztcbiAgZGVsZXRlIHBhY2thZ2VKc29uLmF1dGhvcjtcbiAgZGVsZXRlIHBhY2thZ2VKc29uLmNvbnRyaWJ1dG9ycztcbiAgZGVsZXRlIHBhY2thZ2VKc29uLnJlcG9zaXRvcnk7XG4gIGRlbGV0ZSBwYWNrYWdlSnNvbi5ob21lcGFnZTtcbiAgZGVsZXRlIHBhY2thZ2VKc29uLmJ1Z3M7XG5cbiAgdHJ5IHtcbiAgICAvLyBVcGRhdGUgcGFja2FnZS5qc29uXG4gICAgc2V0UGFja2FnZUpzb24ocGFja2FnZUpzb24sIHBhY2thZ2VQYXRoKTtcblxuICAgIC8vIFVwZGF0ZSBSRUFETUVcbiAgICBjb25zdCByZWFkbWVQYXRoOiBzdHJpbmcgPSBgJHthcHBQYXRofS9SRUFETUUubWRgO1xuICAgIHdyaXRlRmlsZVN5bmMocmVhZG1lUGF0aCwgYCMgJHthcHBOYW1lfWApO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYoaW5zdGFsbCkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0luc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uJyk7XG5cbiAgICAvLyBDaGFuZ2UgdG8gdGhlIGFwcCBkaXJlY3RvcnlcbiAgICBwcm9jZXNzLmNoZGlyKGFwcFBhdGgpO1xuXG4gICAgLy8gSW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EocGFja2FnZU1hbmFnZXIsIFsnaW5zdGFsbCddLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICAgIHN0ZGlvOiAnaW5oZXJpdCdcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBkZXBlbmRlbmNpZXMhJyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMuJyk7XG5cbiAgICAgIC8vIEtpbGwgcHJvY2Vzc1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICAvLyBLaWxsIHByb2Nlc3NcbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwibmFtZXMiOlsiZXhlY2EiLCJyZW5hbWVTeW5jIiwid3JpdGVGaWxlU3luYyIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIkxleENvbmZpZyIsImNyZWF0ZVNwaW5uZXIiLCJnZXRQYWNrYWdlSnNvbiIsInNldFBhY2thZ2VKc29uIiwiZ2V0RGlyTmFtZSIsImxvZyIsImluaXQiLCJhcHBOYW1lIiwicGFja2FnZU5hbWUiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJpbnN0YWxsIiwicGFja2FnZU1hbmFnZXIiLCJjbWRQYWNrYWdlTWFuYWdlciIsInF1aWV0IiwidHlwZXNjcmlwdCIsImN3ZCIsInByb2Nlc3MiLCJzcGlubmVyIiwic3RhcnQiLCJ0bXBQYXRoIiwiYXBwUGF0aCIsImRpck5hbWUiLCJkbnBQYXRoIiwicGFyc2VDb25maWciLCJjb25maWdQYWNrYWdlTWFuYWdlciIsInVzZVR5cGVzY3JpcHQiLCJjb25maWdUeXBlc2NyaXB0IiwiY29uZmlnIiwidW5kZWZpbmVkIiwiYXBwTW9kdWxlIiwic3VjY2VlZCIsImVycm9yIiwiY29uc29sZSIsImZhaWwiLCJfZXJyb3IiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VKc29uIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidmVyc2lvbiIsImtleXdvcmRzIiwiYXV0aG9yIiwiY29udHJpYnV0b3JzIiwicmVwb3NpdG9yeSIsImhvbWVwYWdlIiwiYnVncyIsInJlYWRtZVBhdGgiLCJtZXNzYWdlIiwiY2hkaXIiLCJlbmNvZGluZyIsInN0ZGlvIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQzdDLFNBQVFDLFdBQVdDLFdBQVcsUUFBTyxPQUFPO0FBRTVDLFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLGNBQWMsUUFBTyxxQkFBcUI7QUFDakYsU0FBUUMsVUFBVSxRQUFPLHNCQUFzQjtBQUMvQyxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBWXZDLE9BQU8sTUFBTUMsT0FBTyxPQUNsQkMsU0FDQUMsYUFDQUMsS0FDQUMsV0FBeUIsSUFBTyxDQUFBLENBQUMsQ0FBQSxDQUFFO0lBRW5DLE1BQU0sRUFBQ0MsVUFBVSxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsZ0JBQWdCQyxpQkFBaUIsRUFBRUMsS0FBSyxFQUFFQyxVQUFVLEVBQUMsR0FBR1A7SUFDekYsTUFBTVEsTUFBY0MsUUFBUUQsR0FBRztJQUUvQixVQUFVO0lBQ1YsTUFBTUUsVUFBVWxCLGNBQWNjO0lBRTlCLCtDQUErQztJQUMvQ1YsSUFBSSxHQUFHTSxRQUFRLGlDQUFpQyxDQUFDLEVBQUUsUUFBUUk7SUFDM0RJLFFBQVFDLEtBQUssQ0FBQztJQUNkLE1BQU1DLFVBQWtCdEIsWUFBWWtCLEtBQUs7SUFDekMsTUFBTUssVUFBa0J2QixZQUFZa0IsS0FBSyxDQUFDLEVBQUUsRUFBRVYsU0FBUztJQUN2RCxNQUFNZ0IsVUFBVW5CO0lBQ2hCLE1BQU1vQixVQUFrQnpCLFlBQVl3QixTQUFTO0lBRTdDLDJCQUEyQjtJQUMzQixNQUFNdkIsVUFBVXlCLFdBQVcsQ0FBQ2hCO0lBQzVCLE1BQU0sRUFBQ0ksZ0JBQWdCYSxvQkFBb0IsRUFBRUMsZUFBZUMsZ0JBQWdCLEVBQUMsR0FBRzVCLFVBQVU2QixNQUFNO0lBQ2hHLE1BQU1oQixpQkFBeUJDLHFCQUFxQlksd0JBQXdCO0lBQzVFLE1BQU1DLGdCQUF5QlgsZUFBZWMsWUFBWWQsYUFBYVksb0JBQW9CO0lBRTNGLElBQUlHLFlBQW9CdkI7SUFFeEIsc0NBQXNDO0lBQ3RDLElBQUcsQ0FBQ3VCLFdBQVc7UUFDYixJQUFHSixlQUFlO1lBQ2hCSSxZQUFZO1FBQ2QsT0FBTztZQUNMQSxZQUFZO1FBQ2Q7SUFDRjtJQUVBLElBQUk7UUFDRixNQUFNcEMsTUFBTTZCLFNBQVM7WUFBQ087WUFBV1Y7U0FBUSxFQUFFLENBQUM7UUFFNUMsaUNBQWlDO1FBQ2pDRixRQUFRYSxPQUFPLENBQUM7SUFDbEIsRUFBRSxPQUFNQyxPQUFPO1FBQ2JDLFFBQVE3QixHQUFHLENBQUMsU0FBUzRCO1FBQ3JCNUIsSUFBSSxDQUFDLEVBQUUsRUFBRU0sUUFBUSx1Q0FBdUMsRUFBRW9CLFVBQVUsaUVBQWlFLENBQUMsRUFBRSxTQUFTaEI7UUFFakosZ0NBQWdDO1FBQ2hDSSxRQUFRZ0IsSUFBSSxDQUFDO1FBRWIsZUFBZTtRQUNmekIsU0FBUztRQUNULE9BQU87SUFDVDtJQUVBLGlDQUFpQztJQUNqQyxJQUFJO1FBQ0ZkLFdBQVcsR0FBR3lCLFFBQVEsQ0FBQyxFQUFFVSxXQUFXLEVBQUVUO0lBQ3hDLEVBQUUsT0FBTWMsUUFBUTtRQUNkL0IsSUFBSSxDQUFDLEVBQUUsRUFBRU0sUUFBUSxtQ0FBbUMsRUFBRW9CLFVBQVUsa0NBQWtDLENBQUMsRUFBRSxTQUFTaEI7UUFDOUdMLFNBQVM7UUFDVCxPQUFPO0lBQ1Q7SUFFQSx5QkFBeUI7SUFDekIsTUFBTTJCLGNBQXNCLEdBQUdmLFFBQVEsYUFBYSxDQUFDO0lBQ3JELE1BQU1nQixjQUFjcEMsZUFBZW1DO0lBQ25DQyxZQUFZQyxJQUFJLEdBQUdoQztJQUNuQitCLFlBQVlFLFdBQVcsR0FBRyxHQUFHN0IsUUFBUSxZQUFZLENBQUM7SUFDbEQyQixZQUFZRyxPQUFPLEdBQUc7SUFDdEIsT0FBT0gsWUFBWUksUUFBUTtJQUMzQixPQUFPSixZQUFZSyxNQUFNO0lBQ3pCLE9BQU9MLFlBQVlNLFlBQVk7SUFDL0IsT0FBT04sWUFBWU8sVUFBVTtJQUM3QixPQUFPUCxZQUFZUSxRQUFRO0lBQzNCLE9BQU9SLFlBQVlTLElBQUk7SUFFdkIsSUFBSTtRQUNGLHNCQUFzQjtRQUN0QjVDLGVBQWVtQyxhQUFhRDtRQUU1QixnQkFBZ0I7UUFDaEIsTUFBTVcsYUFBcUIsR0FBRzFCLFFBQVEsVUFBVSxDQUFDO1FBQ2pEekIsY0FBY21ELFlBQVksQ0FBQyxFQUFFLEVBQUV6QyxTQUFTO0lBQzFDLEVBQUUsT0FBTTBCLE9BQU87UUFDYjVCLElBQUksQ0FBQyxFQUFFLEVBQUVNLFFBQVEsUUFBUSxFQUFFc0IsTUFBTWdCLE9BQU8sRUFBRSxFQUFFLFNBQVNsQztRQUNyREwsU0FBUztRQUNULE9BQU87SUFDVDtJQUVBLElBQUdFLFNBQVM7UUFDVk8sUUFBUUMsS0FBSyxDQUFDO1FBRWQsOEJBQThCO1FBQzlCRixRQUFRZ0MsS0FBSyxDQUFDNUI7UUFFZCx1QkFBdUI7UUFDdkIsSUFBSTtZQUNGLE1BQU0zQixNQUFNa0IsZ0JBQWdCO2dCQUFDO2FBQVUsRUFBRTtnQkFDdkNzQyxVQUFVO2dCQUNWQyxPQUFPO1lBQ1Q7WUFFQSxlQUFlO1lBQ2ZqQyxRQUFRYSxPQUFPLENBQUM7UUFDbEIsRUFBRSxPQUFNQyxPQUFPO1lBQ2Isd0JBQXdCO1lBQ3hCNUIsSUFBSSxDQUFDLEVBQUUsRUFBRU0sUUFBUSxRQUFRLEVBQUVzQixNQUFNZ0IsT0FBTyxFQUFFLEVBQUUsU0FBU2xDO1lBRXJELGVBQWU7WUFDZkksUUFBUWdCLElBQUksQ0FBQztZQUViLGVBQWU7WUFDZnpCLFNBQVM7WUFDVCxPQUFPO1FBQ1Q7SUFDRjtJQUVBLGVBQWU7SUFDZkEsU0FBUztJQUNULE9BQU87QUFDVCxFQUFFIn0=
|
|
@@ -16,4 +16,4 @@ export const linked = async (cmd, callback = ()=>({}))=>{
|
|
|
16
16
|
return Promise.resolve(0);
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW5rL2xpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7TGV4Q29uZmlnfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjaGVja0xpbmtlZE1vZHVsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW5rL2xpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7TGV4Q29uZmlnfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjaGVja0xpbmtlZE1vZHVsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTGlua0NhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKT0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBsaW5rZWQgPSBhc3luYyAoY21kOiBMaW5rT3B0aW9ucywgY2FsbGJhY2s6IExpbmtDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBxdWlldH0gPSBjbWQ7XG5cbiAgLy8gRGlzcGxheSBzdGF0dXNcbiAgbG9nKGAke2NsaU5hbWV9IGNoZWNraW5nIGZvciBsaW5rZWQgbW9kdWxlcy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIEdldCBjdXN0b20gY29uZmlndXJhdGlvblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICAvLyBDaGVjayBmb3IgbGlua2VkIG1vZHVsZXNcbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDApO1xufTsiXSwibmFtZXMiOlsiTGV4Q29uZmlnIiwiY2hlY2tMaW5rZWRNb2R1bGVzIiwibG9nIiwibGlua2VkIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwicXVpZXQiLCJwYXJzZUNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGtCQUFrQixRQUFPLHFCQUFxQjtBQUN0RCxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBU3ZDLE9BQU8sTUFBTUMsU0FBUyxPQUFPQyxLQUFrQkMsV0FBeUIsSUFBTyxDQUFBLENBQUMsQ0FBQSxDQUFFO0lBQ2hGLE1BQU0sRUFBQ0MsVUFBVSxLQUFLLEVBQUVDLEtBQUssRUFBQyxHQUFHSDtJQUVqQyxpQkFBaUI7SUFDakJGLElBQUksR0FBR0ksUUFBUSwrQkFBK0IsQ0FBQyxFQUFFLFFBQVFDO0lBRXpELDJCQUEyQjtJQUMzQixNQUFNUCxVQUFVUSxXQUFXLENBQUNKO0lBRTVCLDJCQUEyQjtJQUMzQkg7SUFDQUksU0FBUztJQUNULE9BQU9JLFFBQVFDLE9BQU8sQ0FBQztBQUN6QixFQUFFIn0=
|
|
@@ -952,4 +952,4 @@ export default {
|
|
|
952
952
|
}
|
|
953
953
|
};
|
|
954
954
|
|
|
955
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW50L2xpbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGV4dG5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7cmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmxldCBjdXJyZW50RmlsZW5hbWU6IHN0cmluZztcbmxldCBjdXJyZW50RGlybmFtZTogc3RyaW5nO1xuXG50cnkge1xuICBjdXJyZW50RmlsZW5hbWUgPSBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKScpO1xuICBjdXJyZW50RGlybmFtZSA9IGRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcbn0gY2F0Y2h7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FjaGVGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZUxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudkluZm8/OiBib29sZWFuO1xuICByZWFkb25seSBleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeERyeVJ1bj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeFR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSBpbml0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V2FybmluZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vQ29sb3I/OiBib29sZWFuO1xuICByZWFkb25seSBub0VzbGludHJjPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9JZ25vcmU/OiBib29sZWFuO1xuICByZWFkb25seSBub0lubGluZUNvbmZpZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyc2VyT3B0aW9ucz86IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luPzogc3RyaW5nO1xuICByZWFkb25seSBwcmludENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDb21tZW50cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlc2Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkaW4/OiBib29sZWFuO1xuICByZWFkb25seSBzdGRpbkZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW50Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5pbnRlcmZhY2UgQ29uZmlnUmVzdWx0IHtcbiAgY29uZmlnUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbmZpZzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyA9ICh1c2VUeXBlc2NyaXB0OiBib29sZWFuLCBjd2Q6IHN0cmluZyk6IENvbmZpZ1Jlc3VsdCA9PiB7XG4gIC8vIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggaW5zdGVhZCBvZiBjcmVhdGluZyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcbiAgY29uc3Qgb3JpZ2luYWxDb25maWcgPSBudWxsO1xuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBDb21tb25KUyBtb2R1bGUgdGhhdCByZXF1aXJlcyBMZXgncyBFU0xpbnQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IEVTTGludCBjb25maWcgZ2VuZXJhdGVkIGJ5IExleFxuY29uc3QgbGV4Q29uZmlnID0gcmVxdWlyZSgnQG5sYWJzL2xleC9lc2xpbnQuY29uZmlnLm1qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxleENvbmZpZztgO1xuXG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGgsXG4gICAgb3JpZ2luYWxDb25maWdcbiAgfTtcbn07XG5cbmNvbnN0IGRldGVjdFR5cGVTY3JpcHQgPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuanNvbicpKTtcblxuLyoqXG4gKiBFbnN1cmUgcGFja2FnZS5qc29uIGhhcyB0eXBlOiBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gKi9cbmNvbnN0IGVuc3VyZU1vZHVsZVR5cGUgPSAoY3dkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICAgICAgLy8gSWYgdHlwZSBpcyBub3Qgc2V0IHRvIG1vZHVsZSwgd2FybiBpbnN0ZWFkIG9mIGF1dG8tbW9kaWZ5aW5nXG4gICAgICBpZihwYWNrYWdlSnNvbi50eXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICBsb2coJ1dhcm5pbmc6IHBhY2thZ2UuanNvbiBzaG91bGQgaGF2ZSBcInR5cGVcIjogXCJtb2R1bGVcIiBmb3IgRVNNIHN1cHBvcnQuIFBsZWFzZSBhZGQgdGhpcyBtYW51YWxseS4nLCAnd2FybicsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaW5zdGFsbERlcGVuZGVuY2llcyA9IGFzeW5jIChjd2Q6IHN0cmluZywgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiwgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGxvZygnVXNpbmcgVHlwZVNjcmlwdCBFU0xpbnQgZnJvbSBMZXguLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1VzaW5nIEVTTGludCBmcm9tIExleC4uLicsICdpbmZvJywgcXVpZXQpO1xuICB9XG59O1xuXG5jb25zdCBydW5Fc2xpbnRXaXRoTGV4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGNsaU5hbWU6IHN0cmluZyxcbiAgZml4OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgdXNlVHlwZXNjcmlwdDogYm9vbGVhbixcbiAgY2FwdHVyZU91dHB1dD86IChvdXRwdXQ6IHN0cmluZykgPT4gdm9pZFxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLm1qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QgaGFzUHJvamVjdENvbmZpZyA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpIHx8IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcyk7XG4gICAgY29uc3QgaGFzTGV4Q29uZmlnRXNsaW50ID0gTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgJiYgT2JqZWN0LmtleXMoTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQpLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnZXNsaW50LmNvbmZpZy5tanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLnRzJylcbiAgICBdO1xuXG4gICAgbGV0IGxleENvbmZpZ1BhdGggPSAnJztcblxuICAgIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgbGV4Q29uZmlnUGF0aCA9IHBhdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb25maWdQYXRoID0gJyc7XG4gICAgbGV0IHRlbXBDb25maWdQYXRoID0gJyc7XG5cbiAgICAvLyBQcmlvcml0eTpcbiAgICAvLyAxLiBQcm9qZWN0IGVzbGludC5jb25maWcgZmlsZXNcbiAgICAvLyAyLiBFU0xpbnQgY29uZmlnIGluIGxleC5jb25maWcuKiBmaWxlXG4gICAgLy8gMy4gTGV4J3MgZGVmYXVsdCBlc2xpbnQuY29uZmlnLm1qc1xuICAgIC8vIDQuIENyZWF0ZSBhIHRlbXBvcmFyeSBjb25maWcgZmlsZVxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIGNvbmZpZ1BhdGggPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBVc2luZyBwcm9qZWN0IEVTTGludCBjb25maWcgZmlsZTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihoYXNMZXhDb25maWdFc2xpbnQpIHtcbiAgICAgIC8vIFdoZW4gdXNpbmcgbGV4LmNvbmZpZy5lc2xpbnQsIGNyZWF0ZSBhIHRlbXBvcmFyeSBKUyBjb25maWcgZmlsZSAobm90IEpTT04pXG4gICAgICAvLyB0byBhdm9pZCBFU00gSlNPTiBpbXBvcnQgaXNzdWVzXG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1lc2xpbnQuY2pzJyk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIENvbW1vbkpTIG1vZHVsZSB0aGF0IGV4dGVuZHMgTGV4J3MgZXNsaW50IGNvbmZpZ1xuICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IGAvLyBUZW1wb3JhcnkgRVNMaW50IGNvbmZpZyBnZW5lcmF0ZWQgYnkgTGV4XG5jb25zdCBsZXhDb25maWcgPSByZXF1aXJlKCdAbmxhYnMvbGV4L2VzbGludC5jb25maWcubWpzJyk7XG5jb25zdCB1c2VyQ29uZmlnID0gJHtKU09OLnN0cmluZ2lmeShMZXhDb25maWcuY29uZmlnLmVzbGludCwgbnVsbCwgMil9O1xuXG4vLyBNZXJnZSBMZXgncyBjb25maWcgd2l0aCB1c2VyIGNvbmZpZ1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC4uLmxleENvbmZpZ1xufTtgO1xuXG4gICAgICB3cml0ZUZpbGVTeW5jKHRlbXBDb25maWdQYXRoLCBjb25maWdDb250ZW50LCAndXRmOCcpO1xuICAgICAgY29uZmlnUGF0aCA9IHRlbXBDb25maWdQYXRoO1xuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIEVTTGludCBjb25maWcgZnJvbSBsZXguY29uZmlnLiogZmlsZSB2aWEgdGVtcCBmaWxlOiAke3RlbXBDb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihsZXhDb25maWdQYXRoICYmIGV4aXN0c1N5bmMobGV4Q29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbmZpZ1BhdGggPSBsZXhDb25maWdQYXRoO1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBVc2luZyBMZXggRVNMaW50IGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBkZWZhdWx0IGNvbmZpZyBmaWxlIGlmIG5vIG90aGVyIGNvbmZpZyBpcyBmb3VuZFxuICAgICAgdGVtcENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICcubGV4LXRlbXAtZGVmYXVsdC1lc2xpbnQuY2pzJyk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIGJhc2ljIEVTTGludCBjb25maWdcbiAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IGRlZmF1bHQgRVNMaW50IGNvbmZpZyBnZW5lcmF0ZWQgYnkgTGV4XG5jb25zdCBsZXhDb25maWcgPSByZXF1aXJlKCdAbmxhYnMvbGV4L2VzbGludC5jb25maWcubWpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbGV4Q29uZmlnO2A7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmModGVtcENvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBjb25maWdQYXRoID0gdGVtcENvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgQ3JlYXRlZCB0ZW1wb3JhcnkgZGVmYXVsdCBFU0xpbnQgY29uZmlnIGF0OiAke3RlbXBDb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKCdObyBFU0xpbnQgY29uZmlndXJhdGlvbiBmb3VuZC4gVXNpbmcgTGV4IGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlc2xpbnRCaW5hcnkgPSByZXNvbHZlQmluYXJ5UGF0aCgnZXNsaW50JywgJ2VzbGludCcpO1xuXG4gICAgaWYoIWVzbGludEJpbmFyeSkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFU0xpbnQgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gQmFzZSBFU0xpbnQgYXJndW1lbnRzXG4gICAgY29uc3QgYmFzZUVzbGludEFyZ3MgPSBbXG4gICAgICAuLi4oZml4ID8gWyctLWZpeCddIDogW10pLFxuICAgICAgLi4uKGRlYnVnID8gWyctLWRlYnVnJ10gOiBbXSksXG4gICAgICAnLS1uby1lcnJvci1vbi11bm1hdGNoZWQtcGF0dGVybicsXG4gICAgICAnLS1uby13YXJuLWlnbm9yZWQnXG4gICAgXTtcblxuICAgIC8vIEFkZCBjb25maWcgcGF0aFxuICAgIGNvbnN0IGNvbmZpZ0FyZ3MgPSBjb25maWdQYXRoID8gWyctLWNvbmZpZycsIGNvbmZpZ1BhdGhdIDogW107XG5cbiAgICBjb25zdCBqc1Jlc3VsdCA9IGF3YWl0IGV4ZWNhKGVzbGludEJpbmFyeSwgW1xuICAgICAgJ3NyYy8qKi8qLntqcyxqc3h9JyxcbiAgICAgIC4uLmNvbmZpZ0FyZ3MsXG4gICAgICAuLi5iYXNlRXNsaW50QXJnc1xuICAgIF0sIHtcbiAgICAgIGN3ZCxcbiAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcblxuICAgIGlmKGpzUmVzdWx0LnN0ZG91dCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKGpzUmVzdWx0LnN0ZG91dCk7XG4gICAgICBpZihjYXB0dXJlT3V0cHV0KSB7XG4gICAgICAgIGNhcHR1cmVPdXRwdXQoanNSZXN1bHQuc3Rkb3V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihqc1Jlc3VsdC5zdGRlcnIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGpzUmVzdWx0LnN0ZGVycik7XG4gICAgICBpZihjYXB0dXJlT3V0cHV0KSB7XG4gICAgICAgIGNhcHR1cmVPdXRwdXQoanNSZXN1bHQuc3RkZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdHNSZXN1bHQ6IGFueSA9IHtleGl0Q29kZTogMCwgc3RkZXJyOiAnJywgc3Rkb3V0OiAnJ307XG4gICAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgICAgdHNSZXN1bHQgPSBhd2FpdCBleGVjYShlc2xpbnRCaW5hcnksIFtcbiAgICAgICAgJ3NyYy8qKi8qLnt0cyx0c3h9JyxcbiAgICAgICAgLi4uY29uZmlnQXJncyxcbiAgICAgICAgLi4uYmFzZUVzbGludEFyZ3NcbiAgICAgIF0sIHtcbiAgICAgICAgY3dkLFxuICAgICAgICByZWplY3Q6IGZhbHNlLFxuICAgICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgICAgc3RkaW86ICdwaXBlJ1xuICAgICAgfSk7XG5cbiAgICAgIGlmKHRzUmVzdWx0LnN0ZG91dCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZyh0c1Jlc3VsdC5zdGRvdXQpO1xuICAgICAgfVxuXG4gICAgICBpZih0c1Jlc3VsdC5zdGRlcnIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcih0c1Jlc3VsdC5zdGRlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIHRlbXAgZmlsZSBpZiBjcmVhdGVkXG4gICAgaWYodGVtcENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyh0ZW1wQ29uZmlnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHVubGlua1N5bmModGVtcENvbmZpZ1BhdGgpO1xuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgUmVtb3ZlZCB0ZW1wb3JhcnkgRVNMaW50IGNvbmZpZyBhdCAke3RlbXBDb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBlcnJvcnMgd2hlbiBjbGVhbmluZyB1cFxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgRmFpbGVkIHRvIHJlbW92ZSB0ZW1wb3JhcnkgRVNMaW50IGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXNsaW50Tm90Rm91bmQgPSBqc1Jlc3VsdC5zdGRlcnI/LmluY2x1ZGVzKCdjb21tYW5kIG5vdCBmb3VuZCcpIHx8IGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ2VzbGludDogY29tbWFuZCBub3QgZm91bmQnKTtcbiAgICBpZihlc2xpbnROb3RGb3VuZCkge1xuICAgICAgc3Bpbm5lci5mYWlsKCdFU0xpbnQgbm90IGZvdW5kIScpO1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBMZXgncyBFU0xpbnQgYmluYXJ5IG5vdCBmb3VuZC4gUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYoanNSZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgdHNSZXN1bHQuZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnTGludGluZyBjb21wbGV0ZWQhJyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBub0ZpbGVzRm91bmQgPVxuICAgICAgKGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSB8fCBqc1Jlc3VsdC5zdGRvdXQ/LmluY2x1ZGVzKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykpICYmXG4gICAgICAoIXVzZVR5cGVzY3JpcHQgfHwgdHNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpIHx8IHRzUmVzdWx0LnN0ZG91dD8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSk7XG5cbiAgICBpZihub0ZpbGVzRm91bmQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnTm8gZmlsZXMgZm91bmQgdG8gbGludCcpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHNwaW5uZXIuZmFpbCgnTGludGluZyBmYWlsZWQhJyk7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFU0xpbnQgZm91bmQgaXNzdWVzIGluIHlvdXIgY29kZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgcmV0dXJuIDE7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0xpbnRpbmcgZmFpbGVkIScpO1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuY29uc3QgYXBwbHlBSUZpeCA9IGFzeW5jIChcbiAgY3dkOiBzdHJpbmcsXG4gIGVycm9yczogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcbiAgc3Bpbm5lci5zdGFydCgnVXNpbmcgQUkgdG8gZml4IHJlbWFpbmluZyBsaW50IGlzc3Vlcy4uLicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZUVycm9yTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICAgIGNvbnN0IGxpbmVzID0gZXJyb3JzLnNwbGl0KCdcXG4nKTtcbiAgICBsZXQgY3VycmVudEZpbGUgPSAnJztcblxuICAgIGZvcihjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBpZihsaW5lLm1hdGNoKC9eKFxcL3xbQS1aXTpcXFxcKS4qP1xcLihqc3xqc3h8dHN8dHN4KSQvKSkge1xuICAgICAgICBjdXJyZW50RmlsZSA9IGxpbmUudHJpbSgpO1xuICAgICAgICBpZighZmlsZUVycm9yTWFwLmhhcyhjdXJyZW50RmlsZSkpIHtcbiAgICAgICAgICBmaWxlRXJyb3JNYXAuc2V0KGN1cnJlbnRGaWxlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihjdXJyZW50RmlsZSAmJiBsaW5lLnRyaW0oKSAmJiBsaW5lLm1hdGNoKC9cXHMrXFxkKzpcXGQrXFxzKyhlcnJvcnx3YXJuaW5nKVxccysvKSkge1xuICAgICAgICBjb25zdCBlcnJvckFycmF5ID0gZmlsZUVycm9yTWFwLmdldChjdXJyZW50RmlsZSk7XG4gICAgICAgIGlmKGVycm9yQXJyYXkpIHtcbiAgICAgICAgICBlcnJvckFycmF5LnB1c2gobGluZS50cmltKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZUVycm9yTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGxvZygnVXNpbmcgYWx0ZXJuYXRpdmUgZXJyb3IgcGFyc2luZyBzdHJhdGVneScsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBjb25zdCBzZWN0aW9ucyA9IGVycm9ycy5zcGxpdCgnXFxuXFxuJyk7XG5cbiAgICAgIGZvcihjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgIGlmKHNlY3Rpb24udHJpbSgpID09PSAnJykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZXMgPSBzZWN0aW9uLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBsaW5lc1swXS50cmltKCk7XG5cbiAgICAgICAgaWYoZmlsZVBhdGgubWF0Y2goL1xcLihqc3xqc3h8dHN8dHN4KSQvKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoZmlsZVBhdGgsIFtdKTtcblxuICAgICAgICAgIGZvcihsZXQgaSA9IDE7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYobGluZXNbaV0udHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgICBmaWxlRXJyb3JNYXAuZ2V0KGZpbGVQYXRoKT8ucHVzaChsaW5lc1tpXS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGZpbGVFcnJvck1hcC5zaXplID09PSAwKSB7XG4gICAgICBsb2coJ1VzaW5nIGRpcmVjdCBmaWxlIHBhdGggZXh0cmFjdGlvbicsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBjb25zdCBmaWxlUGF0aFJlZ2V4ID0gLyg/OlxcL3xbQS1aXTpcXFxcKSg/OlteOlxcbl0rXFwvKSpbXjpcXG5dK1xcLihqc3xqc3h8dHN8dHN4KS9nO1xuICAgICAgY29uc3QgZmlsZVBhdGhzID0gZXJyb3JzLm1hdGNoKGZpbGVQYXRoUmVnZXgpIHx8IFtdO1xuXG4gICAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgZmlsZVBhdGhzKSB7XG4gICAgICAgIGlmKCFmaWxlRXJyb3JNYXAuaGFzKGZpbGVQYXRoKSAmJiBleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoZmlsZVBhdGgsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBrbm93bkZpbGVzID0gW1xuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvY3JlYXRlL2NoYW5nZWxvZy50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvdXRpbHMvYWlTZXJ2aWNlLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy91dGlscy9hcHAudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3dkLCAnc3JjL3V0aWxzL3JlYWN0U2hpbS50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvY29tbWFuZHMvbGludC9hdXRvZml4LmpzJylcbiAgICAgIF07XG5cbiAgICAgIGZvcihjb25zdCBmaWxlIG9mIGtub3duRmlsZXMpIHtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhmaWxlKSAmJiAhZmlsZUVycm9yTWFwLmhhcyhmaWxlKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoZmlsZSwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVFcnJvck1hcC5rZXlzKCkpIHtcbiAgICAgIGlmKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICBsb2coYEZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbG9nKGBQcm9jZXNzaW5nIGZpbGU6ICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IGlzQ3Vyc29ySURFID0gTGV4Q29uZmlnLmNvbmZpZy5haT8ucHJvdmlkZXIgPT09ICdjdXJzb3InIHx8IHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJztcblxuICAgICAgaWYoaXNDdXJzb3JJREUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwcm9tcHQgPSBgRml4IGFsbCBFU0xpbnQgZXJyb3JzIGluIHRoaXMgZmlsZS4gRm9jdXMgb246XG4xLiBGaXhpbmcgbmFtaW5nIGNvbnZlbnRpb25zXG4yLiBGaXhpbmcgc29ydC1rZXlzIGlzc3Vlc1xuMy4gUmVwbGFjaW5nIGNvbnNvbGUubG9nIHdpdGggbG9nIHV0aWxpdHlcbjQuIEZpeGluZyBuby1wbHVzcGx1cyBpc3N1ZXNcbjUuIEZpeGluZyB1bm5lY2Vzc2FyeSBlc2NhcGUgY2hhcmFjdGVyc1xuNi4gRml4aW5nIG90aGVyIEVTTGludCBlcnJvcnNcblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTOlxuLSBPTkxZIGZpeCB0aGUgc3BlY2lmaWMgbGluZXMgd2l0aCBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBtb2RpZnkgYW55IG90aGVyIGxpbmVzIG9mIGNvZGVcbi0gRE8gTk9UIHJlbW92ZSBsaW5lIGJyZWFrcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGNhdXNpbmcgRVNMaW50IGVycm9yc1xuLSBETyBOT1QgY29uZGVuc2UgbXVsdGktbGluZSBzdHJ1Y3R1cmVzIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBhbGwgZXhpc3RpbmcgbGluZSBicmVha3MgYW5kIGZvcm1hdHRpbmcgdGhhdCBpcyBub3QgY2F1c2luZyBlcnJvcnNcblxuU1BFQ0lGSUMgRk9STUFUVElORyBSVUxFUzpcbi0gTWFpbnRhaW4gcHJvcGVyIGluZGVudGF0aW9uICgyIHNwYWNlcylcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbiBhbmQgdGhlaXIgbWVtYmVyc1xuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gbWV0aG9kc1xuLSBFbnN1cmUgdGhlcmUgaXMgYSBsaW5lIGJyZWFrIGFmdGVyIG9wZW5pbmcgYnJhY2VzIGZvciBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgbWV0aG9kc1xuLSBETyBOT1QgcGxhY2UgY2xhc3MvaW50ZXJmYWNlIHByb3BlcnRpZXMgb3IgbWV0aG9kcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBvcGVuaW5nIGJyYWNlXG4tIFByZXNlcnZlIGVtcHR5IGxpbmVzIGJldHdlZW4gbG9naWNhbCBjb2RlIGJsb2Nrc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIGltcG9ydHMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgbXVsdGktbGluZSBvYmplY3QvYXJyYXkgZGVjbGFyYXRpb25zIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG5cblNPUlQtS0VZUyBSVUxFIChISUdIRVNUIFBSSU9SSVRZKTpcbi0gQWxsIG9iamVjdCBsaXRlcmFsIGtleXMgTVVTVCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4tIFRoaXMgYXBwbGllcyB0byBBTEwgb2JqZWN0cyBpbiB0aGUgZmlsZSwgbm90IGp1c3QgdGhvc2Ugd2l0aCBleHBsaWNpdCBzb3J0LWtleXMgZXJyb3JzXG4tIEV4YW1wbGU6IHtiOiAyLCBhOiAxLCBjOiAzfSBzaG91bGQgYmVjb21lIHthOiAxLCBiOiAyLCBjOiAzfVxuLSBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZm9ybWF0dGluZyBhbmQgbGluZSBicmVha3Mgd2hlbiBzb3J0aW5nXG5cbkV4YW1wbGUgb2YgQ09SUkVDVCBmb3JtYXR0aW5nIChETyBOT1QgQ0hBTkdFKTpcbmV4cG9ydCBjbGFzcyBVc2VyQ29uc3RhbnRzIHtcbiAgc3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHtcbiAgdGhpcy5DdXN0b21BZGFwdGVyID0gQ3VzdG9tQWRhcHRlcjtcbiAgdGhpcy5mbHV4ID0gZmx1eDtcbn1cblxuaW1wb3J0IHtcbiAgYXBwLFxuICBldmVudHMsXG4gIGltYWdlcyxcbiAgbG9jYXRpb25zLFxuICBtZXNzYWdlcyxcbiAgcG9zdHMsXG4gIHRhZ3MsXG4gIHVzZXJzLFxuICB3ZWJzb2NrZXRcbn0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7XG4gIGFwaUtleTogJ3ZhbHVlJyxcbiAgYmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJyxcbiAgdGltZW91dDogNTAwMFxufTtcblxuRXhhbXBsZSBvZiBJTkNPUlJFQ1QgZm9ybWF0dGluZyAoRklYIFRISVMpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge3N0YXRpYyByZWFkb25seSBBRERfSVRFTV9FUlJPUjogc3RyaW5nID0gJ1VTRVJfQUREX0lURU1fRVJST1InO1xuICBzdGF0aWMgcmVhZG9ubHkgT1RIRVJfQ09OU1RBTlQ6IHN0cmluZyA9ICdPVEhFUl9DT05TVEFOVCc7XG59XG5cbmNvbnN0cnVjdG9yKGZsdXg6IEZsdXhGcmFtZXdvcmssIEN1c3RvbUFkYXB0ZXI6IHR5cGVvZiBFdmVudCA9IEV2ZW50KSB7dGhpcy5DdXN0b21BZGFwdGVyID0gQ3VzdG9tQWRhcHRlcjtcbiAgdGhpcy5mbHV4ID0gZmx1eDt9XG5cbmltcG9ydCB7YXBwLCBldmVudHMsIGltYWdlcywgbG9jYXRpb25zLCBtZXNzYWdlcywgcG9zdHMsIHRhZ3MsIHVzZXJzLCB3ZWJzb2NrZXR9IGZyb20gJy4vc3RvcmVzJztcblxuY29uc3QgY29uZmlnID0ge2Jhc2VVcmw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScsIGFwaUtleTogJ3ZhbHVlJywgdGltZW91dDogNTAwMH07XG5cbkZpeCBPTkxZIHRoZSBzcGVjaWZpYyBFU0xpbnQgZXJyb3JzLiBSZXR1cm4gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBjb2RlLmA7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcHJvbXB0RmlsZSA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5jdXJzb3JfcHJvbXB0X3RlbXAudHh0Jyk7XG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHByb21wdEZpbGUsIHByb21wdCwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgLy8gVXNlIEN1cnNvciBDTEkgdG8gZml4IHRoZSBmaWxlXG4gICAgICAgICAgICBhd2FpdCBleGVjYSgnY3Vyc29yJywgWydlZGl0JywgJy0tZmlsZScsIGZpbGVQYXRoLCAnLS1wcm9tcHQtZmlsZScsIHByb21wdEZpbGVdLCB7XG4gICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RkaW86ICdwaXBlJ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHVubGlua1N5bmMocHJvbXB0RmlsZSk7XG4gICAgICAgICAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2coYEFwcGxpZWQgQ3Vyc29yIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfSBjYXRjaHtcbiAgICAgICAgICAgIGNvbnN0IHdhc01vZGlmaWVkID0gYXdhaXQgYXBwbHlEaXJlY3RGaXhlcyhmaWxlUGF0aCwgcXVpZXQpO1xuICAgICAgICAgICAgaWYod2FzTW9kaWZpZWQpIHtcbiAgICAgICAgICAgICAgbG9nKGBBcHBsaWVkIGRpcmVjdCBmaXhlcyB0byAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgRXJyb3IgdXNpbmcgQ3Vyc29yIEFJOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGF3YWl0IGFwcGx5RGlyZWN0Rml4ZXMoZmlsZVBhdGgsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd2FzTW9kaWZpZWQgPSBhd2FpdCBhcHBseURpcmVjdEZpeGVzKGZpbGVQYXRoLCBxdWlldCk7XG4gICAgICAgIGlmKHdhc01vZGlmaWVkKSB7XG4gICAgICAgICAgbG9nKGBBcHBsaWVkIGRpcmVjdCBmaXhlcyB0byAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUVycm9ycyA9IGZpbGVFcnJvck1hcC5nZXQoZmlsZVBhdGgpIHx8IFtdO1xuICAgICAgICBpZihmaWxlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qge2NhbGxBSVNlcnZpY2V9ID0gYXdhaXQgaW1wb3J0KCcuLi8uLi91dGlscy9haVNlcnZpY2UuanMnKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBGaXggdGhlIGZvbGxvd2luZyBFU0xpbnQgZXJyb3JzIGluIHRoaXMgY29kZTpcbiR7ZmlsZUVycm9ycy5qb2luKCdcXG4nKX1cblxuSGVyZSdzIHRoZSBjb2RlOlxuXFxgXFxgXFxgXG4ke2ZpbGVDb250ZW50fVxuXFxgXFxgXFxgXG5cbkNSSVRJQ0FMIFJFUVVJUkVNRU5UUzpcbi0gT05MWSBmaXggdGhlIHNwZWNpZmljIGxpbmVzIHdpdGggRVNMaW50IGVycm9yc1xuLSBETyBOT1QgbW9kaWZ5IGFueSBvdGhlciBsaW5lcyBvZiBjb2RlXG4tIERPIE5PVCByZW1vdmUgbGluZSBicmVha3MgdW5sZXNzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBjYXVzaW5nIEVTTGludCBlcnJvcnNcbi0gRE8gTk9UIGNvbmRlbnNlIG11bHRpLWxpbmUgc3RydWN0dXJlcyB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgYWxsIGV4aXN0aW5nIGxpbmUgYnJlYWtzIGFuZCBmb3JtYXR0aW5nIHRoYXQgaXMgbm90IGNhdXNpbmcgZXJyb3JzXG5cblNQRUNJRklDIEZPUk1BVFRJTkcgUlVMRVM6XG4tIE1haW50YWluIHByb3BlciBpbmRlbnRhdGlvbiAoMiBzcGFjZXMpXG4tIEtlZXAgbGluZSBicmVha3MgYmV0d2VlbiBjbGFzcy9pbnRlcmZhY2UgZGVjbGFyYXRpb24gYW5kIHRoZWlyIG1lbWJlcnNcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIG1ldGhvZHNcbi0gRW5zdXJlIHRoZXJlIGlzIGEgbGluZSBicmVhayBhZnRlciBvcGVuaW5nIGJyYWNlcyBmb3IgY2xhc3NlcywgaW50ZXJmYWNlcywgYW5kIG1ldGhvZHNcbi0gRE8gTk9UIHBsYWNlIGNsYXNzL2ludGVyZmFjZSBwcm9wZXJ0aWVzIG9yIG1ldGhvZHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgb3BlbmluZyBicmFjZVxuLSBQcmVzZXJ2ZSBlbXB0eSBsaW5lcyBiZXR3ZWVuIGxvZ2ljYWwgY29kZSBibG9ja3Ncbi0gUFJFU0VSVkUgbXVsdGktbGluZSBpbXBvcnRzIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG4tIFBSRVNFUlZFIG11bHRpLWxpbmUgb2JqZWN0L2FycmF5IGRlY2xhcmF0aW9ucyAtIGRvIG5vdCBjb25kZW5zZSB0aGVtIHRvIHNpbmdsZSBsaW5lc1xuXG5TT1JULUtFWVMgUlVMRSAoSElHSEVTVCBQUklPUklUWSk6XG4tIEFsbCBvYmplY3QgbGl0ZXJhbCBrZXlzIE1VU1QgYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5IGluIGFzY2VuZGluZyBvcmRlclxuLSBUaGlzIGFwcGxpZXMgdG8gQUxMIG9iamVjdHMgaW4gdGhlIGZpbGUsIG5vdCBqdXN0IHRob3NlIHdpdGggZXhwbGljaXQgc29ydC1rZXlzIGVycm9yc1xuLSBFeGFtcGxlOiB7YjogMiwgYTogMSwgYzogM30gc2hvdWxkIGJlY29tZSB7YTogMSwgYjogMiwgYzogM31cbi0gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGZvcm1hdHRpbmcgYW5kIGxpbmUgYnJlYWtzIHdoZW4gc29ydGluZ1xuXG5XSEFUIFRPIEZJWDpcbjEuIFNvcnRpbmcgYWxsIG9iamVjdCBrZXlzIGFscGhhYmV0aWNhbGx5IChzb3J0LWtleXMgcnVsZSkgLSBBTEwgb2JqZWN0cyBtdXN0IGhhdmUgc29ydGVkIGtleXNcbjIuIEZpeGluZyBuYW1pbmcgY29udmVudGlvbnMgLSBPTkxZIGZvciB2YXJpYWJsZXMvZnVuY3Rpb25zIHdpdGggbmFtaW5nIGVycm9yc1xuMy4gUmVwbGFjaW5nIGNvbnNvbGUubG9nIHdpdGggbG9nIHV0aWxpdHkgLSBPTkxZIGZvciBjb25zb2xlLmxvZyBzdGF0ZW1lbnRzXG40LiBGaXhpbmcgbm8tcGx1c3BsdXMgaXNzdWVzIC0gT05MWSBmb3IgKysvLS0gb3BlcmF0b3JzXG41LiBGaXhpbmcgdW5uZWNlc3NhcnkgZXNjYXBlIGNoYXJhY3RlcnMgLSBPTkxZIGZvciBlc2NhcGVkIGNoYXJhY3RlcnMgdGhhdCBkb24ndCBuZWVkIGVzY2FwaW5nXG42LiBQcm9wZXIgaW5kZW50YXRpb24gYW5kIHNwYWNpbmcgLSBPTkxZIHdoZXJlIHNwZWNpZmljYWxseSByZXF1aXJlZCBieSBlcnJvcnNcbjcuIFN0cmluZyBxdW90ZXMgY29uc2lzdGVuY3kgKHVzZSBzaW5nbGUgcXVvdGVzKSAtIE9OTFkgZm9yIHN0cmluZyBsaXRlcmFscyB3aXRoIHF1b3RlIGVycm9yc1xuOC4gSW1wb3J0IG9yZGVyIGFuZCBzcGFjaW5nIC0gT05MWSBmb3IgaW1wb3J0cyB3aXRoIG9yZGVyL3NwYWNpbmcgZXJyb3JzXG45LiBGdW5jdGlvbiBwYXJhbWV0ZXIgZm9ybWF0dGluZyAtIE9OTFkgZm9yIGZ1bmN0aW9ucyB3aXRoIHBhcmFtZXRlciBlcnJvcnNcbjEwLiBWYXJpYWJsZSBuYW1pbmcgY29udmVudGlvbnMgLSBPTkxZIGZvciB2YXJpYWJsZXMgd2l0aCBuYW1pbmcgZXJyb3JzXG4xMS4gTm8gdW51c2VkIHZhcmlhYmxlcyBvciBpbXBvcnRzIC0gT05MWSBmb3IgdW51c2VkIHZhcmlhYmxlcy9pbXBvcnRzXG4xMi4gQXZvaWRpbmcgbmVzdGVkIHRlcm5hcmllcyAtIE9OTFkgZm9yIG5lc3RlZCB0ZXJuYXJ5IGV4cHJlc3Npb25zXG4xMy4gQW55IG90aGVyIEVTTGludCBlcnJvcnMgLSBPTkxZIGZvciB0aGUgc3BlY2lmaWMgZXJyb3JzIGxpc3RlZCBhYm92ZVxuXG5XSEFUIE5PVCBUTyBGSVg6XG4tIERvIG5vdCBjaGFuZ2UgcHJvcGVybHkgZm9ybWF0dGVkIG11bHRpLWxpbmUgc3RydWN0dXJlc1xuLSBEbyBub3QgcmVtb3ZlIGxpbmUgYnJlYWtzIHRoYXQgYXJlIG5vdCBjYXVzaW5nIGVycm9yc1xuLSBEbyBub3QgY2hhbmdlIGluZGVudGF0aW9uIHRoYXQgaXMgYWxyZWFkeSBjb3JyZWN0XG4tIERvIG5vdCBtb2RpZnkgc3BhY2luZyB0aGF0IGlzIGFscmVhZHkgY29ycmVjdFxuLSBEbyBub3QgY29uZGVuc2UgcmVhZGFibGUgbXVsdGktbGluZSBjb2RlIHRvIHNpbmdsZSBsaW5lc1xuLSBEbyBub3QgbW9kaWZ5IGNvZGUgdGhhdCBpcyBub3QgbWVudGlvbmVkIGluIHRoZSBFU0xpbnQgZXJyb3JzXG5cbkV4YW1wbGUgb2YgQ09SUkVDVCBmb3JtYXR0aW5nIChETyBOT1QgQ0hBTkdFKTpcbmV4cG9ydCBjbGFzcyBVc2VyQ29uc3RhbnRzIHtcbiAgc3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHtcbiAgdGhpcy5DdXN0b21BZGFwdGVyID0gQ3VzdG9tQWRhcHRlcjtcbiAgdGhpcy5mbHV4ID0gZmx1eDtcbn1cblxuaW1wb3J0IHtcbiAgYXBwLFxuICBldmVudHMsXG4gIGltYWdlcyxcbiAgbG9jYXRpb25zLFxuICBtZXNzYWdlcyxcbiAgcG9zdHMsXG4gIHRhZ3MsXG4gIHVzZXJzLFxuICB3ZWJzb2NrZXRcbn0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7XG4gIGFwaUtleTogJ3ZhbHVlJyxcbiAgYmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJyxcbiAgdGltZW91dDogNTAwMFxufTtcblxuRXhhbXBsZSBvZiBJTkNPUlJFQ1QgZm9ybWF0dGluZyAoRklYIFRISVMpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge3N0YXRpYyByZWFkb25seSBBRERfSVRFTV9FUlJPUjogc3RyaW5nID0gJ1VTRVJfQUREX0lURU1fRVJST1InO1xuICBzdGF0aWMgcmVhZG9ubHkgT1RIRVJfQ09OU1RBTlQ6IHN0cmluZyA9ICdPVEhFUl9DT05TVEFOVCc7XG59XG5cbmNvbnN0cnVjdG9yKGZsdXg6IEZsdXhGcmFtZXdvcmssIEN1c3RvbUFkYXB0ZXI6IHR5cGVvZiBFdmVudCA9IEV2ZW50KSB7dGhpcy5DdXN0b21BZGFwdGVyID0gQ3VzdG9tQWRhcHRlcjtcbiAgdGhpcy5mbHV4ID0gZmx1eDt9XG5cbmltcG9ydCB7YXBwLCBldmVudHMsIGltYWdlcywgbG9jYXRpb25zLCBtZXNzYWdlcywgcG9zdHMsIHRhZ3MsIHVzZXJzLCB3ZWJzb2NrZXR9IGZyb20gJy4vc3RvcmVzJztcblxuY29uc3QgY29uZmlnID0ge2Jhc2VVcmw6ICdodHRwczovL2FwaS5leGFtcGxlLmNvbScsIGFwaUtleTogJ3ZhbHVlJywgdGltZW91dDogNTAwMH07XG5cbkZpeCBPTkxZIHRoZSBzcGVjaWZpYyBFU0xpbnQgZXJyb3JzIGxpc3RlZCBhYm92ZS4gUmV2aWV3IHRoZSBlbnRpcmUgZmlsZSBmb3IgY29tcGxpYW5jZSB3aXRoIGFsbCBFU0xpbnQgcnVsZXMuXG5SZXR1cm4gb25seSB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIGZpeGVkIGNvZGUgd2l0aG91dCBhbnkgZXhwbGFuYXRpb25zLmA7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpeGVkQ29udGVudCA9IGF3YWl0IGNhbGxBSVNlcnZpY2UocHJvbXB0LCBxdWlldCk7XG5cbiAgICAgICAgICAgIGlmKGZpeGVkQ29udGVudCAmJiBmaXhlZENvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGZpeGVkQ29udGVudCwgJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgbG9nKGBBcHBsaWVkIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBFcnJvciBhcHBseWluZyBBSSBmaXhlcyB0byAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGZpeGVzIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gYXBwbHkgQUkgZml4ZXMnKTtcbiAgICBsb2coYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBhcHBseURpcmVjdEZpeGVzID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcsIHF1aWV0OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGxldCB3YXNNb2RpZmllZCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgbGV0IG5ld0NvbnRlbnQgPSBmaWxlQ29udGVudDtcblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdhaVNlcnZpY2UudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGFpU2VydmljZS50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvblxcL2pzb24nLFxccyonQXV0aG9yaXphdGlvbic6IGBCZWFyZXIvZyxcbiAgICAgICAgJ1xcJ0F1dGhvcml6YXRpb25cXCc6IGBCZWFyZXJcXCcsIFxcJ0NvbnRlbnQtVHlwZVxcJzogXFwnYXBwbGljYXRpb24vanNvblxcJydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9oZWFkZXJzOiB7KFtefV0qKX0sXFxzKm1ldGhvZDogJ1BPU1QnL2csXG4gICAgICAgICdtZXRob2Q6IFxcJ1BPU1RcXCcsXFxuICAgICAgaGVhZGVyczogeyQxfSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC97cm9sZTogJ3N5c3RlbScsIGNvbnRlbnQ6L2csXG4gICAgICAgICd7Y29udGVudDosIHJvbGU6IFxcJ3N5c3RlbVxcJywnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL3tyb2xlOiAndXNlcicsIGNvbnRlbnQ6L2csXG4gICAgICAgICd7Y29udGVudDosIHJvbGU6IFxcJ3VzZXJcXCcsJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL1xcKChbXildKj8pXyhbYS16QS1aMC05XSspKFxccyo6W14pXSopXFwpL2csXG4gICAgICAgICcoJDEkMiQzKSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL2NvbnNvbGVcXC5sb2dcXCgvZywgJ2xvZygnKTtcblxuICAgICAgaWYoIW5ld0NvbnRlbnQuaW5jbHVkZXMoJ2ltcG9ydCB7bG9nfScpICYmIG5ld0NvbnRlbnQuaW5jbHVkZXMoJ2xvZygnKSkge1xuICAgICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAgIC9pbXBvcnQgeyhbXn1dKil9IGZyb20gJyguKiknOy8sXG4gICAgICAgICAgJ2ltcG9ydCB7JDF9IGZyb20gXFwnJDJcXCc7XFxuaW1wb3J0IHtsb2d9IGZyb20gXFwnLi9sb2cuanNcXCc7J1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdyZWFjdFNoaW0udHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgbmFtaW5nLWNvbnZlbnRpb24gaXNzdWVzIGluIHJlYWN0U2hpbS50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAnaW1wb3J0ICogYXMgUmVhY3QgZnJvbScsXG4gICAgICAgICdpbXBvcnQgKiBhcyByZWFjdCBmcm9tJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvUmVhY3RcXC4vZywgJ3JlYWN0LicpO1xuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdjaGFuZ2Vsb2cudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGNoYW5nZWxvZy50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC8oXFx3KylcXCtcXCsvZywgJyQxICs9IDEnKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvXFxcXFxcJC9nLCAnJCcpO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvXFxcXFxcLi9nLCAnLicpO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvXFxcXFxcKi9nLCAnKicpO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvXFxcXDovZywgJzonKTtcbiAgICB9XG5cbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnYXBwLnRzJykpIHtcbiAgICAgIGxvZygnRml4aW5nIGlzc3VlcyBpbiBhcHAudHMnLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvY29uc29sZVxcLmxvZ1xcKC9nLCAnbG9nKCcpO1xuXG4gICAgICBpZighbmV3Q29udGVudC5pbmNsdWRlcygnaW1wb3J0IHtsb2d9JykgJiYgbmV3Q29udGVudC5pbmNsdWRlcygnbG9nKCcpKSB7XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgL2ltcG9ydCBib3hlbiBmcm9tICdib3hlbic7LyxcbiAgICAgICAgICAnaW1wb3J0IGJveGVuIGZyb20gXFwnYm94ZW5cXCc7XFxuaW1wb3J0IHtsb2d9IGZyb20gXFwnLi9sb2cuanNcXCc7J1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwvL2csICcvJyk7XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2F1dG9maXguanMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGF1dG9maXguanMnLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2ltcG9ydCB7KFtefV0qKX0gZnJvbSAncGF0aCc7W1xcc1xcbl0qaW1wb3J0IHsoW159XSopfSBmcm9tICdwYXRoJzsvLFxuICAgICAgICAnaW1wb3J0IHskMSwgJDJ9IGZyb20gXFwncGF0aFxcJzsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvX19maWxlbmFtZS9nLFxuICAgICAgICAnY3VycmVudEZpbGVuYW1lJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9fX2Rpcm5hbWUvZyxcbiAgICAgICAgJ2N1cnJlbnREaXJuYW1lJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2NvbnN0IHByZWZpeCA9IHR5cGUgPT09ICdlcnJvcicgXFw/ICfinYwgJyA6IHR5cGUgPT09ICdzdWNjZXNzJyBcXD8gJ+KchSAnIDogJ+KEue+4jyAnOy8sXG4gICAgICAgICdsZXQgcHJlZml4ID0gXFwn4oS577iPIFxcJztcXG5pZih0eXBlID09PSBcXCdlcnJvclxcJykge1xcbiAgcHJlZml4ID0gXFwn4p2MIFxcJztcXG59IGVsc2UgaWYodHlwZSA9PT0gXFwnc3VjY2Vzc1xcJykge1xcbiAgcHJlZml4ID0gXFwn4pyFIFxcJztcXG59J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIHJ1bkVzbGludEZpeFxcKFxcKS9nLFxuICAgICAgICAnY29uc3QgcnVuRXNsaW50Rml4ID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGdldEZpbGVzV2l0aEVycm9yc1xcKFxcKS9nLFxuICAgICAgICAnY29uc3QgZ2V0RmlsZXNXaXRoRXJyb3JzID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGlzQ3Vyc29yQXZhaWxhYmxlXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBpc0N1cnNvckF2YWlsYWJsZSA9IGFzeW5jICgpJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9hc3luYyBmdW5jdGlvbiBmaXhGaWxlV2l0aEN1cnNvckFJXFwoZmlsZVBhdGhcXCkvZyxcbiAgICAgICAgJ2NvbnN0IGZpeEZpbGVXaXRoQ3Vyc29yQUkgPSBhc3luYyAoZmlsZVBhdGgpJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9hc3luYyBmdW5jdGlvbiBtYWluXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBtYWluID0gYXN5bmMgKCknXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmN9L2csXG4gICAgICAgICdpbXBvcnQge3dyaXRlRmlsZVN5bmN9J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2NvbnNvbGVcXC5sb2dcXChgXFwke3ByZWZpeH0gXFwke21lc3NhZ2V9YFxcKTsvZyxcbiAgICAgICAgJ3Byb2Nlc3Muc3Rkb3V0LndyaXRlKGAke3ByZWZpeH0gJHttZXNzYWdlfVxcXFxuYCk7J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL30gY2F0Y2hcXChlcnJvclxcKSB7W1xcc1xcbl0qXFwvXFwvIElnbm9yZSBjbGVhbnVwIGVycm9ycy9nLFxuICAgICAgICAnfSBjYXRjaChfKSB7XFxuICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC99IGNhdGNoXFwoZXJyb3JcXCkge1tcXHNcXG5dKmxvZ1xcKC9nLFxuICAgICAgICAnfSBjYXRjaChlcnIpIHtcXG4gICAgbG9nKCdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvfSBjYXRjaFxcKGVycm9yXFwpIHtbXFxzXFxuXSpyZXR1cm4gZmFsc2U7L2csXG4gICAgICAgICd9IGNhdGNoKF8pIHtcXG4gICAgcmV0dXJuIGZhbHNlOydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9mb3JcXChjb25zdCBmaWxlUGF0aCBvZiBmaWxlc1dpdGhFcnJvcnNcXCkge1tcXHNcXG5dKmNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaXhGaWxlV2l0aEN1cnNvckFJXFwoZmlsZVBhdGhcXCk7L2csXG4gICAgICAgICdjb25zdCBmaXhSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZmlsZXNXaXRoRXJyb3JzLm1hcChmaWxlUGF0aCA9PiBmaXhGaWxlV2l0aEN1cnNvckFJKGZpbGVQYXRoKSkpO1xcbmZvcihjb25zdCBzdWNjZXNzIG9mIGZpeFJlc3VsdHMpIHsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvZml4ZWRDb3VudFxcK1xcKzsvZyxcbiAgICAgICAgJ2ZpeGVkQ291bnQgKz0gMTsnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmKG5ld0NvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuICAgICAgbG9nKGBGaXhlZCBpc3N1ZXMgaW4gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHdhc01vZGlmaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FzTW9kaWZpZWQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIGFwcGx5aW5nIGRpcmVjdCBmaXhlcyB0byAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGxvYWRBSUNvbmZpZyA9IGFzeW5jIChjd2Q6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIGRlYnVnOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lID0gJ2xleC5jb25maWcnO1xuICBsZXQgbGV4Q29uZmlnUGF0aCA9ICcnO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApO1xuICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgIGxleENvbmZpZ1BhdGggPSBwb3RlbnRpYWxQYXRoO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYobGV4Q29uZmlnUGF0aCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBGb3IgTUpTIGZpbGVzLCB3ZSBuZWVkIHRvIHVzZSBkeW5hbWljIGltcG9ydCB3aXRoIFVSTCBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3QgZm9ybWF0ID0gZXh0bmFtZShsZXhDb25maWdQYXRoKS5zbGljZSgxKTtcbiAgICAgIGxldCBpbXBvcnRQYXRoID0gbGV4Q29uZmlnUGF0aDtcblxuICAgICAgLy8gVXNlIFVSTCBwcm90b2NvbCBmb3IgRVNNIGltcG9ydHNcbiAgICAgIGlmKGZvcm1hdCA9PT0gJ21qcycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGBmaWxlOi8vJHtsZXhDb25maWdQYXRofWApO1xuICAgICAgICAgIGltcG9ydFBhdGggPSB1cmwuaHJlZjtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBVc2luZyBVUkwgZm9ybWF0IGZvciBNSlMgaW1wb3J0OiAke2ltcG9ydFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKHVybEVycm9yKSB7XG4gICAgICAgICAgbG9nKGBFcnJvciBjcmVhdGluZyBVUkwgZm9yIE1KUyBpbXBvcnQ6ICR7dXJsRXJyb3IubWVzc2FnZX1gLCAnd2FybicsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IGBmaWxlOi8vJHtsZXhDb25maWdQYXRofWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBUcnlpbmcgdG8gaW1wb3J0IGNvbmZpZyBmcm9tICR7aW1wb3J0UGF0aH0gKGZvcm1hdDogJHtmb3JtYXR9KWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGV4Q29uZmlnO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV4Q29uZmlnID0gYXdhaXQgaW1wb3J0KGltcG9ydFBhdGgpO1xuICAgICAgfSBjYXRjaChpbXBvcnRFcnJvcikge1xuICAgICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGUnKSkge1xuICAgICAgICAgIGxvZyhgRVMgTW9kdWxlIHN5bnRheCBlcnJvciBpbiAke2xleENvbmZpZ1BhdGh9LiBNYWtlIHN1cmUgeW91J3JlIHVzaW5nICdleHBvcnQnIGluc3RlYWQgb2YgJ21vZHVsZS5leHBvcnRzJy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaW1wb3J0RXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgaW1wb3J0RXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBib3RoIEVTTSAoZGVmYXVsdCBleHBvcnQpIGFuZCBDb21tb25KUyAobW9kdWxlLmV4cG9ydHMpXG4gICAgICBsZXQgY29uZmlnRGF0YSA9IG51bGw7XG4gICAgICBpZihsZXhDb25maWcuZGVmYXVsdCkge1xuICAgICAgICBjb25maWdEYXRhID0gbGV4Q29uZmlnLmRlZmF1bHQ7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBGb3VuZCBkZWZhdWx0IGV4cG9ydCBpbiAke2xleENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBDb21tb25KUyBvciBvdGhlciBtb2R1bGUgc3lzdGVtc1xuICAgICAgICBjb25maWdEYXRhID0gbGV4Q29uZmlnO1xuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgVXNpbmcgZGlyZWN0IGV4cG9ydCBpbiAke2xleENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoY29uZmlnRGF0YSAmJiBjb25maWdEYXRhLmFpKSB7XG4gICAgICAgIGxvZyhgRm91bmQgQUkgY29uZmlndXJhdGlvbiBpbiAke3BhdGhSZXNvbHZlKGN3ZCwgbGV4Q29uZmlnUGF0aCl9LCBhcHBseWluZyBzZXR0aW5ncy4uLmAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmFpID0gey4uLkxleENvbmZpZy5jb25maWcuYWksIC4uLmNvbmZpZ0RhdGEuYWl9O1xuICAgICAgfVxuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgRXJyb3IgbG9hZGluZyBBSSBjb25maWd1cmF0aW9uIGZyb20gJHtsZXhDb25maWdQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIExvYWQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSBsZXguY29uZmlnLiogZmlsZXNcbiAqL1xuY29uc3QgbG9hZEVTTGludENvbmZpZyA9IGFzeW5jIChjd2Q6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIGRlYnVnOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIC8vIENoZWNrIGlmIExleENvbmZpZyBhbHJlYWR5IGhhcyBFU0xpbnQgY29uZmlndXJhdGlvbiBsb2FkZWRcbiAgaWYoTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgJiYgT2JqZWN0LmtleXMoTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQpLmxlbmd0aCA+IDApIHtcbiAgICBsb2coJ0ZvdW5kIEVTTGludCBjb25maWd1cmF0aW9uIGluIGxleC5jb25maWcuKiBmaWxlJywgJ2luZm8nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGxvYWQgZnJvbSBsZXguY29uZmlnLiogZmlsZXMgaWYgbm90IGFscmVhZHkgbG9hZGVkXG4gIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICBjb25zdCBjb25maWdCYXNlTmFtZSA9ICdsZXguY29uZmlnJztcblxuICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICBjb25zdCBwb3RlbnRpYWxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKTtcbiAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBGb3IgTUpTIGZpbGVzLCB3ZSBuZWVkIHRvIHVzZSBkeW5hbWljIGltcG9ydCB3aXRoIFVSTCBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgICBjb25zdCBmaWxlRm9ybWF0ID0gZXh0bmFtZShwb3RlbnRpYWxQYXRoKS5zbGljZSgxKTtcbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBwb3RlbnRpYWxQYXRoO1xuXG4gICAgICAgIC8vIFVzZSBVUkwgcHJvdG9jb2wgZm9yIEVTTSBpbXBvcnRzXG4gICAgICAgIGlmKGZpbGVGb3JtYXQgPT09ICdtanMnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGZpbGU6Ly8ke3BvdGVudGlhbFBhdGh9YCk7XG4gICAgICAgICAgICBpbXBvcnRQYXRoID0gdXJsLmhyZWY7XG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYFVzaW5nIFVSTCBmb3JtYXQgZm9yIE1KUyBpbXBvcnQ6ICR7aW1wb3J0UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKHVybEVycm9yKSB7XG4gICAgICAgICAgICBsb2coYEVycm9yIGNyZWF0aW5nIFVSTCBmb3IgTUpTIGltcG9ydDogJHt1cmxFcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZGVidWcgfHwgIXF1aWV0KTtcbiAgICAgICAgICAgIGltcG9ydFBhdGggPSBgZmlsZTovLyR7cG90ZW50aWFsUGF0aH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBUcnlpbmcgdG8gaW1wb3J0IGNvbmZpZyBmcm9tICR7aW1wb3J0UGF0aH0gKGZvcm1hdDogJHtmaWxlRm9ybWF0fSlgLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZXhDb25maWc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV4Q29uZmlnID0gYXdhaXQgaW1wb3J0KGltcG9ydFBhdGgpO1xuICAgICAgICB9IGNhdGNoKGltcG9ydEVycm9yKSB7XG4gICAgICAgICAgaWYoaW1wb3J0RXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbm90IGRlZmluZWQgaW4gRVMgbW9kdWxlIHNjb3BlJykpIHtcbiAgICAgICAgICAgIGxvZyhgRVMgTW9kdWxlIHN5bnRheCBlcnJvciBpbiAke3BvdGVudGlhbFBhdGh9LiBNYWtlIHN1cmUgeW91J3JlIHVzaW5nICdleHBvcnQnIGluc3RlYWQgb2YgJ21vZHVsZS5leHBvcnRzJy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGltcG9ydEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBpbXBvcnRFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBib3RoIEVTTSAoZGVmYXVsdCBleHBvcnQpIGFuZCBDb21tb25KUyAobW9kdWxlLmV4cG9ydHMpXG4gICAgICAgIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgICAgaWYobGV4Q29uZmlnLmRlZmF1bHQpIHtcbiAgICAgICAgICBjb25maWdEYXRhID0gbGV4Q29uZmlnLmRlZmF1bHQ7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgRm91bmQgZGVmYXVsdCBleHBvcnQgaW4gJHtwb3RlbnRpYWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3IgQ29tbW9uSlMgb3Igb3RoZXIgbW9kdWxlIHN5c3RlbXNcbiAgICAgICAgICBjb25maWdEYXRhID0gbGV4Q29uZmlnO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIGRpcmVjdCBleHBvcnQgaW4gJHtwb3RlbnRpYWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNvbmZpZ0RhdGEgJiYgY29uZmlnRGF0YS5lc2xpbnQgJiYgT2JqZWN0LmtleXMoY29uZmlnRGF0YS5lc2xpbnQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2coYEZvdW5kIEVTTGludCBjb25maWd1cmF0aW9uIGluICR7cGF0aFJlc29sdmUoY3dkLCBwb3RlbnRpYWxQYXRoKX0sIGFwcGx5aW5nIHNldHRpbmdzLi4uYCwgJ2luZm8nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgICAgICAgIExleENvbmZpZy5jb25maWcuZXNsaW50ID0gey4uLkxleENvbmZpZy5jb25maWcuZXNsaW50LCAuLi5jb25maWdEYXRhLmVzbGludH07XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEVTTGludCBjb25maWd1cmF0aW9uIGZyb20gJHtwb3RlbnRpYWxQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgcmVtb3ZlRmlsZUNvbW1lbnRzID0gKGZpbGVQYXRoOiBzdHJpbmcsIHF1aWV0OiBib29sZWFuKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG5cbiAgICBpZihmaWxlQ29udGVudC5sZW5ndGggPiAxMDAwMDAwKSB7IC8vIDFNQiBsaW1pdFxuICAgICAgbG9nKGBTa2lwcGluZyBjb21tZW50IHJlbW92YWwgZm9yIGxhcmdlIGZpbGU6ICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFVzZSByZWdleCB0byBtYXRjaCBkaWZmZXJlbnQgdHlwZXMgb2YgY29tbWVudHNcbiAgICAvLyBQcmVzZXJ2ZXM6XG4gICAgLy8gMS4gQ29weXJpZ2h0IG5vdGljZXMgKC8qIENvcHlyaWdodCAuLi4gKi8pXG4gICAgLy8gMi4gVE9ETyBjb21tZW50cyAoLy8gVE9ETzogLi4uKVxuICAgIC8vIDMuIExpY2Vuc2UgaGVhZGVycyAoLyogLi4uIExpY2Vuc2UgLi4uICovKVxuXG4gICAgLy8gSGFuZGxlIG11bHRpLWxpbmUgY29tbWVudHMgZmlyc3QgLSBwcmVzZXJ2ZSBjb3B5cmlnaHQvbGljZW5zZSBub3RpY2VzXG4gICAgbGV0IG5ld0NvbnRlbnQgPSBmaWxlQ29udGVudC5yZXBsYWNlKFxuICAgICAgL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZyxcbiAgICAgIChtYXRjaCkgPT4ge1xuICAgICAgICBpZihtYXRjaC5pbmNsdWRlcygnQ29weXJpZ2h0JykgfHxcbiAgICAgICAgICBtYXRjaC5pbmNsdWRlcygnTElDRU5TRScpIHx8XG4gICAgICAgICAgbWF0Y2guaW5jbHVkZXMoJ0xpY2Vuc2UnKSB8fFxuICAgICAgICAgIG1hdGNoLmluY2x1ZGVzKCdsaWNlbnNlJykpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIYW5kbGUgc2luZ2xlLWxpbmUgY29tbWVudHMgLSBwcmVzZXJ2ZSBUT0RPc1xuICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAvXFwvXFwvLiokL2dtLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmKG1hdGNoLmluY2x1ZGVzKCdUT0RPJykgfHwgbWF0Y2guaW5jbHVkZXMoJ0ZJWE1FJykpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDbGVhbiB1cCBhbnkgbXVsdGlwbGUgYmxhbmsgbGluZXMgY3JlYXRlZCBieSBjb21tZW50IHJlbW92YWxcbiAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXG5cXHMqXFxuXFxzKlxcbi9nLCAnXFxuXFxuJyk7XG5cbiAgICAvLyBJZiB0aGUgZmlsZSB3YXMgbW9kaWZpZWQsIHNhdmUgaXRcbiAgICBpZihuZXdDb250ZW50ICE9PSBmaWxlQ29udGVudCkge1xuICAgICAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgbmV3Q29udGVudCwgJ3V0ZjgnKTtcbiAgICAgIGxvZyhgUmVtb3ZlZCBjb21tZW50cyBmcm9tICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHJlbW92aW5nIGNvbW1lbnRzIGZyb20gJHtmaWxlUGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGludCA9IGFzeW5jIChjbWQ6IExpbnRPcHRpb25zICYgeydyZW1vdmUtY29tbWVudHMnPzogYm9vbGVhbn0sIGNhbGxiYWNrOiBMaW50Q2FsbGJhY2sgPSBwcm9jZXNzLmV4aXQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7XG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGZpeCA9IGZhbHNlLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICBjb25maWcgPSBudWxsLFxuICAgIHJlbW92ZUNvbW1lbnRzID0gZmFsc2UsXG4gICAgJ3JlbW92ZS1jb21tZW50cyc6IHJlbW92ZUNvbW1lbnRzRmxhZyA9IGZhbHNlXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc2hvdWxkUmVtb3ZlQ29tbWVudHMgPSByZW1vdmVDb21tZW50cyB8fCByZW1vdmVDb21tZW50c0ZsYWc7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGxpbnRpbmcuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgYXdhaXQgbG9hZEFJQ29uZmlnKGN3ZCwgcXVpZXQsIGRlYnVnKTtcblxuICBsZXQgdGVtcENvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXNlVHlwZXNjcmlwdCA9IGRldGVjdFR5cGVTY3JpcHQoY3dkKTtcbiAgICBsb2coYFR5cGVTY3JpcHQgJHt1c2VUeXBlc2NyaXB0ID8gJ2RldGVjdGVkJyA6ICdub3QgZGV0ZWN0ZWQnfSBmcm9tIHRzY29uZmlnLmpzb25gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICAgIExleENvbmZpZy5jaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgZW5zdXJlTW9kdWxlVHlwZShjd2QpO1xuXG4gICAgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyhjd2QsIHVzZVR5cGVzY3JpcHQsIHF1aWV0KTtcblxuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAnZXNsaW50LmNvbmZpZy5tanMnKTtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aFRzID0gcGF0aFJlc29sdmUoY3dkLCAnZXNsaW50LmNvbmZpZy50cycpO1xuICAgIGNvbnN0IGhhc0VzbGludENvbmZpZyA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpIHx8XG4gICAgICBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qcycpKSB8fFxuICAgICAgZXhpc3RzU3luYyhwYXRoUmVzb2x2ZShjd2QsICcuZXNsaW50cmMuanNvbicpKSB8fFxuICAgICAgZXhpc3RzU3luYyhwYXRoUmVzb2x2ZShjd2QsICcuZXNsaW50cmMueW1sJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy55YW1sJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYycpKTtcblxuICAgIGNvbnN0IGhhc0xleEVzbGludENvbmZpZyA9IGF3YWl0IGxvYWRFU0xpbnRDb25maWcoY3dkLCBxdWlldCwgZGVidWcpO1xuXG4gICAgaWYoaGFzTGV4RXNsaW50Q29uZmlnKSB7XG4gICAgICBsb2coJ1VzaW5nIEVTTGludCBjb25maWd1cmF0aW9uIGZyb20gbGV4LmNvbmZpZy4qIGZpbGUnLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG5cbiAgICBpZihleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpKSB7XG4gICAgICB1bmxpbmtTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpO1xuICAgIH1cblxuICAgIGxldCBsZXhDb25maWdQYXRoID0gJyc7XG4gICAgbGV0IHNob3VsZENyZWF0ZVRlbXBDb25maWcgPSBmYWxzZTtcblxuICAgIGlmKCFoYXNFc2xpbnRDb25maWcgJiYgIWhhc0xleEVzbGludENvbmZpZykge1xuICAgICAgY29uc3QgcG9zc2libGVQYXRocyA9IFtcbiAgICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnLi4vLi4vLi4vLi4vZXNsaW50LmNvbmZpZy5qbXMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy4vbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnZXNsaW50LmNvbmZpZy50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnLi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLm1qcycpXG4gICAgICBdO1xuXG4gICAgICBmb3IoY29uc3QgcGF0aCBvZiBwb3NzaWJsZVBhdGhzKSB7XG4gICAgICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgICBsZXhDb25maWdQYXRoID0gcGF0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYEN1cnJlbnQgZGlyZWN0b3J5OiAke2N1cnJlbnREaXJuYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYFByb2plY3QgY29uZmlnIHBhdGg6ICR7cHJvamVjdENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgUHJvamVjdCBjb25maWcgZXhpc3RzOiAke2hhc0VzbGludENvbmZpZ31gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBGb3VuZCBMZXggY29uZmlnOiAke2xleENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgTGV4IGNvbmZpZyBleGlzdHM6ICR7ISFsZXhDb25maWdQYXRoICYmIGV4aXN0c1N5bmMobGV4Q29uZmlnUGF0aCl9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGlmKGxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKSkge1xuICAgICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kIGluIHByb2plY3QuIFVzaW5nIExleFxcJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnKSB7XG4gICAgICBjb25zdCB1c2VyQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgY29uZmlnKTtcbiAgICAgIGlmKGV4aXN0c1N5bmModXNlckNvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgc3BlY2lmaWVkIEVTTGludCBjb25maWd1cmF0aW9uOiAke2NvbmZpZ31gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKGBTcGVjaWZpZWQgRVNMaW50IGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kOiAke2NvbmZpZ30uIFVzaW5nIExleCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbi5gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihzaG91bGRDcmVhdGVUZW1wQ29uZmlnKSB7XG4gICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kLiBDcmVhdGluZyBhIHRlbXBvcmFyeSBjb25maWd1cmF0aW9uLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBjb25zdCBjb25maWdSZXN1bHQgPSBjcmVhdGVEZWZhdWx0RVNMaW50Q29uZmlnKHVzZVR5cGVzY3JpcHQsIGN3ZCk7XG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IGNvbmZpZ1Jlc3VsdC5jb25maWdQYXRoO1xuICAgIH1cblxuICAgIGxldCBlc2xpbnRPdXRwdXQgPSAnJztcbiAgICBjb25zdCBjYXB0dXJlT3V0cHV0ID0gKG91dHB1dDogc3RyaW5nKSA9PiB7XG4gICAgICBlc2xpbnRPdXRwdXQgKz0gYCR7b3V0cHV0fVxcbmA7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkVzbGludFdpdGhMZXgoY3dkLCBxdWlldCwgY2xpTmFtZSwgdHJ1ZSwgZGVidWcsIHVzZVR5cGVzY3JpcHQsIGNhcHR1cmVPdXRwdXQpO1xuXG4gICAgaWYoc2hvdWxkUmVtb3ZlQ29tbWVudHMpIHtcbiAgICAgIHNwaW5uZXIuc3RhcnQoJ1JlbW92aW5nIGNvbW1lbnRzIGZyb20gZmlsZXMuLi4nKTtcblxuICAgICAgY29uc3QgZ2xvYiA9IGF3YWl0IGltcG9ydCgnZ2xvYicpO1xuICAgICAgY29uc3QgZmlsZXMgPSBnbG9iLnN5bmMoJ3tzcmMsbGlifS8qKi8qLntqcyxqc3gsdHMsdHN4fScsIHtcbiAgICAgICAgY3dkLFxuICAgICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2xpYi8qKicsICcqKi9kaXN0LyoqJywgJyoqL2J1aWxkLyoqJ11cbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcHJvY2Vzc2VkQ291bnQgPSAwO1xuICAgICAgZm9yKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGZpbGUpO1xuICAgICAgICBpZihyZW1vdmVGaWxlQ29tbWVudHMoZmlsZVBhdGgsIHF1aWV0KSkge1xuICAgICAgICAgIHByb2Nlc3NlZENvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBSZW1vdmVkIGNvbW1lbnRzIGZyb20gJHtwcm9jZXNzZWRDb3VudH0gZmlsZXNgKTtcbiAgICB9XG5cbiAgICBpZihyZXN1bHQgIT09IDAgJiYgZml4KSB7XG4gICAgICBjb25zdCBhaUNvbmZpZ3VyZWQgPSBMZXhDb25maWcuY29uZmlnLmFpPy5wcm92aWRlciAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyICE9PSAnbm9uZSc7XG5cbiAgICAgIGlmKGFpQ29uZmlndXJlZCkge1xuICAgICAgICBsb2coJ0FwcGx5aW5nIEFJIGZpeGVzIHRvIHJlbWFpbmluZyBpc3N1ZXMuLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgYXdhaXQgYXBwbHlBSUZpeChjd2QsIGVzbGludE91dHB1dCwgcXVpZXQpO1xuXG4gICAgICAgIGNvbnN0IGFmdGVyRml4UmVzdWx0ID0gYXdhaXQgcnVuRXNsaW50V2l0aExleChjd2QsIHF1aWV0LCBjbGlOYW1lLCBmYWxzZSwgZGVidWcsIHVzZVR5cGVzY3JpcHQpO1xuXG4gICAgICAgIGNhbGxiYWNrKGFmdGVyRml4UmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIGFmdGVyRml4UmVzdWx0O1xuICAgICAgfVxuICAgICAgbG9nKCdFU0xpbnQgY291bGQgbm90IGZpeCBhbGwgaXNzdWVzIGF1dG9tYXRpY2FsbHkuJywgJ3dhcm4nLCBxdWlldCk7XG4gICAgICBsb2coJ1RvIGVuYWJsZSBBSS1wb3dlcmVkIGZpeGVzLCBhZGQgQUkgY29uZmlndXJhdGlvbiB0byB5b3VyIGxleC5jb25maWcgZmlsZTonLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGxvZyhgXG4vLyBJbiBsZXguY29uZmlnLmpzIChvciBsZXguY29uZmlnLm1qcywgbGV4LmNvbmZpZy5janMsIGV0Yy4pXG5leHBvcnQgZGVmYXVsdCB7XG4gIC8vIFlvdXIgZXhpc3RpbmcgY29uZmlnXG4gIGFpOiB7XG4gICAgcHJvdmlkZXI6ICdjdXJzb3InIC8vIG9yICdvcGVuYWknLCAnYW50aHJvcGljJywgZXRjLlxuICAgIC8vIEFkZGl0aW9uYWwgcHJvdmlkZXItc3BlY2lmaWMgc2V0dGluZ3NcbiAgfVxufTtgLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoc3Bpbm5lcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdMaW50aW5nIGZhaWxlZCEnKTtcbiAgICB9XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH0gZmluYWxseSB7XG4gICAgY29uc3QgdGVtcEZpbGVQYXRocyA9IFtcbiAgICAgIHRlbXBDb25maWdQYXRoLFxuICAgICAgcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWVzbGludC5janMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKVxuICAgIF07XG5cbiAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgdGVtcEZpbGVQYXRocykge1xuICAgICAgaWYoZmlsZVBhdGggJiYgZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBDbGVhbmVkIHVwIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGF0ICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoe1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59OyJdLCJuYW1lcyI6WyJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ1bmxpbmtTeW5jIiwid3JpdGVGaWxlU3luYyIsImRpcm5hbWUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJleHRuYW1lIiwiTGV4Q29uZmlnIiwiY3JlYXRlU3Bpbm5lciIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiY3VycmVudEZpbGVuYW1lIiwiY3VycmVudERpcm5hbWUiLCJldmFsIiwicHJvY2VzcyIsImN3ZCIsImNyZWF0ZURlZmF1bHRFU0xpbnRDb25maWciLCJ1c2VUeXBlc2NyaXB0IiwiY29uZmlnUGF0aCIsIm9yaWdpbmFsQ29uZmlnIiwiY29uZmlnQ29udGVudCIsImRldGVjdFR5cGVTY3JpcHQiLCJlbnN1cmVNb2R1bGVUeXBlIiwicGFja2FnZUpzb25QYXRoIiwicGFja2FnZUpzb25Db250ZW50IiwicGFja2FnZUpzb24iLCJKU09OIiwicGFyc2UiLCJ0eXBlIiwiX2Vycm9yIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsInF1aWV0IiwicnVuRXNsaW50V2l0aExleCIsImNsaU5hbWUiLCJmaXgiLCJkZWJ1ZyIsImNhcHR1cmVPdXRwdXQiLCJzcGlubmVyIiwicHJvamVjdENvbmZpZ1BhdGgiLCJwcm9qZWN0Q29uZmlnUGF0aFRzIiwiaGFzUHJvamVjdENvbmZpZyIsImhhc0xleENvbmZpZ0VzbGludCIsImNvbmZpZyIsImVzbGludCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJwb3NzaWJsZVBhdGhzIiwiZW52IiwiTEVYX0hPTUUiLCJsZXhDb25maWdQYXRoIiwicGF0aCIsInRlbXBDb25maWdQYXRoIiwic3RyaW5naWZ5IiwiZXNsaW50QmluYXJ5IiwiYmFzZUVzbGludEFyZ3MiLCJjb25maWdBcmdzIiwianNSZXN1bHQiLCJyZWplY3QiLCJzaGVsbCIsInN0ZGlvIiwic3Rkb3V0IiwiY29uc29sZSIsInN0ZGVyciIsImVycm9yIiwidHNSZXN1bHQiLCJleGl0Q29kZSIsIm1lc3NhZ2UiLCJlc2xpbnROb3RGb3VuZCIsImluY2x1ZGVzIiwiZmFpbCIsInN1Y2NlZWQiLCJub0ZpbGVzRm91bmQiLCJhcHBseUFJRml4IiwiZXJyb3JzIiwic3RhcnQiLCJmaWxlRXJyb3JNYXAiLCJNYXAiLCJsaW5lcyIsInNwbGl0IiwiY3VycmVudEZpbGUiLCJsaW5lIiwibWF0Y2giLCJ0cmltIiwiaGFzIiwic2V0IiwiZXJyb3JBcnJheSIsImdldCIsInB1c2giLCJzaXplIiwic2VjdGlvbnMiLCJzZWN0aW9uIiwiZmlsZVBhdGgiLCJpIiwiZmlsZVBhdGhSZWdleCIsImZpbGVQYXRocyIsImtub3duRmlsZXMiLCJmaWxlIiwiaXNDdXJzb3JJREUiLCJhaSIsInByb3ZpZGVyIiwiQ1VSU09SX0lERSIsInByb21wdCIsInByb21wdEZpbGUiLCJ3YXNNb2RpZmllZCIsImFwcGx5RGlyZWN0Rml4ZXMiLCJmaWxlRXJyb3JzIiwiY2FsbEFJU2VydmljZSIsImZpbGVDb250ZW50Iiwiam9pbiIsImZpeGVkQ29udGVudCIsIm5ld0NvbnRlbnQiLCJyZXBsYWNlIiwibG9hZEFJQ29uZmlnIiwiY29uZmlnRm9ybWF0cyIsImNvbmZpZ0Jhc2VOYW1lIiwiZm9ybWF0IiwicG90ZW50aWFsUGF0aCIsInNsaWNlIiwiaW1wb3J0UGF0aCIsInVybCIsIlVSTCIsImhyZWYiLCJ1cmxFcnJvciIsImxleENvbmZpZyIsImltcG9ydEVycm9yIiwiY29uZmlnRGF0YSIsImRlZmF1bHQiLCJsb2FkRVNMaW50Q29uZmlnIiwiZmlsZUZvcm1hdCIsInJlbW92ZUZpbGVDb21tZW50cyIsImxpbnQiLCJjbWQiLCJjYWxsYmFjayIsImV4aXQiLCJyZW1vdmVDb21tZW50cyIsInJlbW92ZUNvbW1lbnRzRmxhZyIsInNob3VsZFJlbW92ZUNvbW1lbnRzIiwiY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZyIsImhhc0VzbGludENvbmZpZyIsImhhc0xleEVzbGludENvbmZpZyIsInNob3VsZENyZWF0ZVRlbXBDb25maWciLCJ1c2VyQ29uZmlnUGF0aCIsImNvbmZpZ1Jlc3VsdCIsImVzbGludE91dHB1dCIsIm91dHB1dCIsInJlc3VsdCIsImdsb2IiLCJmaWxlcyIsInN5bmMiLCJpZ25vcmUiLCJwcm9jZXNzZWRDb3VudCIsImFpQ29uZmlndXJlZCIsImFmdGVyRml4UmVzdWx0IiwidGVtcEZpbGVQYXRo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
|
|
955
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW50L2xpbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGV4dG5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7cmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmxldCBjdXJyZW50RmlsZW5hbWU6IHN0cmluZztcbmxldCBjdXJyZW50RGlybmFtZTogc3RyaW5nO1xuXG50cnkge1xuICBjdXJyZW50RmlsZW5hbWUgPSBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKScpO1xuICBjdXJyZW50RGlybmFtZSA9IGRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcbn0gY2F0Y2h7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FjaGVGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZUxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudkluZm8/OiBib29sZWFuO1xuICByZWFkb25seSBleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeERyeVJ1bj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeFR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSBpbml0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V2FybmluZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vQ29sb3I/OiBib29sZWFuO1xuICByZWFkb25seSBub0VzbGludHJjPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9JZ25vcmU/OiBib29sZWFuO1xuICByZWFkb25seSBub0lubGluZUNvbmZpZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyc2VyT3B0aW9ucz86IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luPzogc3RyaW5nO1xuICByZWFkb25seSBwcmludENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDb21tZW50cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlc2Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkaW4/OiBib29sZWFuO1xuICByZWFkb25seSBzdGRpbkZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW50Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5pbnRlcmZhY2UgQ29uZmlnUmVzdWx0IHtcbiAgY29uZmlnUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbmZpZzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyA9ICh1c2VUeXBlc2NyaXB0OiBib29sZWFuLCBjd2Q6IHN0cmluZyk6IENvbmZpZ1Jlc3VsdCA9PiB7XG4gIC8vIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggaW5zdGVhZCBvZiBjcmVhdGluZyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcbiAgY29uc3Qgb3JpZ2luYWxDb25maWcgPSBudWxsO1xuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBDb21tb25KUyBtb2R1bGUgdGhhdCByZXF1aXJlcyBMZXgncyBFU0xpbnQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IEVTTGludCBjb25maWcgZ2VuZXJhdGVkIGJ5IExleFxuY29uc3QgbGV4Q29uZmlnID0gcmVxdWlyZSgnQG5sYWJzL2xleC9lc2xpbnQuY29uZmlnLm1qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxleENvbmZpZztgO1xuXG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGgsXG4gICAgb3JpZ2luYWxDb25maWdcbiAgfTtcbn07XG5cbmNvbnN0IGRldGVjdFR5cGVTY3JpcHQgPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuanNvbicpKTtcblxuLyoqXG4gKiBFbnN1cmUgcGFja2FnZS5qc29uIGhhcyB0eXBlOiBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gKi9cbmNvbnN0IGVuc3VyZU1vZHVsZVR5cGUgPSAoY3dkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICAgICAgLy8gSWYgdHlwZSBpcyBub3Qgc2V0IHRvIG1vZHVsZSwgd2FybiBpbnN0ZWFkIG9mIGF1dG8tbW9kaWZ5aW5nXG4gICAgICBpZihwYWNrYWdlSnNvbi50eXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICBsb2coJ1dhcm5pbmc6IHBhY2thZ2UuanNvbiBzaG91bGQgaGF2ZSBcInR5cGVcIjogXCJtb2R1bGVcIiBmb3IgRVNNIHN1cHBvcnQuIFBsZWFzZSBhZGQgdGhpcyBtYW51YWxseS4nLCAnd2FybicsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaW5zdGFsbERlcGVuZGVuY2llcyA9IGFzeW5jIChjd2Q6IHN0cmluZywgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiwgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGxvZygnVXNpbmcgVHlwZVNjcmlwdCBFU0xpbnQgZnJvbSBMZXguLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1VzaW5nIEVTTGludCBmcm9tIExleC4uLicsICdpbmZvJywgcXVpZXQpO1xuICB9XG59O1xuXG5jb25zdCBydW5Fc2xpbnRXaXRoTGV4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGNsaU5hbWU6IHN0cmluZyxcbiAgZml4OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgdXNlVHlwZXNjcmlwdDogYm9vbGVhbixcbiAgY2FwdHVyZU91dHB1dD86IChvdXRwdXQ6IHN0cmluZyk9PiB2b2lkXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcubWpzJyk7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGhUcyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcbiAgICBjb25zdCBoYXNMZXhDb25maWdFc2xpbnQgPSBMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgbGV4Q29uZmlnUGF0aCA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IHBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICBsZXhDb25maWdQYXRoID0gcGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgdGVtcENvbmZpZ1BhdGggPSAnJztcblxuICAgIC8vIFByaW9yaXR5OlxuICAgIC8vIDEuIFByb2plY3QgZXNsaW50LmNvbmZpZyBmaWxlc1xuICAgIC8vIDIuIEVTTGludCBjb25maWcgaW4gbGV4LmNvbmZpZy4qIGZpbGVcbiAgICAvLyAzLiBMZXgncyBkZWZhdWx0IGVzbGludC5jb25maWcubWpzXG4gICAgLy8gNC4gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlXG4gICAgaWYoaGFzUHJvamVjdENvbmZpZykge1xuICAgICAgY29uZmlnUGF0aCA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgPyBwcm9qZWN0Q29uZmlnUGF0aFRzIDogcHJvamVjdENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgRVNMaW50IGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGhhc0xleENvbmZpZ0VzbGludCkge1xuICAgICAgLy8gV2hlbiB1c2luZyBsZXguY29uZmlnLmVzbGludCwgY3JlYXRlIGEgdGVtcG9yYXJ5IEpTIGNvbmZpZyBmaWxlIChub3QgSlNPTilcbiAgICAgIC8vIHRvIGF2b2lkIEVTTSBKU09OIGltcG9ydCBpc3N1ZXNcbiAgICAgIHRlbXBDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgQ29tbW9uSlMgbW9kdWxlIHRoYXQgZXh0ZW5kcyBMZXgncyBlc2xpbnQgY29uZmlnXG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYC8vIFRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcbmNvbnN0IHVzZXJDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KExleENvbmZpZy5jb25maWcuZXNsaW50LCBudWxsLCAyKX07XG5cbi8vIE1lcmdlIExleCdzIGNvbmZpZyB3aXRoIHVzZXIgY29uZmlnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLi4ubGV4Q29uZmlnXG59O2A7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmModGVtcENvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBjb25maWdQYXRoID0gdGVtcENvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgRVNMaW50IGNvbmZpZyBmcm9tIGxleC5jb25maWcuKiBmaWxlIHZpYSB0ZW1wIGZpbGU6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKSkge1xuICAgICAgY29uZmlnUGF0aCA9IGxleENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIExleCBFU0xpbnQgY29uZmlnIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRlZmF1bHQgY29uZmlnIGZpbGUgaWYgbm8gb3RoZXIgY29uZmlnIGlzIGZvdW5kXG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgYmFzaWMgRVNMaW50IGNvbmZpZ1xuICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IGAvLyBUZW1wb3JhcnkgZGVmYXVsdCBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsZXhDb25maWc7YDtcblxuICAgICAgd3JpdGVGaWxlU3luYyh0ZW1wQ29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcbiAgICAgIGNvbmZpZ1BhdGggPSB0ZW1wQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBDcmVhdGVkIHRlbXBvcmFyeSBkZWZhdWx0IEVTTGludCBjb25maWcgYXQ6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kLiBVc2luZyBMZXggZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVzbGludEJpbmFyeSA9IHJlc29sdmVCaW5hcnlQYXRoKCdlc2xpbnQnLCAnZXNsaW50Jyk7XG5cbiAgICBpZighZXNsaW50QmluYXJ5KSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIEVTTGludCBhcmd1bWVudHNcbiAgICBjb25zdCBiYXNlRXNsaW50QXJncyA9IFtcbiAgICAgIC4uLihmaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgICAuLi4oZGVidWcgPyBbJy0tZGVidWcnXSA6IFtdKSxcbiAgICAgICctLW5vLWVycm9yLW9uLXVubWF0Y2hlZC1wYXR0ZXJuJyxcbiAgICAgICctLW5vLXdhcm4taWdub3JlZCdcbiAgICBdO1xuXG4gICAgLy8gQWRkIGNvbmZpZyBwYXRoXG4gICAgY29uc3QgY29uZmlnQXJncyA9IGNvbmZpZ1BhdGggPyBbJy0tY29uZmlnJywgY29uZmlnUGF0aF0gOiBbXTtcblxuICAgIGNvbnN0IGpzUmVzdWx0ID0gYXdhaXQgZXhlY2EoZXNsaW50QmluYXJ5LCBbXG4gICAgICAnc3JjLyoqLyoue2pzLGpzeH0nLFxuICAgICAgLi4uY29uZmlnQXJncyxcbiAgICAgIC4uLmJhc2VFc2xpbnRBcmdzXG4gICAgXSwge1xuICAgICAgY3dkLFxuICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86ICdwaXBlJ1xuICAgIH0pO1xuXG4gICAgaWYoanNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coanNSZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGpzUmVzdWx0LnN0ZGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoanNSZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0c1Jlc3VsdDogYW55ID0ge2V4aXRDb2RlOiAwLCBzdGRlcnI6ICcnLCBzdGRvdXQ6ICcnfTtcbiAgICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgICB0c1Jlc3VsdCA9IGF3YWl0IGV4ZWNhKGVzbGludEJpbmFyeSwgW1xuICAgICAgICAnc3JjLyoqLyoue3RzLHRzeH0nLFxuICAgICAgICAuLi5jb25maWdBcmdzLFxuICAgICAgICAuLi5iYXNlRXNsaW50QXJnc1xuICAgICAgXSwge1xuICAgICAgICBjd2QsXG4gICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICB9KTtcblxuICAgICAgaWYodHNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKHRzUmVzdWx0LnN0ZG91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmKHRzUmVzdWx0LnN0ZGVycikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKHRzUmVzdWx0LnN0ZGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIGlmIGNyZWF0ZWRcbiAgICBpZih0ZW1wQ29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKHRlbXBDb25maWdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdW5saW5rU3luYyh0ZW1wQ29uZmlnUGF0aCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBSZW1vdmVkIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGF0ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNsZWFuaW5nIHVwXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlc2xpbnROb3RGb3VuZCA9IGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ2NvbW1hbmQgbm90IGZvdW5kJykgfHwganNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnZXNsaW50OiBjb21tYW5kIG5vdCBmb3VuZCcpO1xuICAgIGlmKGVzbGludE5vdEZvdW5kKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0VTTGludCBub3QgZm91bmQhJyk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IExleCdzIEVTTGludCBiaW5hcnkgbm90IGZvdW5kLiBQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZihqc1Jlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiB0c1Jlc3VsdC5leGl0Q29kZSA9PT0gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdMaW50aW5nIGNvbXBsZXRlZCEnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG5vRmlsZXNGb3VuZCA9XG4gICAgICAoanNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpIHx8IGpzUmVzdWx0LnN0ZG91dD8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSkgJiZcbiAgICAgICghdXNlVHlwZXNjcmlwdCB8fCB0c1Jlc3VsdC5zdGRlcnI/LmluY2x1ZGVzKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgfHwgdHNSZXN1bHQuc3Rkb3V0Py5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpKTtcblxuICAgIGlmKG5vRmlsZXNGb3VuZCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyBmb3VuZCB0byBsaW50Jyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgc3Bpbm5lci5mYWlsKCdMaW50aW5nIGZhaWxlZCEnKTtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBmb3VuZCBpc3N1ZXMgaW4geW91ciBjb2RlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnTGludGluZyBmYWlsZWQhJyk7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5jb25zdCBhcHBseUFJRml4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgZXJyb3JzOiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdVc2luZyBBSSB0byBmaXggcmVtYWluaW5nIGxpbnQgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlRXJyb3JNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgY29uc3QgbGluZXMgPSBlcnJvcnMuc3BsaXQoJ1xcbicpO1xuICAgIGxldCBjdXJyZW50RmlsZSA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmKGxpbmUubWF0Y2goL14oXFwvfFtBLVpdOlxcXFwpLio/XFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgIGN1cnJlbnRGaWxlID0gbGluZS50cmltKCk7XG4gICAgICAgIGlmKCFmaWxlRXJyb3JNYXAuaGFzKGN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoY3VycmVudEZpbGUsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGN1cnJlbnRGaWxlICYmIGxpbmUudHJpbSgpICYmIGxpbmUubWF0Y2goL1xccytcXGQrOlxcZCtcXHMrKGVycm9yfHdhcm5pbmcpXFxzKy8pKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQXJyYXkgPSBmaWxlRXJyb3JNYXAuZ2V0KGN1cnJlbnRGaWxlKTtcbiAgICAgICAgaWYoZXJyb3JBcnJheSkge1xuICAgICAgICAgIGVycm9yQXJyYXkucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihmaWxlRXJyb3JNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nKCdVc2luZyBhbHRlcm5hdGl2ZSBlcnJvciBwYXJzaW5nIHN0cmF0ZWd5JywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZXJyb3JzLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgZm9yKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgaWYoc2VjdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lcyA9IHNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGxpbmVzWzBdLnRyaW0oKTtcblxuICAgICAgICBpZihmaWxlUGF0aC5tYXRjaCgvXFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuXG4gICAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihsaW5lc1tpXS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGZpbGVFcnJvck1hcC5nZXQoZmlsZVBhdGgpPy5wdXNoKGxpbmVzW2ldLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZUVycm9yTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGxvZygnVXNpbmcgZGlyZWN0IGZpbGUgcGF0aCBleHRyYWN0aW9uJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoUmVnZXggPSAvKD86XFwvfFtBLVpdOlxcXFwpKD86W146XFxuXStcXC8pKlteOlxcbl0rXFwuKGpzfGpzeHx0c3x0c3gpL2c7XG4gICAgICBjb25zdCBmaWxlUGF0aHMgPSBlcnJvcnMubWF0Y2goZmlsZVBhdGhSZWdleCkgfHwgW107XG5cbiAgICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICAgICAgaWYoIWZpbGVFcnJvck1hcC5oYXMoZmlsZVBhdGgpICYmIGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtub3duRmlsZXMgPSBbXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy91dGlscy9haVNlcnZpY2UudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3dkLCAnc3JjL3V0aWxzL2FwcC50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvdXRpbHMvcmVhY3RTaGltLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jb21tYW5kcy9saW50L2F1dG9maXguanMnKVxuICAgICAgXTtcblxuICAgICAgZm9yKGNvbnN0IGZpbGUgb2Yga25vd25GaWxlcykge1xuICAgICAgICBpZihleGlzdHNTeW5jKGZpbGUpICYmICFmaWxlRXJyb3JNYXAuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgZmlsZUVycm9yTWFwLmtleXMoKSkge1xuICAgICAgaWYoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIGxvZyhgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsb2coYFByb2Nlc3NpbmcgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgY29uc3QgaXNDdXJzb3JJREUgPSBMZXhDb25maWcuY29uZmlnLmFpPy5wcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9PT0gJ3RydWUnO1xuXG4gICAgICBpZihpc0N1cnNvcklERSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBGaXggYWxsIEVTTGludCBlcnJvcnMgaW4gdGhpcyBmaWxlLiBGb2N1cyBvbjpcbjEuIEZpeGluZyBuYW1pbmcgY29udmVudGlvbnNcbjIuIEZpeGluZyBzb3J0LWtleXMgaXNzdWVzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eVxuNC4gRml4aW5nIG5vLXBsdXNwbHVzIGlzc3Vlc1xuNS4gRml4aW5nIHVubmVjZXNzYXJ5IGVzY2FwZSBjaGFyYWN0ZXJzXG42LiBGaXhpbmcgb3RoZXIgRVNMaW50IGVycm9yc1xuXG5DUklUSUNBTCBSRVFVSVJFTUVOVFM6XG4tIE9OTFkgZml4IHRoZSBzcGVjaWZpYyBsaW5lcyB3aXRoIEVTTGludCBlcnJvcnNcbi0gRE8gTk9UIG1vZGlmeSBhbnkgb3RoZXIgbGluZXMgb2YgY29kZVxuLSBETyBOT1QgcmVtb3ZlIGxpbmUgYnJlYWtzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgY2F1c2luZyBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBjb25kZW5zZSBtdWx0aS1saW5lIHN0cnVjdHVyZXMgdG8gc2luZ2xlIGxpbmVzXG4tIFBSRVNFUlZFIGFsbCBleGlzdGluZyBsaW5lIGJyZWFrcyBhbmQgZm9ybWF0dGluZyB0aGF0IGlzIG5vdCBjYXVzaW5nIGVycm9yc1xuXG5TUEVDSUZJQyBGT1JNQVRUSU5HIFJVTEVTOlxuLSBNYWludGFpbiBwcm9wZXIgaW5kZW50YXRpb24gKDIgc3BhY2VzKVxuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gY2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGFuZCB0aGVpciBtZW1iZXJzXG4tIEtlZXAgbGluZSBicmVha3MgYmV0d2VlbiBtZXRob2RzXG4tIEVuc3VyZSB0aGVyZSBpcyBhIGxpbmUgYnJlYWsgYWZ0ZXIgb3BlbmluZyBicmFjZXMgZm9yIGNsYXNzZXMsIGludGVyZmFjZXMsIGFuZCBtZXRob2RzXG4tIERPIE5PVCBwbGFjZSBjbGFzcy9pbnRlcmZhY2UgcHJvcGVydGllcyBvciBtZXRob2RzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIG9wZW5pbmcgYnJhY2Vcbi0gUHJlc2VydmUgZW1wdHkgbGluZXMgYmV0d2VlbiBsb2dpY2FsIGNvZGUgYmxvY2tzXG4tIFBSRVNFUlZFIG11bHRpLWxpbmUgaW1wb3J0cyAtIGRvIG5vdCBjb25kZW5zZSB0aGVtIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIG9iamVjdC9hcnJheSBkZWNsYXJhdGlvbnMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcblxuU09SVC1LRVlTIFJVTEUgKEhJR0hFU1QgUFJJT1JJVFkpOlxuLSBBbGwgb2JqZWN0IGxpdGVyYWwga2V5cyBNVVNUIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBpbiBhc2NlbmRpbmcgb3JkZXJcbi0gVGhpcyBhcHBsaWVzIHRvIEFMTCBvYmplY3RzIGluIHRoZSBmaWxlLCBub3QganVzdCB0aG9zZSB3aXRoIGV4cGxpY2l0IHNvcnQta2V5cyBlcnJvcnNcbi0gRXhhbXBsZToge2I6IDIsIGE6IDEsIGM6IDN9IHNob3VsZCBiZWNvbWUge2E6IDEsIGI6IDIsIGM6IDN9XG4tIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmb3JtYXR0aW5nIGFuZCBsaW5lIGJyZWFrcyB3aGVuIHNvcnRpbmdcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG5leHBvcnQgY2xhc3MgVXNlckNvbnN0YW50cyB7c3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMuIFJldHVybiB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIGNvZGUuYDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9tcHRGaWxlID0gcGF0aFJlc29sdmUoY3dkLCAnLmN1cnNvcl9wcm9tcHRfdGVtcC50eHQnKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvbXB0RmlsZSwgcHJvbXB0LCAndXRmOCcpO1xuXG4gICAgICAgICAgICAvLyBVc2UgQ3Vyc29yIENMSSB0byBmaXggdGhlIGZpbGVcbiAgICAgICAgICAgIGF3YWl0IGV4ZWNhKCdjdXJzb3InLCBbJ2VkaXQnLCAnLS1maWxlJywgZmlsZVBhdGgsICctLXByb21wdC1maWxlJywgcHJvbXB0RmlsZV0sIHtcbiAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdW5saW5rU3luYyhwcm9tcHRGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZyhgQXBwbGllZCBDdXJzb3IgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9IGNhdGNoe1xuICAgICAgICAgICAgY29uc3Qgd2FzTW9kaWZpZWQgPSBhd2FpdCBhcHBseURpcmVjdEZpeGVzKGZpbGVQYXRoLCBxdWlldCk7XG4gICAgICAgICAgICBpZih3YXNNb2RpZmllZCkge1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBFcnJvciB1c2luZyBDdXJzb3IgQUk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgYXdhaXQgYXBwbHlEaXJlY3RGaXhlcyhmaWxlUGF0aCwgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3YXNNb2RpZmllZCA9IGF3YWl0IGFwcGx5RGlyZWN0Rml4ZXMoZmlsZVBhdGgsIHF1aWV0KTtcbiAgICAgICAgaWYod2FzTW9kaWZpZWQpIHtcbiAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlRXJyb3JzID0gZmlsZUVycm9yTWFwLmdldChmaWxlUGF0aCkgfHwgW107XG4gICAgICAgIGlmKGZpbGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7Y2FsbEFJU2VydmljZX0gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3V0aWxzL2FpU2VydmljZS5qcycpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gYEZpeCB0aGUgZm9sbG93aW5nIEVTTGludCBlcnJvcnMgaW4gdGhpcyBjb2RlOlxuJHtmaWxlRXJyb3JzLmpvaW4oJ1xcbicpfVxuXG5IZXJlJ3MgdGhlIGNvZGU6XG5cXGBcXGBcXGBcbiR7ZmlsZUNvbnRlbnR9XG5cXGBcXGBcXGBcblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTOlxuLSBPTkxZIGZpeCB0aGUgc3BlY2lmaWMgbGluZXMgd2l0aCBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBtb2RpZnkgYW55IG90aGVyIGxpbmVzIG9mIGNvZGVcbi0gRE8gTk9UIHJlbW92ZSBsaW5lIGJyZWFrcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGNhdXNpbmcgRVNMaW50IGVycm9yc1xuLSBETyBOT1QgY29uZGVuc2UgbXVsdGktbGluZSBzdHJ1Y3R1cmVzIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBhbGwgZXhpc3RpbmcgbGluZSBicmVha3MgYW5kIGZvcm1hdHRpbmcgdGhhdCBpcyBub3QgY2F1c2luZyBlcnJvcnNcblxuU1BFQ0lGSUMgRk9STUFUVElORyBSVUxFUzpcbi0gTWFpbnRhaW4gcHJvcGVyIGluZGVudGF0aW9uICgyIHNwYWNlcylcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbiBhbmQgdGhlaXIgbWVtYmVyc1xuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gbWV0aG9kc1xuLSBFbnN1cmUgdGhlcmUgaXMgYSBsaW5lIGJyZWFrIGFmdGVyIG9wZW5pbmcgYnJhY2VzIGZvciBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgbWV0aG9kc1xuLSBETyBOT1QgcGxhY2UgY2xhc3MvaW50ZXJmYWNlIHByb3BlcnRpZXMgb3IgbWV0aG9kcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBvcGVuaW5nIGJyYWNlXG4tIFByZXNlcnZlIGVtcHR5IGxpbmVzIGJldHdlZW4gbG9naWNhbCBjb2RlIGJsb2Nrc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIGltcG9ydHMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgbXVsdGktbGluZSBvYmplY3QvYXJyYXkgZGVjbGFyYXRpb25zIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG5cblNPUlQtS0VZUyBSVUxFIChISUdIRVNUIFBSSU9SSVRZKTpcbi0gQWxsIG9iamVjdCBsaXRlcmFsIGtleXMgTVVTVCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4tIFRoaXMgYXBwbGllcyB0byBBTEwgb2JqZWN0cyBpbiB0aGUgZmlsZSwgbm90IGp1c3QgdGhvc2Ugd2l0aCBleHBsaWNpdCBzb3J0LWtleXMgZXJyb3JzXG4tIEV4YW1wbGU6IHtiOiAyLCBhOiAxLCBjOiAzfSBzaG91bGQgYmVjb21lIHthOiAxLCBiOiAyLCBjOiAzfVxuLSBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZm9ybWF0dGluZyBhbmQgbGluZSBicmVha3Mgd2hlbiBzb3J0aW5nXG5cbldIQVQgVE8gRklYOlxuMS4gU29ydGluZyBhbGwgb2JqZWN0IGtleXMgYWxwaGFiZXRpY2FsbHkgKHNvcnQta2V5cyBydWxlKSAtIEFMTCBvYmplY3RzIG11c3QgaGF2ZSBzb3J0ZWQga2V5c1xuMi4gRml4aW5nIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcy9mdW5jdGlvbnMgd2l0aCBuYW1pbmcgZXJyb3JzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eSAtIE9OTFkgZm9yIGNvbnNvbGUubG9nIHN0YXRlbWVudHNcbjQuIEZpeGluZyBuby1wbHVzcGx1cyBpc3N1ZXMgLSBPTkxZIGZvciArKy8tLSBvcGVyYXRvcnNcbjUuIEZpeGluZyB1bm5lY2Vzc2FyeSBlc2NhcGUgY2hhcmFjdGVycyAtIE9OTFkgZm9yIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZXNjYXBpbmdcbjYuIFByb3BlciBpbmRlbnRhdGlvbiBhbmQgc3BhY2luZyAtIE9OTFkgd2hlcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IGVycm9yc1xuNy4gU3RyaW5nIHF1b3RlcyBjb25zaXN0ZW5jeSAodXNlIHNpbmdsZSBxdW90ZXMpIC0gT05MWSBmb3Igc3RyaW5nIGxpdGVyYWxzIHdpdGggcXVvdGUgZXJyb3JzXG44LiBJbXBvcnQgb3JkZXIgYW5kIHNwYWNpbmcgLSBPTkxZIGZvciBpbXBvcnRzIHdpdGggb3JkZXIvc3BhY2luZyBlcnJvcnNcbjkuIEZ1bmN0aW9uIHBhcmFtZXRlciBmb3JtYXR0aW5nIC0gT05MWSBmb3IgZnVuY3Rpb25zIHdpdGggcGFyYW1ldGVyIGVycm9yc1xuMTAuIFZhcmlhYmxlIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcyB3aXRoIG5hbWluZyBlcnJvcnNcbjExLiBObyB1bnVzZWQgdmFyaWFibGVzIG9yIGltcG9ydHMgLSBPTkxZIGZvciB1bnVzZWQgdmFyaWFibGVzL2ltcG9ydHNcbjEyLiBBdm9pZGluZyBuZXN0ZWQgdGVybmFyaWVzIC0gT05MWSBmb3IgbmVzdGVkIHRlcm5hcnkgZXhwcmVzc2lvbnNcbjEzLiBBbnkgb3RoZXIgRVNMaW50IGVycm9ycyAtIE9OTFkgZm9yIHRoZSBzcGVjaWZpYyBlcnJvcnMgbGlzdGVkIGFib3ZlXG5cbldIQVQgTk9UIFRPIEZJWDpcbi0gRG8gbm90IGNoYW5nZSBwcm9wZXJseSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJ1Y3R1cmVzXG4tIERvIG5vdCByZW1vdmUgbGluZSBicmVha3MgdGhhdCBhcmUgbm90IGNhdXNpbmcgZXJyb3JzXG4tIERvIG5vdCBjaGFuZ2UgaW5kZW50YXRpb24gdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3Rcbi0gRG8gbm90IG1vZGlmeSBzcGFjaW5nIHRoYXQgaXMgYWxyZWFkeSBjb3JyZWN0XG4tIERvIG5vdCBjb25kZW5zZSByZWFkYWJsZSBtdWx0aS1saW5lIGNvZGUgdG8gc2luZ2xlIGxpbmVzXG4tIERvIG5vdCBtb2RpZnkgY29kZSB0aGF0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIEVTTGludCBlcnJvcnNcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG5leHBvcnQgY2xhc3MgVXNlckNvbnN0YW50cyB7c3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMgbGlzdGVkIGFib3ZlLiBSZXZpZXcgdGhlIGVudGlyZSBmaWxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsIEVTTGludCBydWxlcy5cblJldHVybiBvbmx5IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgZml4ZWQgY29kZSB3aXRob3V0IGFueSBleHBsYW5hdGlvbnMuYDtcblxuICAgICAgICAgICAgY29uc3QgZml4ZWRDb250ZW50ID0gYXdhaXQgY2FsbEFJU2VydmljZShwcm9tcHQsIHF1aWV0KTtcblxuICAgICAgICAgICAgaWYoZml4ZWRDb250ZW50ICYmIGZpeGVkQ29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZml4ZWRDb250ZW50LCAndXRmOCcpO1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYEVycm9yIGFwcGx5aW5nIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgZml4ZXMgYXBwbGllZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBhcHBseSBBSSBmaXhlcycpO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGFwcGx5RGlyZWN0Rml4ZXMgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgbGV0IHdhc01vZGlmaWVkID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50O1xuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2FpU2VydmljZS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYWlTZXJ2aWNlLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC8nQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uXFwvanNvbicsXFxzKidBdXRob3JpemF0aW9uJzogYEJlYXJlci9nLFxuICAgICAgICAnXFwnQXV0aG9yaXphdGlvblxcJzogYEJlYXJlclxcJywgXFwnQ29udGVudC1UeXBlXFwnOiBcXCdhcHBsaWNhdGlvbi9qc29uXFwnJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2hlYWRlcnM6IHsoW159XSopfSxcXHMqbWV0aG9kOiAnUE9TVCcvZyxcbiAgICAgICAgJ21ldGhvZDogXFwnUE9TVFxcJyxcXG4gICAgICBoZWFkZXJzOiB7JDF9J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL3tyb2xlOiAnc3lzdGVtJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwnc3lzdGVtXFwnLCdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAve3JvbGU6ICd1c2VyJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwndXNlclxcJywnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvXFwoKFteKV0qPylfKFthLXpBLVowLTldKykoXFxzKjpbXildKilcXCkvZyxcbiAgICAgICAgJygkMSQyJDMpJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvY29uc29sZVxcLmxvZ1xcKC9nLCAnbG9nKCcpO1xuXG4gICAgICBpZighbmV3Q29udGVudC5pbmNsdWRlcygnaW1wb3J0IHtsb2d9JykgJiYgbmV3Q29udGVudC5pbmNsdWRlcygnbG9nKCcpKSB7XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgL2ltcG9ydCB7KFtefV0qKX0gZnJvbSAnKC4qKSc7LyxcbiAgICAgICAgICAnaW1wb3J0IHskMX0gZnJvbSBcXCckMlxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ3JlYWN0U2hpbS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBuYW1pbmctY29udmVudGlvbiBpc3N1ZXMgaW4gcmVhY3RTaGltLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICdpbXBvcnQgKiBhcyBSZWFjdCBmcm9tJyxcbiAgICAgICAgJ2ltcG9ydCAqIGFzIHJlYWN0IGZyb20nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9SZWFjdFxcLi9nLCAncmVhY3QuJyk7XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2NoYW5nZWxvZy50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gY2hhbmdlbG9nLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoLyhcXHcrKVxcK1xcKy9nLCAnJDEgKz0gMScpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwkL2csICckJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwuL2csICcuJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwqL2csICcqJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcOi9nLCAnOicpO1xuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdhcHAudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGFwcC50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9jb25zb2xlXFwubG9nXFwoL2csICdsb2coJyk7XG5cbiAgICAgIGlmKCFuZXdDb250ZW50LmluY2x1ZGVzKCdpbXBvcnQge2xvZ30nKSAmJiBuZXdDb250ZW50LmluY2x1ZGVzKCdsb2coJykpIHtcbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAvaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJzsvLFxuICAgICAgICAgICdpbXBvcnQgYm94ZW4gZnJvbSBcXCdib3hlblxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKTtcbiAgICB9XG5cbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnYXV0b2ZpeC5qcycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYXV0b2ZpeC5qcycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvaW1wb3J0IHsoW159XSopfSBmcm9tICdwYXRoJztbXFxzXFxuXSppbXBvcnQgeyhbXn1dKil9IGZyb20gJ3BhdGgnOy8sXG4gICAgICAgICdpbXBvcnQgeyQxLCAkMn0gZnJvbSBcXCdwYXRoXFwnOydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9fX2ZpbGVuYW1lL2csXG4gICAgICAgICdjdXJyZW50RmlsZW5hbWUnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL19fZGlybmFtZS9nLFxuICAgICAgICAnY3VycmVudERpcm5hbWUnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc3QgcHJlZml4ID0gdHlwZSA9PT0gJ2Vycm9yJyBcXD8gJ+KdjCAnIDogdHlwZSA9PT0gJ3N1Y2Nlc3MnIFxcPyAn4pyFICcgOiAn4oS577iPICc7LyxcbiAgICAgICAgJ2xldCBwcmVmaXggPSBcXCfihLnvuI8gXFwnO1xcbmlmKHR5cGUgPT09IFxcJ2Vycm9yXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinYwgXFwnO1xcbn0gZWxzZSBpZih0eXBlID09PSBcXCdzdWNjZXNzXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinIUgXFwnO1xcbn0nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gcnVuRXNsaW50Rml4XFwoXFwpL2csXG4gICAgICAgICdjb25zdCBydW5Fc2xpbnRGaXggPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXNXaXRoRXJyb3JzXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBnZXRGaWxlc1dpdGhFcnJvcnMgPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gaXNDdXJzb3JBdmFpbGFibGVcXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IGlzQ3Vyc29yQXZhaWxhYmxlID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKS9nLFxuICAgICAgICAnY29uc3QgZml4RmlsZVdpdGhDdXJzb3JBSSA9IGFzeW5jIChmaWxlUGF0aCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIG1haW5cXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IG1haW4gPSBhc3luYyAoKSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30vZyxcbiAgICAgICAgJ2ltcG9ydCB7d3JpdGVGaWxlU3luY30nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc29sZVxcLmxvZ1xcKGBcXCR7cHJlZml4fSBcXCR7bWVzc2FnZX1gXFwpOy9nLFxuICAgICAgICAncHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7cHJlZml4fSAke21lc3NhZ2V9XFxcXG5gKTsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvfSBjYXRjaFxcKGVycm9yXFwpIHtbXFxzXFxuXSpcXC9cXC8gSWdub3JlIGNsZWFudXAgZXJyb3JzL2csXG4gICAgICAgICd9IGNhdGNoKF8pIHtcXG4gICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnMnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL30gY2F0Y2hcXChlcnJvclxcKSB7W1xcc1xcbl0qbG9nXFwoL2csXG4gICAgICAgICd9IGNhdGNoKGVycikge1xcbiAgICBsb2coJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC99IGNhdGNoXFwoZXJyb3JcXCkge1tcXHNcXG5dKnJldHVybiBmYWxzZTsvZyxcbiAgICAgICAgJ30gY2F0Y2goXykge1xcbiAgICByZXR1cm4gZmFsc2U7J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2ZvclxcKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzV2l0aEVycm9yc1xcKSB7W1xcc1xcbl0qY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKTsvZyxcbiAgICAgICAgJ2NvbnN0IGZpeFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWxlc1dpdGhFcnJvcnMubWFwKGZpbGVQYXRoID0+IGZpeEZpbGVXaXRoQ3Vyc29yQUkoZmlsZVBhdGgpKSk7XFxuZm9yKGNvbnN0IHN1Y2Nlc3Mgb2YgZml4UmVzdWx0cykgeydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9maXhlZENvdW50XFwrXFwrOy9nLFxuICAgICAgICAnZml4ZWRDb3VudCArPSAxOydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYobmV3Q29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIG5ld0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBsb2coYEZpeGVkIGlzc3VlcyBpbiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgd2FzTW9kaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB3YXNNb2RpZmllZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgYXBwbHlpbmcgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgbG9hZEFJQ29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgY29uc3QgY29uZmlnQmFzZU5hbWUgPSAnbGV4LmNvbmZpZyc7XG4gIGxldCBsZXhDb25maWdQYXRoID0gJyc7XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgbGV4Q29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZihsZXhDb25maWdQYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmb3JtYXQgPSBleHRuYW1lKGxleENvbmZpZ1BhdGgpLnNsaWNlKDEpO1xuICAgICAgbGV0IGltcG9ydFBhdGggPSBsZXhDb25maWdQYXRoO1xuXG4gICAgICAvLyBVc2UgVVJMIHByb3RvY29sIGZvciBFU00gaW1wb3J0c1xuICAgICAgaWYoZm9ybWF0ID09PSAnbWpzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YCk7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IHVybC5ocmVmO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIFVSTCBmb3JtYXQgZm9yIE1KUyBpbXBvcnQ6ICR7aW1wb3J0UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICBsb2coYEVycm9yIGNyZWF0aW5nIFVSTCBmb3IgTUpTIGltcG9ydDogJHt1cmxFcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZGVidWcgfHwgIXF1aWV0KTtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2Zvcm1hdH0pYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsZXhDb25maWc7XG4gICAgICB0cnkge1xuICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICB9IGNhdGNoKGltcG9ydEVycm9yKSB7XG4gICAgICAgIGlmKGltcG9ydEVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBkZWZpbmVkIGluIEVTIG1vZHVsZSBzY29wZScpKSB7XG4gICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7bGV4Q29uZmlnUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihpbXBvcnRFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBpbXBvcnRFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgIGlmKGxleENvbmZpZy5kZWZhdWx0KSB7XG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYEZvdW5kIGRlZmF1bHQgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIENvbW1vbkpTIG9yIG90aGVyIG1vZHVsZSBzeXN0ZW1zXG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBVc2luZyBkaXJlY3QgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb25maWdEYXRhICYmIGNvbmZpZ0RhdGEuYWkpIHtcbiAgICAgICAgbG9nKGBGb3VuZCBBSSBjb25maWd1cmF0aW9uIGluICR7cGF0aFJlc29sdmUoY3dkLCBsZXhDb25maWdQYXRoKX0sIGFwcGx5aW5nIHNldHRpbmdzLi4uYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uY29uZmlnRGF0YS5haX07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEFJIGNvbmZpZ3VyYXRpb24gZnJvbSAke2xleENvbmZpZ1BhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTG9hZCBFU0xpbnQgY29uZmlndXJhdGlvbiBmcm9tIGxleC5jb25maWcuKiBmaWxlc1xuICovXG5jb25zdCBsb2FkRVNMaW50Q29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgLy8gQ2hlY2sgaWYgTGV4Q29uZmlnIGFscmVhZHkgaGFzIEVTTGludCBjb25maWd1cmF0aW9uIGxvYWRlZFxuICBpZihMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgIGxvZygnRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gbGV4LmNvbmZpZy4qIGZpbGUnLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUcnkgdG8gbG9hZCBmcm9tIGxleC5jb25maWcuKiBmaWxlcyBpZiBub3QgYWxyZWFkeSBsb2FkZWRcbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lID0gJ2xleC5jb25maWcnO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApO1xuICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgIGNvbnN0IGZpbGVGb3JtYXQgPSBleHRuYW1lKHBvdGVudGlhbFBhdGgpLnNsaWNlKDEpO1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IHBvdGVudGlhbFBhdGg7XG5cbiAgICAgICAgLy8gVXNlIFVSTCBwcm90b2NvbCBmb3IgRVNNIGltcG9ydHNcbiAgICAgICAgaWYoZmlsZUZvcm1hdCA9PT0gJ21qcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgZmlsZTovLyR7cG90ZW50aWFsUGF0aH1gKTtcbiAgICAgICAgICAgIGltcG9ydFBhdGggPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgVXNpbmcgVVJMIGZvcm1hdCBmb3IgTUpTIGltcG9ydDogJHtpbXBvcnRQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgRXJyb3IgY3JlYXRpbmcgVVJMIGZvciBNSlMgaW1wb3J0OiAke3VybEVycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgICAgICAgICAgaW1wb3J0UGF0aCA9IGBmaWxlOi8vJHtwb3RlbnRpYWxQYXRofWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2ZpbGVGb3JtYXR9KWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxleENvbmZpZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICAgIH0gY2F0Y2goaW1wb3J0RXJyb3IpIHtcbiAgICAgICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGUnKSkge1xuICAgICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7cG90ZW50aWFsUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaW1wb3J0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGltcG9ydEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICBpZihsZXhDb25maWcuZGVmYXVsdCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBGb3VuZCBkZWZhdWx0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBDb21tb25KUyBvciBvdGhlciBtb2R1bGUgc3lzdGVtc1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgZGlyZWN0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29uZmlnRGF0YSAmJiBjb25maWdEYXRhLmVzbGludCAmJiBPYmplY3Qua2V5cyhjb25maWdEYXRhLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZyhgRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gJHtwYXRoUmVzb2x2ZShjd2QsIHBvdGVudGlhbFBhdGgpfSwgYXBwbHlpbmcgc2V0dGluZ3MuLi5gLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQsIC4uLmNvbmZpZ0RhdGEuZXNsaW50fTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYEVycm9yIGxvYWRpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSAke3BvdGVudGlhbFBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCByZW1vdmVGaWxlQ29tbWVudHMgPSAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgIGlmKGZpbGVDb250ZW50Lmxlbmd0aCA+IDEwMDAwMDApIHsgLy8gMU1CIGxpbWl0XG4gICAgICBsb2coYFNraXBwaW5nIGNvbW1lbnQgcmVtb3ZhbCBmb3IgbGFyZ2UgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVXNlIHJlZ2V4IHRvIG1hdGNoIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tZW50c1xuICAgIC8vIFByZXNlcnZlczpcbiAgICAvLyAxLiBDb3B5cmlnaHQgbm90aWNlcyAoLyogQ29weXJpZ2h0IC4uLiAqLylcbiAgICAvLyAyLiBUT0RPIGNvbW1lbnRzICgvLyBUT0RPOiAuLi4pXG4gICAgLy8gMy4gTGljZW5zZSBoZWFkZXJzICgvKiAuLi4gTGljZW5zZSAuLi4gKi8pXG5cbiAgICAvLyBIYW5kbGUgbXVsdGktbGluZSBjb21tZW50cyBmaXJzdCAtIHByZXNlcnZlIGNvcHlyaWdodC9saWNlbnNlIG5vdGljZXNcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoXG4gICAgICAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmKG1hdGNoLmluY2x1ZGVzKCdDb3B5cmlnaHQnKSB8fFxuICAgICAgICAgIG1hdGNoLmluY2x1ZGVzKCdMSUNFTlNFJykgfHxcbiAgICAgICAgICBtYXRjaC5pbmNsdWRlcygnTGljZW5zZScpIHx8XG4gICAgICAgICAgbWF0Y2guaW5jbHVkZXMoJ2xpY2Vuc2UnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzaW5nbGUtbGluZSBjb21tZW50cyAtIHByZXNlcnZlIFRPRE9zXG4gICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgIC9cXC9cXC8uKiQvZ20sXG4gICAgICAobWF0Y2gpID0+IHtcbiAgICAgICAgaWYobWF0Y2guaW5jbHVkZXMoJ1RPRE8nKSB8fCBtYXRjaC5pbmNsdWRlcygnRklYTUUnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENsZWFuIHVwIGFueSBtdWx0aXBsZSBibGFuayBsaW5lcyBjcmVhdGVkIGJ5IGNvbW1lbnQgcmVtb3ZhbFxuICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcblxccypcXG5cXHMqXFxuL2csICdcXG5cXG4nKTtcblxuICAgIC8vIElmIHRoZSBmaWxlIHdhcyBtb2RpZmllZCwgc2F2ZSBpdFxuICAgIGlmKG5ld0NvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuICAgICAgbG9nKGBSZW1vdmVkIGNvbW1lbnRzIGZyb20gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgcmVtb3ZpbmcgY29tbWVudHMgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaW50ID0gYXN5bmMgKGNtZDogTGludE9wdGlvbnMgJiB7J3JlbW92ZS1jb21tZW50cyc/OiBib29sZWFufSwgY2FsbGJhY2s6IExpbnRDYWxsYmFjayA9IHByb2Nlc3MuZXhpdCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZml4ID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIGNvbmZpZyA9IG51bGwsXG4gICAgcmVtb3ZlQ29tbWVudHMgPSBmYWxzZSxcbiAgICAncmVtb3ZlLWNvbW1lbnRzJzogcmVtb3ZlQ29tbWVudHNGbGFnID0gZmFsc2VcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzaG91bGRSZW1vdmVDb21tZW50cyA9IHJlbW92ZUNvbW1lbnRzIHx8IHJlbW92ZUNvbW1lbnRzRmxhZztcblxuICBsb2coYCR7Y2xpTmFtZX0gbGludGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBsb2FkQUlDb25maWcoY3dkLCBxdWlldCwgZGVidWcpO1xuXG4gIGxldCB0ZW1wQ29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VUeXBlc2NyaXB0ID0gZGV0ZWN0VHlwZVNjcmlwdChjd2QpO1xuICAgIGxvZyhgVHlwZVNjcmlwdCAke3VzZVR5cGVzY3JpcHQgPyAnZGV0ZWN0ZWQnIDogJ25vdCBkZXRlY3RlZCd9IGZyb20gdHNjb25maWcuanNvbmAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVNb2R1bGVUeXBlKGN3ZCk7XG5cbiAgICBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKGN3ZCwgdXNlVHlwZXNjcmlwdCwgcXVpZXQpO1xuXG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLm1qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QgaGFzRXNsaW50Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHxcbiAgICAgIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy55bWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLnlhbWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjJykpO1xuXG4gICAgY29uc3QgaGFzTGV4RXNsaW50Q29uZmlnID0gYXdhaXQgbG9hZEVTTGludENvbmZpZyhjd2QsIHF1aWV0LCBkZWJ1Zyk7XG5cbiAgICBpZihoYXNMZXhFc2xpbnRDb25maWcpIHtcbiAgICAgIGxvZygnVXNpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSBsZXguY29uZmlnLiogZmlsZScsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGlmKGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSkpIHtcbiAgICAgIHVubGlua1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSk7XG4gICAgfVxuXG4gICAgbGV0IGxleENvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IGZhbHNlO1xuXG4gICAgaWYoIWhhc0VzbGludENvbmZpZyAmJiAhaGFzTGV4RXNsaW50Q29uZmlnKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLmptcycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnLi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcuL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcubWpzJylcbiAgICAgIF07XG5cbiAgICAgIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAgIGxleENvbmZpZ1BhdGggPSBwYXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgQ3VycmVudCBkaXJlY3Rvcnk6ICR7Y3VycmVudERpcm5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgUHJvamVjdCBjb25maWcgcGF0aDogJHtwcm9qZWN0Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBQcm9qZWN0IGNvbmZpZyBleGlzdHM6ICR7aGFzRXNsaW50Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZvdW5kIExleCBjb25maWc6ICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBMZXggY29uZmlnIGV4aXN0czogJHshIWxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYobGV4Q29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKGxleENvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQgaW4gcHJvamVjdC4gVXNpbmcgTGV4XFwncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWcpIHtcbiAgICAgIGNvbnN0IHVzZXJDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWcpO1xuICAgICAgaWYoZXhpc3RzU3luYyh1c2VyQ29uZmlnUGF0aCkpIHtcbiAgICAgICAgbG9nKGBVc2luZyBzcGVjaWZpZWQgRVNMaW50IGNvbmZpZ3VyYXRpb246ICR7Y29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFNwZWNpZmllZCBFU0xpbnQgY29uZmlndXJhdGlvbiBub3QgZm91bmQ6ICR7Y29uZmlnfS4gVXNpbmcgTGV4J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLmAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHNob3VsZENyZWF0ZVRlbXBDb25maWcpIHtcbiAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQuIENyZWF0aW5nIGEgdGVtcG9yYXJ5IGNvbmZpZ3VyYXRpb24uLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNyZWF0ZURlZmF1bHRFU0xpbnRDb25maWcodXNlVHlwZXNjcmlwdCwgY3dkKTtcbiAgICAgIHRlbXBDb25maWdQYXRoID0gY29uZmlnUmVzdWx0LmNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgbGV0IGVzbGludE91dHB1dCA9ICcnO1xuICAgIGNvbnN0IGNhcHR1cmVPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGVzbGludE91dHB1dCArPSBgJHtvdXRwdXR9XFxuYDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXNsaW50V2l0aExleChjd2QsIHF1aWV0LCBjbGlOYW1lLCB0cnVlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCwgY2FwdHVyZU91dHB1dCk7XG5cbiAgICBpZihzaG91bGRSZW1vdmVDb21tZW50cykge1xuICAgICAgc3Bpbm5lci5zdGFydCgnUmVtb3ZpbmcgY29tbWVudHMgZnJvbSBmaWxlcy4uLicpO1xuXG4gICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYygne3NyYyxsaWJ9LyoqLyoue2pzLGpzeCx0cyx0c3h9Jywge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovYnVpbGQvKionXVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBmb3IoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZSk7XG4gICAgICAgIGlmKHJlbW92ZUZpbGVDb21tZW50cyhmaWxlUGF0aCwgcXVpZXQpKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFJlbW92ZWQgY29tbWVudHMgZnJvbSAke3Byb2Nlc3NlZENvdW50fSBmaWxlc2ApO1xuICAgIH1cblxuICAgIGlmKHJlc3VsdCAhPT0gMCAmJiBmaXgpIHtcbiAgICAgIGNvbnN0IGFpQ29uZmlndXJlZCA9IExleENvbmZpZy5jb25maWcuYWk/LnByb3ZpZGVyICYmIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgIT09ICdub25lJztcblxuICAgICAgaWYoYWlDb25maWd1cmVkKSB7XG4gICAgICAgIGxvZygnQXBwbHlpbmcgQUkgZml4ZXMgdG8gcmVtYWluaW5nIGlzc3Vlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBhd2FpdCBhcHBseUFJRml4KGN3ZCwgZXNsaW50T3V0cHV0LCBxdWlldCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJGaXhSZXN1bHQgPSBhd2FpdCBydW5Fc2xpbnRXaXRoTGV4KGN3ZCwgcXVpZXQsIGNsaU5hbWUsIGZhbHNlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCk7XG5cbiAgICAgICAgY2FsbGJhY2soYWZ0ZXJGaXhSZXN1bHQpO1xuICAgICAgICByZXR1cm4gYWZ0ZXJGaXhSZXN1bHQ7XG4gICAgICB9XG4gICAgICBsb2coJ0VTTGludCBjb3VsZCBub3QgZml4IGFsbCBpc3N1ZXMgYXV0b21hdGljYWxseS4nLCAnd2FybicsIHF1aWV0KTtcbiAgICAgIGxvZygnVG8gZW5hYmxlIEFJLXBvd2VyZWQgZml4ZXMsIGFkZCBBSSBjb25maWd1cmF0aW9uIHRvIHlvdXIgbGV4LmNvbmZpZyBmaWxlOicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGBcbi8vIEluIGxleC5jb25maWcuanMgKG9yIGxleC5jb25maWcubWpzLCBsZXguY29uZmlnLmNqcywgZXRjLilcbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gWW91ciBleGlzdGluZyBjb25maWdcbiAgYWk6IHtcbiAgICBwcm92aWRlcjogJ2N1cnNvcicgLy8gb3IgJ29wZW5haScsICdhbnRocm9waWMnLCBldGMuXG4gICAgLy8gQWRkaXRpb25hbCBwcm92aWRlci1zcGVjaWZpYyBzZXR0aW5nc1xuICB9XG59O2AsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0xpbnRpbmcgZmFpbGVkIScpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGhzID0gW1xuICAgICAgdGVtcENvbmZpZ1BhdGgsXG4gICAgICBwYXRoUmVzb2x2ZShjd2QsICcubGV4LXRlbXAtZXNsaW50LmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWRlZmF1bHQtZXNsaW50LmNqcycpXG4gICAgXTtcblxuICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0ZW1wRmlsZVBhdGhzKSB7XG4gICAgICBpZihmaWxlUGF0aCAmJiBleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHVubGlua1N5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYENsZWFuZWQgdXAgdGVtcG9yYXJ5IEVTTGludCBjb25maWcgYXQgJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInVubGlua1N5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImV4dG5hbWUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJjdXJyZW50RmlsZW5hbWUiLCJjdXJyZW50RGlybmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyIsInVzZVR5cGVzY3JpcHQiLCJjb25maWdQYXRoIiwib3JpZ2luYWxDb25maWciLCJjb25maWdDb250ZW50IiwiZGV0ZWN0VHlwZVNjcmlwdCIsImVuc3VyZU1vZHVsZVR5cGUiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlSnNvbkNvbnRlbnQiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInR5cGUiLCJfZXJyb3IiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwicXVpZXQiLCJydW5Fc2xpbnRXaXRoTGV4IiwiY2xpTmFtZSIsImZpeCIsImRlYnVnIiwiY2FwdHVyZU91dHB1dCIsInNwaW5uZXIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwiaGFzTGV4Q29uZmlnRXNsaW50IiwiY29uZmlnIiwiZXNsaW50IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBvc3NpYmxlUGF0aHMiLCJlbnYiLCJMRVhfSE9NRSIsImxleENvbmZpZ1BhdGgiLCJwYXRoIiwidGVtcENvbmZpZ1BhdGgiLCJzdHJpbmdpZnkiLCJlc2xpbnRCaW5hcnkiLCJiYXNlRXNsaW50QXJncyIsImNvbmZpZ0FyZ3MiLCJqc1Jlc3VsdCIsInJlamVjdCIsInNoZWxsIiwic3RkaW8iLCJzdGRvdXQiLCJjb25zb2xlIiwic3RkZXJyIiwiZXJyb3IiLCJ0c1Jlc3VsdCIsImV4aXRDb2RlIiwibWVzc2FnZSIsImVzbGludE5vdEZvdW5kIiwiaW5jbHVkZXMiLCJmYWlsIiwic3VjY2VlZCIsIm5vRmlsZXNGb3VuZCIsImFwcGx5QUlGaXgiLCJlcnJvcnMiLCJzdGFydCIsImZpbGVFcnJvck1hcCIsIk1hcCIsImxpbmVzIiwic3BsaXQiLCJjdXJyZW50RmlsZSIsImxpbmUiLCJtYXRjaCIsInRyaW0iLCJoYXMiLCJzZXQiLCJlcnJvckFycmF5IiwiZ2V0IiwicHVzaCIsInNpemUiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJmaWxlUGF0aCIsImkiLCJmaWxlUGF0aFJlZ2V4IiwiZmlsZVBhdGhzIiwia25vd25GaWxlcyIsImZpbGUiLCJpc0N1cnNvcklERSIsImFpIiwicHJvdmlkZXIiLCJDVVJTT1JfSURFIiwicHJvbXB0IiwicHJvbXB0RmlsZSIsIndhc01vZGlmaWVkIiwiYXBwbHlEaXJlY3RGaXhlcyIsImZpbGVFcnJvcnMiLCJjYWxsQUlTZXJ2aWNlIiwiZmlsZUNvbnRlbnQiLCJqb2luIiwiZml4ZWRDb250ZW50IiwibmV3Q29udGVudCIsInJlcGxhY2UiLCJsb2FkQUlDb25maWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJmb3JtYXQiLCJwb3RlbnRpYWxQYXRoIiwic2xpY2UiLCJpbXBvcnRQYXRoIiwidXJsIiwiVVJMIiwiaHJlZiIsInVybEVycm9yIiwibGV4Q29uZmlnIiwiaW1wb3J0RXJyb3IiLCJjb25maWdEYXRhIiwiZGVmYXVsdCIsImxvYWRFU0xpbnRDb25maWciLCJmaWxlRm9ybWF0IiwicmVtb3ZlRmlsZUNvbW1lbnRzIiwibGludCIsImNtZCIsImNhbGxiYWNrIiwiZXhpdCIsInJlbW92ZUNvbW1lbnRzIiwicmVtb3ZlQ29tbWVudHNGbGFnIiwic2hvdWxkUmVtb3ZlQ29tbWVudHMiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwiaGFzRXNsaW50Q29uZmlnIiwiaGFzTGV4RXNsaW50Q29uZmlnIiwic2hvdWxkQ3JlYXRlVGVtcENvbmZpZyIsInVzZXJDb25maWdQYXRoIiwiY29uZmlnUmVzdWx0IiwiZXNsaW50T3V0cHV0Iiwib3V0cHV0IiwicmVzdWx0IiwiZ2xvYiIsImZpbGVzIiwic3luYyIsImlnbm9yZSIsInByb2Nlc3NlZENvdW50IiwiYWlDb25maWd1cmVkIiwiYWZ0ZXJGaXhSZXN1bHQiLCJ0ZW1wRmlsZVBhdGhz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
|