@angular-architects/native-federation 20.0.6 → 20.1.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/README.md +104 -3
- package/package.json +3 -3
- package/src/builders/build/builder.js +92 -69
- package/src/builders/build/builder.js.map +1 -1
- package/src/builders/build/federation-build-notifier.d.ts +65 -0
- package/src/builders/build/federation-build-notifier.js +183 -0
- package/src/builders/build/federation-build-notifier.js.map +1 -0
- package/src/builders/build/schema.d.ts +2 -0
- package/src/builders/build/schema.json +15 -0
- package/src/schematics/appbuilder/schematic.js +1 -2
- package/src/schematics/appbuilder/schematic.js.map +1 -1
- package/src/schematics/init/schematic.js +14 -9
- package/src/schematics/init/schematic.js.map +1 -1
- package/src/tools/fstart-as-data-url.d.ts +1 -1
- package/src/tools/fstart-as-data-url.js +1 -1
- package/src/tools/fstart-as-data-url.js.map +1 -1
- package/src/utils/angular-esbuild-adapter.js +5 -2
- package/src/utils/angular-esbuild-adapter.js.map +1 -1
- package/src/utils/i18n.d.ts +6 -1
- package/src/utils/i18n.js +3 -1
- package/src/utils/i18n.js.map +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fstart = void 0;
|
|
4
|
-
exports.fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvaW1wb3J0LW1hcC50cwpmdW5jdGlvbiBtZXJnZUltcG9ydE1hcHMobWFwMSwgbWFwMikgewogIHJldHVybiB7CiAgICBpbXBvcnRzOiB7IC4uLm1hcDEuaW1wb3J0cywgLi4ubWFwMi5pbXBvcnRzIH0sCiAgICBzY29wZXM6IHsgLi4ubWFwMS5zY29wZXMsIC4uLm1hcDIuc2NvcGVzIH0KICB9Owp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9nbG9iYWwtY2FjaGUudHMKdmFyIG5mTmFtZXNwYWNlID0gIl9fTkFUSVZFX0ZFREVSQVRJT05fXyI7CnZhciBnbG9iYWwyID0gZ2xvYmFsVGhpczsKZ2xvYmFsMltuZk5hbWVzcGFjZV0gPz89IHsKICBleHRlcm5hbHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgcmVtb3RlTmFtZXNUb1JlbW90ZTogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwKICBiYXNlVXJsVG9SZW1vdGVOYW1lczogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKQp9Owp2YXIgZ2xvYmFsQ2FjaGUgPSBnbG9iYWwyW25mTmFtZXNwYWNlXTsKCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2V4dGVybmFscy50cwp2YXIgZXh0ZXJuYWxzID0gZ2xvYmFsQ2FjaGUuZXh0ZXJuYWxzOwpmdW5jdGlvbiBnZXRFeHRlcm5hbEtleShzaGFyZWQpIHsKICByZXR1cm4gYCR7c2hhcmVkLnBhY2thZ2VOYW1lfUAke3NoYXJlZC52ZXJzaW9ufWA7Cn0KZnVuY3Rpb24gZ2V0RXh0ZXJuYWxVcmwoc2hhcmVkKSB7CiAgY29uc3QgcGFja2FnZUtleSA9IGdldEV4dGVybmFsS2V5KHNoYXJlZCk7CiAgcmV0dXJuIGV4dGVybmFscy5nZXQocGFja2FnZUtleSk7Cn0KZnVuY3Rpb24gc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCB1cmwyKSB7CiAgY29uc3QgcGFja2FnZUtleSA9IGdldEV4dGVybmFsS2V5KHNoYXJlZCk7CiAgZXh0ZXJuYWxzLnNldChwYWNrYWdlS2V5LCB1cmwyKTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvdXRpbHMvcGF0aC11dGlscy50cwpmdW5jdGlvbiBnZXREaXJlY3RvcnkodXJsMikgewogIGNvbnN0IHBhcnRzID0gdXJsMi5zcGxpdCgiLyIpOwogIHBhcnRzLnBvcCgpOwogIHJldHVybiBwYXJ0cy5qb2luKCIvIik7Cn0KZnVuY3Rpb24gam9pblBhdGhzKHBhdGgxLCBwYXRoMjIpIHsKICB3aGlsZSAocGF0aDEuZW5kc1dpdGgoIi8iKSkgewogICAgcGF0aDEgPSBwYXRoMS5zdWJzdHJpbmcoMCwgcGF0aDEubGVuZ3RoIC0gMSk7CiAgfQogIGlmIChwYXRoMjIuc3RhcnRzV2l0aCgiLi8iKSkgewogICAgcGF0aDIyID0gcGF0aDIyLnN1YnN0cmluZygyLCBwYXRoMjIubGVuZ3RoKTsKICB9CiAgcmV0dXJuIGAke3BhdGgxfS8ke3BhdGgyMn1gOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9yZW1vdGVzLnRzCnZhciByZW1vdGVOYW1lc1RvUmVtb3RlID0gZ2xvYmFsQ2FjaGUucmVtb3RlTmFtZXNUb1JlbW90ZTsKdmFyIGJhc2VVcmxUb1JlbW90ZU5hbWVzID0gZ2xvYmFsQ2FjaGUuYmFzZVVybFRvUmVtb3RlTmFtZXM7CmZ1bmN0aW9uIGFkZFJlbW90ZShyZW1vdGVOYW1lLCByZW1vdGUpIHsKICByZW1vdGVOYW1lc1RvUmVtb3RlLnNldChyZW1vdGVOYW1lLCByZW1vdGUpOwogIGJhc2VVcmxUb1JlbW90ZU5hbWVzLnNldChyZW1vdGUuYmFzZVVybCwgcmVtb3RlTmFtZSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL2luaXQtZmVkZXJhdGlvbi50cwphc3luYyBmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW5mb3MocmVtb3Rlcywgb3B0aW9ucyA9IHsgdGhyb3dJZlJlbW90ZU5vdEZvdW5kOiBmYWxzZSB9KSB7CiAgY29uc3QgcHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpLm1hcCgKICAgIGFzeW5jIChyZW1vdGVOYW1lKSA9PiB7CiAgICAgIHRyeSB7CiAgICAgICAgbGV0IHVybDIgPSByZW1vdGVzW3JlbW90ZU5hbWVdOwogICAgICAgIGlmIChvcHRpb25zLmNhY2hlVGFnKSB7CiAgICAgICAgICBjb25zdCBhZGRBcHBlbmQgPSByZW1vdGVzW3JlbW90ZU5hbWVdLmluY2x1ZGVzKCI/IikgPyAiJiIgOiAiPyI7CiAgICAgICAgICB1cmwyICs9IGAke2FkZEFwcGVuZH10PSR7b3B0aW9ucy5jYWNoZVRhZ31gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm8odXJsMiwgcmVtb3RlTmFtZSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zdCBlcnJvciA9IGBFcnJvciBsb2FkaW5nIHJlbW90ZSBlbnRyeSBmb3IgJHtyZW1vdGVOYW1lfSBmcm9tIGZpbGUgJHtyZW1vdGVzW3JlbW90ZU5hbWVdfWA7CiAgICAgICAgaWYgKG9wdGlvbnMudGhyb3dJZlJlbW90ZU5vdEZvdW5kKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICk7CiAgY29uc3QgcmVtb3RlSW1wb3J0TWFwcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb2Nlc3NSZW1vdGVJbmZvUHJvbWlzZXMpOwogIGNvbnN0IGltcG9ydE1hcCA9IHJlbW90ZUltcG9ydE1hcHMucmVkdWNlKAogICAgKGFjYywgcmVtb3RlSW1wb3J0TWFwKSA9PiByZW1vdGVJbXBvcnRNYXAgPyBtZXJnZUltcG9ydE1hcHMoYWNjLCByZW1vdGVJbXBvcnRNYXApIDogYWNjLAogICAgeyBpbXBvcnRzOiB7fSwgc2NvcGVzOiB7fSB9CiAgKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvKGZlZGVyYXRpb25JbmZvVXJsLCByZW1vdGVOYW1lKSB7CiAgY29uc3QgYmFzZVVybCA9IGdldERpcmVjdG9yeShmZWRlcmF0aW9uSW5mb1VybCk7CiAgY29uc3QgcmVtb3RlSW5mbyA9IGF3YWl0IGxvYWRGZWRlcmF0aW9uSW5mbyhmZWRlcmF0aW9uSW5mb1VybCk7CiAgaWYgKCFyZW1vdGVOYW1lKSB7CiAgICByZW1vdGVOYW1lID0gcmVtb3RlSW5mby5uYW1lOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
|
|
4
|
+
exports.fstart = "Ly8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvbm9kZS9pbml0LW5vZGUtZmVkZXJhdGlvbi50cwppbXBvcnQgeyByZWdpc3RlciB9IGZyb20gIm5vZGU6bW9kdWxlIjsKaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gIm5vZGU6dXJsIjsKaW1wb3J0ICogYXMgZnMyIGZyb20gIm5vZGU6ZnMvcHJvbWlzZXMiOwppbXBvcnQgKiBhcyBwYXRoMiBmcm9tICJub2RlOnBhdGgiOwoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvZ2xvYmFsLWNhY2hlLnRzCnZhciBuZk5hbWVzcGFjZSA9ICJfX05BVElWRV9GRURFUkFUSU9OX18iOwp2YXIgZ2xvYmFsMiA9IGdsb2JhbFRoaXM7Cmdsb2JhbDJbbmZOYW1lc3BhY2VdID8/PSB7CiAgZXh0ZXJuYWxzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogIHJlbW90ZU5hbWVzVG9SZW1vdGU6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgYmFzZVVybFRvUmVtb3RlTmFtZXM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkKfTsKdmFyIGdsb2JhbENhY2hlID0gZ2xvYmFsMltuZk5hbWVzcGFjZV07CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi9tb2RlbC9leHRlcm5hbHMudHMKdmFyIGV4dGVybmFscyA9IGdsb2JhbENhY2hlLmV4dGVybmFsczsKZnVuY3Rpb24gZ2V0RXh0ZXJuYWxLZXkoc2hhcmVkKSB7CiAgcmV0dXJuIGAke3NoYXJlZC5wYWNrYWdlTmFtZX1AJHtzaGFyZWQudmVyc2lvbn1gOwp9CmZ1bmN0aW9uIGdldEV4dGVybmFsVXJsKHNoYXJlZCkgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIHJldHVybiBleHRlcm5hbHMuZ2V0KHBhY2thZ2VLZXkpOwp9CmZ1bmN0aW9uIHNldEV4dGVybmFsVXJsKHNoYXJlZCwgdXJsMikgewogIGNvbnN0IHBhY2thZ2VLZXkgPSBnZXRFeHRlcm5hbEtleShzaGFyZWQpOwogIGV4dGVybmFscy5zZXQocGFja2FnZUtleSwgdXJsMik7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL21vZGVsL2ltcG9ydC1tYXAudHMKZnVuY3Rpb24gbWVyZ2VJbXBvcnRNYXBzKG1hcDEsIG1hcDIpIHsKICByZXR1cm4gewogICAgaW1wb3J0czogeyAuLi5tYXAxLmltcG9ydHMsIC4uLm1hcDIuaW1wb3J0cyB9LAogICAgc2NvcGVzOiB7IC4uLm1hcDEuc2NvcGVzLCAuLi5tYXAyLnNjb3BlcyB9CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvbW9kZWwvcmVtb3Rlcy50cwp2YXIgcmVtb3RlTmFtZXNUb1JlbW90ZSA9IGdsb2JhbENhY2hlLnJlbW90ZU5hbWVzVG9SZW1vdGU7CnZhciBiYXNlVXJsVG9SZW1vdGVOYW1lcyA9IGdsb2JhbENhY2hlLmJhc2VVcmxUb1JlbW90ZU5hbWVzOwpmdW5jdGlvbiBhZGRSZW1vdGUocmVtb3RlTmFtZSwgcmVtb3RlKSB7CiAgcmVtb3RlTmFtZXNUb1JlbW90ZS5zZXQocmVtb3RlTmFtZSwgcmVtb3RlKTsKICBiYXNlVXJsVG9SZW1vdGVOYW1lcy5zZXQocmVtb3RlLmJhc2VVcmwsIHJlbW90ZU5hbWUpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLXJ1bnRpbWUvc3JjL2xpYi91dGlscy9wYXRoLXV0aWxzLnRzCmZ1bmN0aW9uIGdldERpcmVjdG9yeSh1cmwyKSB7CiAgY29uc3QgcGFydHMgPSB1cmwyLnNwbGl0KCIvIik7CiAgcGFydHMucG9wKCk7CiAgcmV0dXJuIHBhcnRzLmpvaW4oIi8iKTsKfQpmdW5jdGlvbiBqb2luUGF0aHMocGF0aDEsIHBhdGgyMikgewogIHdoaWxlIChwYXRoMS5lbmRzV2l0aCgiLyIpKSB7CiAgICBwYXRoMSA9IHBhdGgxLnN1YnN0cmluZygwLCBwYXRoMS5sZW5ndGggLSAxKTsKICB9CiAgaWYgKHBhdGgyMi5zdGFydHNXaXRoKCIuLyIpKSB7CiAgICBwYXRoMjIgPSBwYXRoMjIuc3Vic3RyaW5nKDIsIHBhdGgyMi5sZW5ndGgpOwogIH0KICByZXR1cm4gYCR7cGF0aDF9LyR7cGF0aDIyfWA7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tcnVudGltZS9zcmMvbGliL3dhdGNoLWZlZGVyYXRpb24tYnVpbGQudHMKZnVuY3Rpb24gd2F0Y2hGZWRlcmF0aW9uQnVpbGRDb21wbGV0aW9uKGVuZHBvaW50KSB7CiAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZW5kcG9pbnQpOwogIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgIGlmIChkYXRhLnR5cGUgPT09ICJmZWRlcmF0aW9uLXJlYnVpbGQtY29tcGxldGUiIC8qIENPTVBMRVRFRCAqLykgewogICAgICBjb25zb2xlLmxvZygiW0ZlZGVyYXRpb25dIFJlYnVpbGQgY29tcGxldGVkLCByZWxvYWRpbmcuLi4iKTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfQogIH07CiAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBjb25zb2xlLndhcm4oIltGZWRlcmF0aW9uXSBTU0UgY29ubmVjdGlvbiBlcnJvcjoiLCBldmVudCk7CiAgfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ydW50aW1lL3NyYy9saWIvaW5pdC1mZWRlcmF0aW9uLnRzCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVJbmZvcyhyZW1vdGVzLCBvcHRpb25zID0geyB0aHJvd0lmUmVtb3RlTm90Rm91bmQ6IGZhbHNlIH0pIHsKICBjb25zdCBwcm9jZXNzUmVtb3RlSW5mb1Byb21pc2VzID0gT2JqZWN0LmtleXMocmVtb3RlcykubWFwKAogICAgYXN5bmMgKHJlbW90ZU5hbWUpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICBsZXQgdXJsMiA9IHJlbW90ZXNbcmVtb3RlTmFtZV07CiAgICAgICAgaWYgKG9wdGlvbnMuY2FjaGVUYWcpIHsKICAgICAgICAgIGNvbnN0IGFkZEFwcGVuZCA9IHJlbW90ZXNbcmVtb3RlTmFtZV0uaW5jbHVkZXMoIj8iKSA/ICImIiA6ICI/IjsKICAgICAgICAgIHVybDIgKz0gYCR7YWRkQXBwZW5kfXQ9JHtvcHRpb25zLmNhY2hlVGFnfWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhd2FpdCBwcm9jZXNzUmVtb3RlSW5mbyh1cmwyLCByZW1vdGVOYW1lKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnN0IGVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVtb3RlIGVudHJ5IGZvciAke3JlbW90ZU5hbWV9IGZyb20gZmlsZSAke3JlbW90ZXNbcmVtb3RlTmFtZV19YDsKICAgICAgICBpZiAob3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgKTsKICBjb25zdCByZW1vdGVJbXBvcnRNYXBzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvY2Vzc1JlbW90ZUluZm9Qcm9taXNlcyk7CiAgY29uc3QgaW1wb3J0TWFwID0gcmVtb3RlSW1wb3J0TWFwcy5yZWR1Y2UoCiAgICAoYWNjLCByZW1vdGVJbXBvcnRNYXApID0+IHJlbW90ZUltcG9ydE1hcCA/IG1lcmdlSW1wb3J0TWFwcyhhY2MsIHJlbW90ZUltcG9ydE1hcCkgOiBhY2MsCiAgICB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH0KICApOwogIHJldHVybiBpbXBvcnRNYXA7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUluZm8oZmVkZXJhdGlvbkluZm9VcmwsIHJlbW90ZU5hbWUpIHsKICBjb25zdCBiYXNlVXJsID0gZ2V0RGlyZWN0b3J5KGZlZGVyYXRpb25JbmZvVXJsKTsKICBjb25zdCByZW1vdGVJbmZvID0gYXdhaXQgbG9hZEZlZGVyYXRpb25JbmZvKGZlZGVyYXRpb25JbmZvVXJsKTsKICBpZiAoIXJlbW90ZU5hbWUpIHsKICAgIHJlbW90ZU5hbWUgPSByZW1vdGVJbmZvLm5hbWU7CiAgfQogIGlmIChyZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50KSB7CiAgICB3YXRjaEZlZGVyYXRpb25CdWlsZENvbXBsZXRpb24oCiAgICAgIGJhc2VVcmwgKyByZW1vdGVJbmZvLmJ1aWxkTm90aWZpY2F0aW9uc0VuZHBvaW50CiAgICApOwogIH0KICBjb25zdCBpbXBvcnRNYXAgPSBjcmVhdGVSZW1vdGVJbXBvcnRNYXAocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCk7CiAgYWRkUmVtb3RlKHJlbW90ZU5hbWUsIHsgLi4ucmVtb3RlSW5mbywgYmFzZVVybCB9KTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZUltcG9ydE1hcChyZW1vdGVJbmZvLCByZW1vdGVOYW1lLCBiYXNlVXJsKSB7CiAgY29uc3QgaW1wb3J0cyA9IHByb2Nlc3NFeHBvc2VkKHJlbW90ZUluZm8sIHJlbW90ZU5hbWUsIGJhc2VVcmwpOwogIGNvbnN0IHNjb3BlcyA9IHByb2Nlc3NSZW1vdGVJbXBvcnRzKHJlbW90ZUluZm8sIGJhc2VVcmwpOwogIHJldHVybiB7IGltcG9ydHMsIHNjb3BlcyB9Owp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uSW5mbyh1cmwyKSB7CiAgY29uc3QgaW5mbyA9IGF3YWl0IGZldGNoKHVybDIpLnRoZW4oKHIpID0+IHIuanNvbigpKTsKICByZXR1cm4gaW5mbzsKfQpmdW5jdGlvbiBwcm9jZXNzUmVtb3RlSW1wb3J0cyhyZW1vdGVJbmZvLCBiYXNlVXJsKSB7CiAgY29uc3Qgc2NvcGVzID0ge307CiAgY29uc3Qgc2NvcGVkSW1wb3J0cyA9IHt9OwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIHJlbW90ZUluZm8uc2hhcmVkKSB7CiAgICBjb25zdCBvdXRGaWxlTmFtZSA9IGdldEV4dGVybmFsVXJsKHNoYXJlZCkgPz8gam9pblBhdGhzKGJhc2VVcmwsIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgICBzZXRFeHRlcm5hbFVybChzaGFyZWQsIG91dEZpbGVOYW1lKTsKICAgIHNjb3BlZEltcG9ydHNbc2hhcmVkLnBhY2thZ2VOYW1lXSA9IG91dEZpbGVOYW1lOwogIH0KICBzY29wZXNbYmFzZVVybCArICIvIl0gPSBzY29wZWRJbXBvcnRzOwogIHJldHVybiBzY29wZXM7Cn0KZnVuY3Rpb24gcHJvY2Vzc0V4cG9zZWQocmVtb3RlSW5mbywgcmVtb3RlTmFtZSwgYmFzZVVybCkgewogIGNvbnN0IGltcG9ydHMgPSB7fTsKICBmb3IgKGNvbnN0IGV4cG9zZWQgb2YgcmVtb3RlSW5mby5leHBvc2VzKSB7CiAgICBjb25zdCBrZXkgPSBqb2luUGF0aHMocmVtb3RlTmFtZSwgZXhwb3NlZC5rZXkpOwogICAgY29uc3QgdmFsdWUgPSBqb2luUGF0aHMoYmFzZVVybCwgZXhwb3NlZC5vdXRGaWxlTmFtZSk7CiAgICBpbXBvcnRzW2tleV0gPSB2YWx1ZTsKICB9CiAgcmV0dXJuIGltcG9ydHM7Cn0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0hvc3RJbmZvKGhvc3RJbmZvLCByZWxCdW5kbGVzUGF0aCA9ICIuLyIpIHsKICBjb25zdCBpbXBvcnRzID0gaG9zdEluZm8uc2hhcmVkLnJlZHVjZSgKICAgIChhY2MsIGN1cikgPT4gKHsKICAgICAgLi4uYWNjLAogICAgICBbY3VyLnBhY2thZ2VOYW1lXTogcmVsQnVuZGxlc1BhdGggKyBjdXIub3V0RmlsZU5hbWUKICAgIH0pLAogICAge30KICApOwogIGZvciAoY29uc3Qgc2hhcmVkIG9mIGhvc3RJbmZvLnNoYXJlZCkgewogICAgc2V0RXh0ZXJuYWxVcmwoc2hhcmVkLCByZWxCdW5kbGVzUGF0aCArIHNoYXJlZC5vdXRGaWxlTmFtZSk7CiAgfQogIHJldHVybiB7IGltcG9ydHMsIHNjb3Blczoge30gfTsKfQoKLy8gbGlicy9uYXRpdmUtZmVkZXJhdGlvbi1ub2RlL3NyYy9saWIvdXRpbHMvaW1wb3J0LW1hcC1sb2FkZXIuanMKaW1wb3J0IHBhdGggZnJvbSAicGF0aCI7CmltcG9ydCB1cmwgZnJvbSAidXJsIjsKaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICJmcyI7CnZhciBJTVBPUlRfTUFQX0ZJTEVfTkFNRSA9ICJub2RlLmltcG9ydG1hcCI7CnZhciBiYXNlVVJMID0gdXJsLnBhdGhUb0ZpbGVVUkwocHJvY2Vzcy5jd2QoKSkgKyBwYXRoLnNlcDsKZnVuY3Rpb24gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAocGFyc2VkKSB7CiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhcnNlZCkpIHsKICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSB0b3AgbGV2ZWwgbXVzdCBiZSBhbiBvYmplY3RgKTsKICB9CiAgbGV0IHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgiaW1wb3J0cyIpKSB7CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocGFyc2VkLmltcG9ydHMpKSB7CiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGltcG9ydCBtYXAgLSAiaW1wb3J0cyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRJbXBvcnRzID0gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcCgKICAgICAgcGFyc2VkLmltcG9ydHMsCiAgICAgIGJhc2VVUkwKICAgICk7CiAgfQogIGxldCBzb3J0ZWRBbmROb3JtYWxpemVkU2NvcGVzID0ge307CiAgaWYgKHBhcnNlZC5oYXNPd25Qcm9wZXJ0eSgic2NvcGVzIikpIHsKICAgIGlmICghaXNQbGFpbk9iamVjdChwYXJzZWQuc2NvcGVzKSkgewogICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBpbXBvcnQgbWFwIC0gInNjb3BlcyIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3RgKTsKICAgIH0KICAgIHNvcnRlZEFuZE5vcm1hbGl6ZWRTY29wZXMgPSBzb3J0QW5kTm9ybWFsaXplU2NvcGVzKHBhcnNlZC5zY29wZXMsIGJhc2VVUkwpOwogIH0KICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKHBhcnNlZCkuZmlsdGVyKAogICAgKGtleSkgPT4ga2V5ICE9PSAiaW1wb3J0cyIgJiYga2V5ICE9PSAic2NvcGVzIgogICk7CiAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCA+IDApIHsKICAgIGNvbnNvbGUud2FybigKICAgICAgYEludmFsaWQgdG9wLWxldmVsIGtleSR7aW52YWxpZEtleXMubGVuZ3RoID4gMCA/ICJzIiA6ICIifSBpbiBpbXBvcnQgbWFwIC0gJHtpbnZhbGlkS2V5cy5qb2luKCIsICIpfWAKICAgICk7CiAgfQogIHJldHVybiB7CiAgICBpbXBvcnRzOiBzb3J0ZWRBbmROb3JtYWxpemVkSW1wb3J0cywKICAgIHNjb3Blczogc29ydGVkQW5kTm9ybWFsaXplZFNjb3BlcwogIH07Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNwZWNpZmllck1hcChtYXAsIGJhc2VVUkwyKSB7CiAgY29uc3Qgbm9ybWFsaXplZCA9IHt9OwogIGZvciAobGV0IHNwZWNpZmllcktleSBpbiBtYXApIHsKICAgIGNvbnN0IHZhbHVlID0gbWFwW3NwZWNpZmllcktleV07CiAgICBjb25zdCBub3JtYWxpemVkU3BlY2lmaWVyS2V5ID0gbm9ybWFsaXplU3BlY2lmaWVyS2V5KHNwZWNpZmllcktleSwgYmFzZVVSTDIpOwogICAgaWYgKG5vcm1hbGl6ZWRTcGVjaWZpZXJLZXkgPT09IG51bGwpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBsZXQgYWRkcmVzc1VSTCA9IHBhcnNlVVJMTGlrZVNwZWNpZmllcih2YWx1ZSwgYmFzZVVSTDIpOwogICAgaWYgKGFkZHJlc3NVUkwgPT09IG51bGwpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9J2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHNwZWNpZmllcktleS5lbmRzV2l0aCgiLyIpICYmICFhZGRyZXNzVVJMLmVuZHNXaXRoKCIvIikpIHsKICAgICAgY29uc29sZS53YXJuKAogICAgICAgIGBJbnZhbGlkIFVSTCBhZGRyZXNzIGZvciBpbXBvcnQgbWFwIHNwZWNpZmllciAnJHtzcGVjaWZpZXJLZXl9JyAtIHNpbmNlIHRoZSBzcGVjaWZpZXIgZW5kcyBpbiBzbGFzaCwgc28gbXVzdCB0aGUgYWRkcmVzc2AKICAgICAgKTsKICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IG51bGw7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtub3JtYWxpemVkU3BlY2lmaWVyS2V5XSA9IGFkZHJlc3NVUkw7CiAgfQogIHJldHVybiBub3JtYWxpemVkOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVNwZWNpZmllcktleShrZXkpIHsKICBpZiAoa2V5ID09PSAiIikgewogICAgY29uc29sZS53YXJuKGBTcGVjaWZpZXIga2V5cyBpbiBpbXBvcnQgbWFwcyBtYXkgbm90IGJlIHRoZSBlbXB0eSBzdHJpbmdgKTsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gcGFyc2VVUkxMaWtlU3BlY2lmaWVyKGtleSwgYmFzZVVSTCkgfHwga2V5Owp9CmZ1bmN0aW9uIHBhcnNlVVJMTGlrZVNwZWNpZmllcihzcGVjaWZpZXIsIGJhc2VVUkwyKSB7CiAgY29uc3QgdXNlQmFzZVVybEFzUGFyZW50ID0gc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi8iKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIik7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVVJMKHNwZWNpZmllciwgdXNlQmFzZVVybEFzUGFyZW50ID8gYmFzZVVSTDIgOiB2b2lkIDApLmhyZWY7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gc29ydEFuZE5vcm1hbGl6ZVNjb3BlcyhtYXAsIGJhc2VVUkwyKSB7CiAgbGV0IG5vcm1hbGl6ZWQgPSB7fTsKICBmb3IgKGxldCBzY29wZVByZWZpeCBpbiBtYXApIHsKICAgIGNvbnN0IHBvdGVudGlhbFNwZWNpZmllck1hcCA9IG1hcFtzY29wZVByZWZpeF07CiAgICBpZiAoIWlzUGxhaW5PYmplY3QocG90ZW50aWFsU3BlY2lmaWVyTWFwKSkgewogICAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSB2YWx1ZSBvZiBzY29wZSAke3Njb3BlUHJlZml4fSBtdXN0IGJlIGEgSlNPTiBvYmplY3RgCiAgICAgICk7CiAgICB9CiAgICBsZXQgc2NvcGVQcmVmaXhVUkw7CiAgICB0cnkgewogICAgICBzY29wZVByZWZpeFVSTCA9IG5ldyBVUkwoc2NvcGVQcmVmaXgsIGJhc2VVUkwyKS5ocmVmOwogICAgfSBjYXRjaCB7CiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICBgU2NvcGUgcHJlZml4IFVSTCAnJHtzY29wZVByZWZpeH0nIHdhcyBub3QgcGFyc2VhYmxlIGluIGltcG9ydCBtYXBgCiAgICAgICk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgbm9ybWFsaXplZFtzY29wZVByZWZpeFVSTF0gPSBzb3J0QW5kTm9ybWFsaXplU3BlY2lmaWVyTWFwKAogICAgICBwb3RlbnRpYWxTcGVjaWZpZXJNYXAsCiAgICAgIGJhc2VVUkwyCiAgICApOwogIH0KICByZXR1cm4gbm9ybWFsaXplZDsKfQpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogIHJldHVybiBvYmogPT09IE9iamVjdChvYmopICYmICFBcnJheS5pc0FycmF5KG9iaik7Cn0KdmFyIGltcG9ydE1hcFByb21pc2UgPSBnZXRJbXBvcnRNYXBQcm9taXNlKCk7CmFzeW5jIGZ1bmN0aW9uIGdldEltcG9ydE1hcFByb21pc2UoKSB7CiAgY29uc3QgcmVsYXRpdmVQYXRoID0gcHJvY2Vzcy5lbnYuSU1QT1JUX01BUF9QQVRIIHx8IElNUE9SVF9NQVBfRklMRV9OQU1FOwogIGNvbnN0IGltcG9ydE1hcFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTsKICBsZXQgc3RyOwogIHRyeSB7CiAgICBzdHIgPSBhd2FpdCBmcy5yZWFkRmlsZShpbXBvcnRNYXBQYXRoKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiBlbXB0eU1hcCgpOwogIH0KICBsZXQganNvbjsKICB0cnkgewogICAganNvbiA9IGF3YWl0IEpTT04ucGFyc2Uoc3RyKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHRocm93IEVycm9yKAogICAgICBgSW1wb3J0IG1hcCBhdCAke2ltcG9ydE1hcFBhdGh9IGNvbnRhaW5zIGludmFsaWQganNvbjogJHtlcnIubWVzc2FnZX1gCiAgICApOwogIH0KICByZXR1cm4gcmVzb2x2ZUFuZENvbXBvc2VJbXBvcnRNYXAoanNvbik7Cn0KZ2xvYmFsLm5vZGVMb2FkZXIgPSBnbG9iYWwubm9kZUxvYWRlciB8fCB7fTsKZ2xvYmFsLm5vZGVMb2FkZXIuc2V0SW1wb3J0TWFwUHJvbWlzZSA9IGZ1bmN0aW9uIHNldEltcG9ydE1hcFByb21pc2UocHJvbWlzZSkgewogIGltcG9ydE1hcFByb21pc2UgPSBwcm9taXNlLnRoZW4oKG1hcCkgPT4gewogICAgcmV0dXJuIHJlc29sdmVBbmRDb21wb3NlSW1wb3J0TWFwKG1hcCk7CiAgfSk7Cn07CmZ1bmN0aW9uIGVtcHR5TWFwKCkgewogIHJldHVybiB7IGltcG9ydHM6IHt9LCBzY29wZXM6IHt9IH07Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2xvYWRlci1hcy1kYXRhLXVybC5qcwp2YXIgcmVzb2x2ZXIgPSAiYVcxd2IzSjBJSEJoZEdnZ1puSnZiU0FuY0dGMGFDYzdDbWx0Y0c5eWRDQjFjbXdnWm5KdmJTQW5kWEpzSnpzS2FXMXdiM0owSUhzZ2NISnZiV2x6WlhNZ1lYTWdabk1nZlNCbWNtOXRJQ2RtY3ljN0NncGxlSEJ2Y25RZ1kyOXVjM1FnU1UxUVQxSlVYMDFCVUY5R1NVeEZYMDVCVFVVZ1BTQW5ibTlrWlM1cGJYQnZjblJ0WVhBbk93b0tZMjl1YzNRZ1ltRnpaVlZTVENBOUlIVnliQzV3WVhSb1ZHOUdhV3hsVlZKTUtIQnliMk5sYzNNdVkzZGtLQ2twSUNzZ2NHRjBhQzV6WlhBN0Nnb3ZMeUJvZEhSd2N6b3ZMM2RwWTJjdVoybDBhSFZpTG1sdkwybHRjRzl5ZEMxdFlYQnpMeU51WlhjdGNtVnpiMngyWlMxaGJHZHZjbWwwYUcwS1pYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZUY0dWamFXWnBaWElvYVcxd2IzSjBUV0Z3TENCemNHVmphV1pwWlhJc0lIQmhjbVZ1ZEZWU1RDa2dld29nSUd4bGRDQmpkWEp5Wlc1MFFtRnpaVlZTVERzS0lDQnBaaUFvY0dGeVpXNTBWVkpNS1NCN0NpQWdJQ0JqYjI1emRDQnNZWE4wVTJ4aGMyaEpibVJsZUNBOUlIQmhjbVZ1ZEZWU1RDNXNZWE4wU1c1a1pYaFBaaWh3WVhSb0xuTmxjQ2s3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlIQmhjbVZ1ZEZWU1RDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyaEpibVJsZUNBcklERXBPd29nSUgwZ1pXeHpaU0I3Q2lBZ0lDQmpkWEp5Wlc1MFFtRnpaVlZTVENBOUlHSmhjMlZWVWt3N0NpQWdmUW9nSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWElnUFFvZ0lDQWdjR0Z5YzJWVlVreE1hV3RsVTNCbFkybG1hV1Z5S0hOd1pXTnBabWxsY2l3Z1kzVnljbVZ1ZEVKaGMyVlZVa3dwSUh4OElITndaV05wWm1sbGNqc0tJQ0JtYjNJZ0tHeGxkQ0J6WTI5d1pWQnlaV1pwZUNCcGJpQnBiWEJ2Y25STllYQXVjMk52Y0dWektTQjdDaUFnSUNCcFppQW9DaUFnSUNBZ0lITmpiM0JsVUhKbFptbDRJRDA5UFNCamRYSnlaVzUwUW1GelpWVlNUQ0I4ZkFvZ0lDQWdJQ0FvYzJOdmNHVlFjbVZtYVhndVpXNWtjMWRwZEdnb0p5OG5LU0FtSmlCamRYSnlaVzUwUW1GelpWVlNUQzV6ZEdGeWRITlhhWFJvS0hOamIzQmxVSEpsWm1sNEtTa0tJQ0FnSUNrZ2V3b2dJQ0FnSUNCamIyNXpkQ0J6WTI5d1pVbHRjRzl5ZEhOTllYUmphQ0E5SUhKbGMyOXNkbVZKYlhCdmNuUnpUV0YwWTJnb0NpQWdJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpd0tJQ0FnSUNBZ0lDQnBiWEJ2Y25STllYQXVjMk52Y0dWelczTmpiM0JsVUhKbFptbDRYUW9nSUNBZ0lDQXBPd29nSUNBZ0lDQnBaaUFvYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmdwSUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzJOdmNHVkpiWEJ2Y25SelRXRjBZMmc3Q2lBZ0lDQWdJSDBLSUNBZ0lIMGdaV3h6WlNCN0NpQWdJQ0FnSUdOdmJuTjBJSFJ2Y0V4bGRtVnNTVzF3YjNKMGMwMWhkR05vSUQwZ2NtVnpiMngyWlVsdGNHOXlkSE5OWVhSamFDZ0tJQ0FnSUNBZ0lDQnViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlMQW9nSUNBZ0lDQWdJR2x0Y0c5eWRFMWhjQzVwYlhCdmNuUnpDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHbG1JQ2gwYjNCTVpYWmxiRWx0Y0c5eWRITk5ZWFJqYUNrZ2V3b2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGIzQk1aWFpsYkVsdGNHOXlkSE5OWVhSamFEc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJSEpsYzI5c2RtVkpiWEJ2Y25SelRXRjBZMmdvYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2l3Z2FXMXdiM0owVFdGd0xtbHRjRzl5ZEhNcE93cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOeVpYTnZiSFpsTFdGdUxXbHRjRzl5ZEhNdGJXRjBZMmdLWm5WdVkzUnBiMjRnY21WemIyeDJaVWx0Y0c5eWRITk5ZWFJqYUNodWIzSnRZV3hwZW1Wa1UzQmxZMmxtYVdWeUxDQnpjR1ZqYVdacFpYSk5ZWEFwSUhzS0lDQm1iM0lnS0d4bGRDQnpjR1ZqYVdacFpYSkxaWGtnYVc0Z2MzQmxZMmxtYVdWeVRXRndLU0I3Q2lBZ0lDQmpiMjV6ZENCeVpYTnZiSFYwYVc5dVVtVnpkV3gwSUQwZ2MzQmxZMmxtYVdWeVRXRndXM053WldOcFptbGxja3RsZVYwN0Nnb2dJQ0FnYVdZZ0tITndaV05wWm1sbGNrdGxlU0E5UFQwZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpa2dld29nSUNBZ0lDQnBaaUFvY21WemIyeDFkR2x2YmxKbGMzVnNkQ0E5UFQwZ2JuVnNiQ2tnZXdvZ0lDQWdJQ0FnSUhSb2NtOTNJRlI1Y0dWRmNuSnZjaWdLSUNBZ0lDQWdJQ0FnSUdCVWFHVWdhVzF3YjNKMElHMWhjQ0J5WlhOdmJIVjBhVzl1SUc5bUlDUjdjM0JsWTJsbWFXVnlTMlY1ZlNCbVlXbHNaV1FnWkhWbElIUnZJR0VnYm5Wc2JDQmxiblJ5ZVdBS0lDQWdJQ0FnSUNBcE93b2dJQ0FnSUNCOUNpQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIVjBhVzl1VW1WemRXeDBPd29nSUNBZ2ZTQmxiSE5sSUdsbUlDZ0tJQ0FnSUNBZ2MzQmxZMmxtYVdWeVMyVjVMbVZ1WkhOWGFYUm9LQ2N2SnlrZ0ppWUtJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGTndaV05wWm1sbGNpNXpkR0Z5ZEhOWGFYUm9LSE53WldOcFptbGxja3RsZVNrS0lDQWdJQ2tnZXdvZ0lDQWdJQ0JwWmlBb2NtVnpiMngxZEdsdmJsSmxjM1ZzZENBOVBUMGdiblZzYkNrZ2V3b2dJQ0FnSUNBZ0lIUm9jbTkzSUZSNWNHVkZjbkp2Y2lnS0lDQWdJQ0FnSUNBZ0lHQlVhR1VnYVcxd2IzSjBJRzFoY0NCeVpYTnZiSFYwYVc5dUlHOW1JQ1I3YzNCbFkybG1hV1Z5UzJWNWZTQm1ZV2xzWldRZ1pIVmxJSFJ2SUdFZ2JuVnNiQ0JsYm5SeWVXQUtJQ0FnSUNBZ0lDQXBPd29nSUNBZ0lDQjlDaUFnSUNBZ0lHTnZibk4wSUdGbWRHVnlVSEpsWm1sNElEMGdibTl5YldGc2FYcGxaRk53WldOcFptbGxjaTV6YkdsalpTaHpjR1ZqYVdacFpYSkxaWGt1YkdWdVozUm9LVHNLSUNBZ0lDQWdkSEo1SUhzS0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGVlNUQ2hoWm5SbGNsQnlaV1pwZUN3Z2NtVnpiMngxZEdsdmJsSmxjM1ZzZENrdWFISmxaanNLSUNBZ0lDQWdmU0JqWVhSamFDQjdDaUFnSUNBZ0lDQWdkR2h5YjNjZ1ZIbHdaVVZ5Y205eUtBb2dJQ0FnSUNBZ0lDQWdZRlJvWlNCcGJYQnZjblFnYldGd0lISmxjMjlzZFhScGIyNGdiMllnSkh0emNHVmphV1pwWlhKTFpYbDlJR1poYVd4bFpDQmtkV1VnZEc4Z1ZWSk1JSEJoY25ObElHWmhhV3gxY21WZ0NpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMEtDaUFnY21WMGRYSnVJRzUxYkd3N0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNCaGNuTnBibWNLWlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVkJibVJEYjIxd2IzTmxTVzF3YjNKMFRXRndLSEJoY25ObFpDa2dld29nSUM4dklGTjBaWEFnTWdvZ0lHbG1JQ2doYVhOUWJHRnBiazlpYW1WamRDaHdZWEp6WldRcEtTQjdDaUFnSUNCMGFISnZkeUJGY25KdmNpaGdTVzUyWVd4cFpDQnBiWEJ2Y25RZ2JXRndJQzBnZEc5d0lHeGxkbVZzSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wWUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURNS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkVsdGNHOXlkSE1nUFNCN2ZUc0tDaUFnTHk4Z1UzUmxjQ0EwQ2lBZ2FXWWdLSEJoY25ObFpDNW9ZWE5QZDI1UWNtOXdaWEowZVNnbmFXMXdiM0owY3ljcEtTQjdDaUFnSUNBdkx5QlRkR1Z3SURRdU1Rb2dJQ0FnYVdZZ0tDRnBjMUJzWVdsdVQySnFaV04wS0hCaGNuTmxaQzVwYlhCdmNuUnpLU2tnZXdvZ0lDQWdJQ0IwYUhKdmR5QkZjbkp2Y2loZ1NXNTJZV3hwWkNCcGJYQnZjblFnYldGd0lDMGdJbWx0Y0c5eWRITWlJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZVzRnYjJKcVpXTjBZQ2s3Q2lBZ0lDQjlDZ29nSUNBZ0x5OGdVM1JsY0NBMExqSUtJQ0FnSUhOdmNuUmxaRUZ1WkU1dmNtMWhiR2w2WldSSmJYQnZjblJ6SUQwZ2MyOXlkRUZ1WkU1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2sxaGNDZ0tJQ0FnSUNBZ2NHRnljMlZrTG1sdGNHOXlkSE1zQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNBdkx5QlRkR1Z3SURVS0lDQnNaWFFnYzI5eWRHVmtRVzVrVG05eWJXRnNhWHBsWkZOamIzQmxjeUE5SUh0OU93b0tJQ0F2THlCVGRHVndJRFlLSUNCcFppQW9jR0Z5YzJWa0xtaGhjMDkzYmxCeWIzQmxjblI1S0NkelkyOXdaWE1uS1NrZ2V3b2dJQ0FnTHk4Z1UzUmxjQ0EyTGpFS0lDQWdJR2xtSUNnaGFYTlFiR0ZwYms5aWFtVmpkQ2h3WVhKelpXUXVjMk52Y0dWektTa2dld29nSUNBZ0lDQjBhSEp2ZHlCRmNuSnZjaWhnU1c1MllXeHBaQ0JwYlhCdmNuUWdiV0Z3SUMwZ0luTmpiM0JsY3lJZ2NISnZjR1Z5ZEhrZ2JYVnpkQ0JpWlNCaGJpQnZZbXBsWTNSZ0tUc0tJQ0FnSUgwS0NpQWdJQ0F2THlCVGRHVndJRFl1TWdvZ0lDQWdjMjl5ZEdWa1FXNWtUbTl5YldGc2FYcGxaRk5qYjNCbGN5QTlJSE52Y25SQmJtUk9iM0p0WVd4cGVtVlRZMjl3WlhNb2NHRnljMlZrTG5OamIzQmxjeXdnWW1GelpWVlNUQ2s3Q2lBZ2ZRb0tJQ0F2THlCVGRHVndJRGNLSUNCamIyNXpkQ0JwYm5aaGJHbGtTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY25ObFpDa3VabWxzZEdWeUtBb2dJQ0FnS0d0bGVTa2dQVDRnYTJWNUlDRTlQU0FuYVcxd2IzSjBjeWNnSmlZZ2EyVjVJQ0U5UFNBbmMyTnZjR1Z6SndvZ0lDazdDaUFnYVdZZ0tHbHVkbUZzYVdSTFpYbHpMbXhsYm1kMGFDQStJREFwSUhzS0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnWUVsdWRtRnNhV1FnZEc5d0xXeGxkbVZzSUd0bGVTUjdDaUFnSUNBZ0lDQWdhVzUyWVd4cFpFdGxlWE11YkdWdVozUm9JRDRnTUNBL0lDZHpKeUE2SUNjbkNpQWdJQ0FnSUgwZ2FXNGdhVzF3YjNKMElHMWhjQ0F0SUNSN2FXNTJZV3hwWkV0bGVYTXVhbTlwYmlnbkxDQW5LWDFnQ2lBZ0lDQXBPd29nSUgwS0NpQWdMeThnVTNSbGNDQTRDaUFnY21WMGRYSnVJSHNLSUNBZ0lHbHRjRzl5ZEhNNklITnZjblJsWkVGdVpFNXZjbTFoYkdsNlpXUkpiWEJ2Y25SekxBb2dJQ0FnYzJOdmNHVnpPaUJ6YjNKMFpXUkJibVJPYjNKdFlXeHBlbVZrVTJOdmNHVnpMQW9nSUgwN0NuMEtDaTh2SUdoMGRIQnpPaTh2ZDJsalp5NW5hWFJvZFdJdWFXOHZhVzF3YjNKMExXMWhjSE12STNOdmNuUXRZVzVrTFc1dmNtMWhiR2w2WlMxaExYTndaV05wWm1sbGNpMXRZWEFLWm5WdVkzUnBiMjRnYzI5eWRFRnVaRTV2Y20xaGJHbDZaVk53WldOcFptbGxjazFoY0NodFlYQXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrSUQwZ2UzMDdDZ29nSUdadmNpQW9iR1YwSUhOd1pXTnBabWxsY2t0bGVTQnBiaUJ0WVhBcElIc0tJQ0FnSUdOdmJuTjBJSFpoYkhWbElEMGdiV0Z3VzNOd1pXTnBabWxsY2t0bGVWMDdDZ29nSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZOd1pXTnBabWxsY2t0bGVTQTlJRzV2Y20xaGJHbDZaVk53WldOcFptbGxja3RsZVNoemNHVmphV1pwWlhKTFpYa3NJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLRzV2Y20xaGJHbDZaV1JUY0dWamFXWnBaWEpMWlhrZ1BUMDlJRzUxYkd3cElIc0tJQ0FnSUNBZ1kyOXVkR2x1ZFdVN0NpQWdJQ0I5Q2dvZ0lDQWdiR1YwSUdGa1pISmxjM05WVWt3Z1BTQndZWEp6WlZWU1RFeHBhMlZUY0dWamFXWnBaWElvZG1Gc2RXVXNJR0poYzJWVlVrd3BPd29nSUNBZ2FXWWdLR0ZrWkhKbGMzTlZVa3dnUFQwOUlHNTFiR3dwSUhzS0lDQWdJQ0FnWTI5dWMyOXNaUzUzWVhKdUtBb2dJQ0FnSUNBZ0lHQkpiblpoYkdsa0lGVlNUQ0JoWkdSeVpYTnpJR1p2Y2lCcGJYQnZjblFnYldGd0lITndaV05wWm1sbGNpQW5KSHR6Y0dWamFXWnBaWEpMWlhsOUoyQUtJQ0FnSUNBZ0tUc0tJQ0FnSUNBZ2JtOXliV0ZzYVhwbFpGdHViM0p0WVd4cGVtVmtVM0JsWTJsbWFXVnlTMlY1WFNBOUlHNTFiR3c3Q2lBZ0lDQWdJR052Ym5ScGJuVmxPd29nSUNBZ2ZRb0tJQ0FnSUdsbUlDaHpjR1ZqYVdacFpYSkxaWGt1Wlc1a2MxZHBkR2dvSnk4bktTQW1KaUFoWVdSa2NtVnpjMVZTVEM1bGJtUnpWMmwwYUNnbkx5Y3BLU0I3Q2lBZ0lDQWdJR052Ym5OdmJHVXVkMkZ5YmlnS0lDQWdJQ0FnSUNCZ1NXNTJZV3hwWkNCVlVrd2dZV1JrY21WemN5Qm1iM0lnYVcxd2IzSjBJRzFoY0NCemNHVmphV1pwWlhJZ0p5UjdjM0JsWTJsbWFXVnlTMlY1ZlNjZ0xTQnphVzVqWlNCMGFHVWdjM0JsWTJsbWFXVnlJR1Z1WkhNZ2FXNGdjMnhoYzJnc0lITnZJRzExYzNRZ2RHaGxJR0ZrWkhKbGMzTmdDaUFnSUNBZ0lDazdDaUFnSUNBZ0lHNXZjbTFoYkdsNlpXUmJibTl5YldGc2FYcGxaRk53WldOcFptbGxja3RsZVYwZ1BTQnVkV3hzT3dvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNLSUNBZ0lIMEtDaUFnSUNCdWIzSnRZV3hwZW1Wa1cyNXZjbTFoYkdsNlpXUlRjR1ZqYVdacFpYSkxaWGxkSUQwZ1lXUmtjbVZ6YzFWU1REc0tJQ0I5Q2dvZ0lISmxkSFZ5YmlCdWIzSnRZV3hwZW1Wa093cDlDZ292THlCb2RIUndjem92TDNkcFkyY3VaMmwwYUhWaUxtbHZMMmx0Y0c5eWRDMXRZWEJ6THlOdWIzSnRZV3hwZW1VdFlTMXpjR1ZqYVdacFpYSXRhMlY1Q21aMWJtTjBhVzl1SUc1dmNtMWhiR2w2WlZOd1pXTnBabWxsY2t0bGVTaHJaWGtwSUhzS0lDQnBaaUFvYTJWNUlEMDlQU0FuSnlrZ2V3b2dJQ0FnWTI5dWMyOXNaUzUzWVhKdUtHQlRjR1ZqYVdacFpYSWdhMlY1Y3lCcGJpQnBiWEJ2Y25RZ2JXRndjeUJ0WVhrZ2JtOTBJR0psSUhSb1pTQmxiWEIwZVNCemRISnBibWRnS1RzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtDaUFnY21WMGRYSnVJSEJoY25ObFZWSk1UR2xyWlZOd1pXTnBabWxsY2loclpYa3NJR0poYzJWVlVrd3BJSHg4SUd0bGVUc0tmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amNHRnljMlV0WVMxMWNtd3RiR2xyWlMxcGJYQnZjblF0YzNCbFkybG1hV1Z5Q21aMWJtTjBhVzl1SUhCaGNuTmxWVkpNVEdsclpWTndaV05wWm1sbGNpaHpjR1ZqYVdacFpYSXNJR0poYzJWVlVrd3BJSHNLSUNCamIyNXpkQ0IxYzJWQ1lYTmxWWEpzUVhOUVlYSmxiblFnUFFvZ0lDQWdjM0JsWTJsbWFXVnlMbk4wWVhKMGMxZHBkR2dvSnk4bktTQjhmQW9nSUNBZ2MzQmxZMmxtYVdWeUxuTjBZWEowYzFkcGRHZ29KeTR2SnlrZ2ZId0tJQ0FnSUhOd1pXTnBabWxsY2k1emRHRnlkSE5YYVhSb0tDY3VMaThuS1RzS0NpQWdkSEo1SUhzS0lDQWdJSEpsZEhWeWJpQnVaWGNnVlZKTUtITndaV05wWm1sbGNpd2dkWE5sUW1GelpWVnliRUZ6VUdGeVpXNTBJRDhnWW1GelpWVlNUQ0E2SUhWdVpHVm1hVzVsWkNrdWFISmxaanNLSUNCOUlHTmhkR05vSUhzS0lDQWdJSEpsZEhWeWJpQnVkV3hzT3dvZ0lIMEtmUW9LTHk4Z2FIUjBjSE02THk5M2FXTm5MbWRwZEdoMVlpNXBieTlwYlhCdmNuUXRiV0Z3Y3k4amMyOXlkQzFoYm1RdGJtOXliV0ZzYVhwbExYTmpiM0JsY3dwbWRXNWpkR2x2YmlCemIzSjBRVzVrVG05eWJXRnNhWHBsVTJOdmNHVnpLRzFoY0N3Z1ltRnpaVlZTVENrZ2V3b2dJR3hsZENCdWIzSnRZV3hwZW1Wa0lEMGdlMzA3Q2dvZ0lHWnZjaUFvYkdWMElITmpiM0JsVUhKbFptbDRJR2x1SUcxaGNDa2dld29nSUNBZ1kyOXVjM1FnY0c5MFpXNTBhV0ZzVTNCbFkybG1hV1Z5VFdGd0lEMGdiV0Z3VzNOamIzQmxVSEpsWm1sNFhUc0tJQ0FnSUdsbUlDZ2hhWE5RYkdGcGJrOWlhbVZqZENod2IzUmxiblJwWVd4VGNHVmphV1pwWlhKTllYQXBLU0I3Q2lBZ0lDQWdJSFJvY205M0lGUjVjR1ZGY25KdmNpZ0tJQ0FnSUNBZ0lDQmdWR2hsSUhaaGJIVmxJRzltSUhOamIzQmxJQ1I3YzJOdmNHVlFjbVZtYVhoOUlHMTFjM1FnWW1VZ1lTQktVMDlPSUc5aWFtVmpkR0FLSUNBZ0lDQWdLVHNLSUNBZ0lIMEtDaUFnSUNCc1pYUWdjMk52Y0dWUWNtVm1hWGhWVWt3N0NpQWdJQ0IwY25rZ2V3b2dJQ0FnSUNCelkyOXdaVkJ5WldacGVGVlNUQ0E5SUc1bGR5QlZVa3dvYzJOdmNHVlFjbVZtYVhnc0lHSmhjMlZWVWt3cExtaHlaV1k3Q2lBZ0lDQjlJR05oZEdOb0lIc0tJQ0FnSUNBZ1kyOXVjMjlzWlM1M1lYSnVLQW9nSUNBZ0lDQWdJR0JUWTI5d1pTQndjbVZtYVhnZ1ZWSk1JQ2NrZTNOamIzQmxVSEpsWm1sNGZTY2dkMkZ6SUc1dmRDQndZWEp6WldGaWJHVWdhVzRnYVcxd2IzSjBJRzFoY0dBS0lDQWdJQ0FnS1RzS0lDQWdJQ0FnWTI5dWRHbHVkV1U3Q2lBZ0lDQjlDZ29nSUNBZ2JtOXliV0ZzYVhwbFpGdHpZMjl3WlZCeVpXWnBlRlZTVEYwZ1BTQnpiM0owUVc1a1RtOXliV0ZzYVhwbFUzQmxZMmxtYVdWeVRXRndLQW9nSUNBZ0lDQndiM1JsYm5ScFlXeFRjR1ZqYVdacFpYSk5ZWEFzQ2lBZ0lDQWdJR0poYzJWVlVrd0tJQ0FnSUNrN0NpQWdmUW9LSUNCeVpYUjFjbTRnYm05eWJXRnNhWHBsWkRzS2ZRb0tablZ1WTNScGIyNGdhWE5RYkdGcGJrOWlhbVZqZENodlltb3BJSHNLSUNCeVpYUjFjbTRnYjJKcUlEMDlQU0JQWW1wbFkzUW9iMkpxS1NBbUppQWhRWEp5WVhrdWFYTkJjbkpoZVNodlltb3BPd3A5Q2dvdkx5QXRMUzBLQ214bGRDQnBiWEJ2Y25STllYQlFjbTl0YVhObElEMGdaMlYwU1cxd2IzSjBUV0Z3VUhKdmJXbHpaU2dwT3dvS1pYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYzI5c2RtVW9jM0JsWTJsbWFXVnlMQ0JqYjI1MFpYaDBMQ0JrWldaaGRXeDBVbVZ6YjJ4MlpTa2dld29nSUdOdmJuTjBJSHNnY0dGeVpXNTBWVkpNSUQwZ2JuVnNiQ0I5SUQwZ1kyOXVkR1Y0ZERzS0lDQmpiMjV6ZENCcGJYQnZjblJOWVhBZ1BTQmhkMkZwZENCcGJYQnZjblJOWVhCUWNtOXRhWE5sT3dvZ0lHTnZibk4wSUdsdGNHOXlkRTFoY0ZWeWJDQTlJSEpsYzI5c2RtVlRjR1ZqYVdacFpYSW9hVzF3YjNKMFRXRndMQ0J6Y0dWamFXWnBaWElzSUhCaGNtVnVkRlZTVENrN0Nnb2dJSEpsZEhWeWJpQmtaV1poZFd4MFVtVnpiMngyWlNocGJYQnZjblJOWVhCVmNtd2dQejhnYzNCbFkybG1hV1Z5TENCamIyNTBaWGgwTENCa1pXWmhkV3gwVW1WemIyeDJaU2s3Q24wS0NtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJzYjJGa0tIVnliQ3dnWTI5dWRHVjRkQ3dnWkdWbVlYVnNkRXh2WVdRcElIc0tJQ0JwWmlBb2RYSnNMbk4wWVhKMGMxZHBkR2dvSjJoMGRIQTZMeThuS1NCOGZDQjFjbXd1YzNSaGNuUnpWMmwwYUNnbmFIUjBjSE02THk4bktTa2dld29nSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1ptVjBZMmdvZFhKc0tUc0tJQ0FnSUdsbUlDZ2hjbVZ6TG05cktTQjdDaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1JtRnBiR1ZrSUhSdklHWmxkR05vSUcxdlpIVnNaU0JtY205dElDUjdkWEpzZldBcE93b2dJQ0FnZlFvZ0lDQWdZMjl1YzNRZ2MyOTFjbU5sSUQwZ1lYZGhhWFFnY21WekxuUmxlSFFvS1RzS0lDQWdJSEpsZEhWeWJpQjdDaUFnSUNBZ0lITm9iM0owUTJseVkzVnBkRG9nZEhKMVpTd0tJQ0FnSUNBZ1ptOXliV0YwT2lBbmJXOWtkV3hsSnl3Z0NpQWdJQ0FnSUhOdmRYSmpaU3dLSUNBZ0lIMDdDaUFnZlFvS0lDQnBaaUFvSVhWeWJDNXpkR0Z5ZEhOWGFYUm9LQ2R1YjJSbE9pY3BLU0I3Q2lBZ0lDQmpiMjUwWlhoMExtWnZjbTFoZENBOUlDZHRiMlIxYkdVbk93b2dJSDBLSUNBS0lDQnlaWFIxY200Z1pHVm1ZWFZzZEV4dllXUW9kWEpzTENCamIyNTBaWGgwTENCa1pXWmhkV3gwVEc5aFpDazdDbjBLQ21GemVXNWpJR1oxYm1OMGFXOXVJR2RsZEVsdGNHOXlkRTFoY0ZCeWIyMXBjMlVvS1NCN0NpQWdZMjl1YzNRZ2NtVnNZWFJwZG1WUVlYUm9JRDBnY0hKdlkyVnpjeTVsYm5ZdVNVMVFUMUpVWDAxQlVGOVFRVlJJSUh4OElFbE5VRTlTVkY5TlFWQmZSa2xNUlY5T1FVMUZPd29nSUdOdmJuTjBJR2x0Y0c5eWRFMWhjRkJoZEdnZ1BTQndZWFJvTG5KbGMyOXNkbVVvY0hKdlkyVnpjeTVqZDJRb0tTd2djbVZzWVhScGRtVlFZWFJvS1RzS0NpQWdiR1YwSUhOMGNqc0tJQ0IwY25rZ2V3b2dJQ0FnYzNSeUlEMGdZWGRoYVhRZ1puTXVjbVZoWkVacGJHVW9hVzF3YjNKMFRXRndVR0YwYUNrN0NpQWdmU0JqWVhSamFDQW9aWEp5S1NCN0NpQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsTllYQW9LVHNLSUNCOUNnb2dJR3hsZENCcWMyOXVPd29nSUhSeWVTQjdDaUFnSUNCcWMyOXVJRDBnWVhkaGFYUWdTbE5QVGk1d1lYSnpaU2h6ZEhJcE93b2dJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2V3b2dJQ0FnZEdoeWIzY2dSWEp5YjNJb0NpQWdJQ0FnSUdCSmJYQnZjblFnYldGd0lHRjBJQ1I3YVcxd2IzSjBUV0Z3VUdGMGFIMGdZMjl1ZEdGcGJuTWdhVzUyWVd4cFpDQnFjMjl1T2lBa2UyVnljaTV0WlhOellXZGxmV0FLSUNBZ0lDazdDaUFnZlFvS0lDQnlaWFIxY200Z2NtVnpiMngyWlVGdVpFTnZiWEJ2YzJWSmJYQnZjblJOWVhBb2FuTnZiaWs3Q24wS0NtZHNiMkpoYkM1dWIyUmxURzloWkdWeUlEMGdaMnh2WW1Gc0xtNXZaR1ZNYjJGa1pYSWdmSHdnZTMwN0NncG5iRzlpWVd3dWJtOWtaVXh2WVdSbGNpNXpaWFJKYlhCdmNuUk5ZWEJRY205dGFYTmxJRDBnWm5WdVkzUnBiMjRnYzJWMFNXMXdiM0owVFdGd1VISnZiV2x6WlNod2NtOXRhWE5sS1NCN0NpQWdhVzF3YjNKMFRXRndVSEp2YldselpTQTlJSEJ5YjIxcGMyVXVkR2hsYmlnb2JXRndLU0E5UGlCN0NpQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpVRnVaRU52YlhCdmMyVkpiWEJ2Y25STllYQW9iV0Z3S1RzS0lDQjlLVHNLZlRzS0NtWjFibU4wYVc5dUlHVnRjSFI1VFdGd0tDa2dld29nSUhKbGRIVnliaUI3SUdsdGNHOXlkSE02SUh0OUxDQnpZMjl3WlhNNklIdDlJSDA3Q24wSyI7CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi9ub2RlL2luaXQtbm9kZS1mZWRlcmF0aW9uLnRzCnZhciBkZWZhdWx0T3B0aW9ucyA9IHsKICByZW1vdGVzT3JNYW5pZmVzdFVybDoge30sCiAgcmVsQnVuZGxlUGF0aDogIi4uL2Jyb3dzZXIiLAogIHRocm93SWZSZW1vdGVOb3RGb3VuZDogZmFsc2UKfTsKYXN5bmMgZnVuY3Rpb24gaW5pdE5vZGVGZWRlcmF0aW9uKG9wdGlvbnMpIHsKICBjb25zdCBtZXJnZWRPcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9OwogIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IGNyZWF0ZU5vZGVJbXBvcnRNYXAobWVyZ2VkT3B0aW9ucyk7CiAgYXdhaXQgd3JpdGVJbXBvcnRNYXAoaW1wb3J0TWFwKTsKICBhd2FpdCB3cml0ZVJlc29sdmVyKCk7CiAgcmVnaXN0ZXIocGF0aFRvRmlsZVVSTCgiLi9mZWRlcmF0aW9uLXJlc29sdmVyLm1qcyIpLmhyZWYpOwp9CmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU5vZGVJbXBvcnRNYXAob3B0aW9ucykgewogIGNvbnN0IHsgcmVtb3Rlc09yTWFuaWZlc3RVcmwsIHJlbEJ1bmRsZVBhdGggfSA9IG9wdGlvbnM7CiAgY29uc3QgcmVtb3RlcyA9IHR5cGVvZiByZW1vdGVzT3JNYW5pZmVzdFVybCA9PT0gIm9iamVjdCIgPyByZW1vdGVzT3JNYW5pZmVzdFVybCA6IGF3YWl0IGxvYWRGc01hbmlmZXN0KHJlbW90ZXNPck1hbmlmZXN0VXJsKTsKICBjb25zdCBob3N0SW5mbyA9IGF3YWl0IGxvYWRGc0ZlZGVyYXRpb25JbmZvKHJlbEJ1bmRsZVBhdGgpOwogIGNvbnN0IGhvc3RJbXBvcnRNYXAgPSBhd2FpdCBwcm9jZXNzSG9zdEluZm8oaG9zdEluZm8sICIuLyIgKyByZWxCdW5kbGVQYXRoKTsKICBjb25zdCByZW1vdGVzSW1wb3J0TWFwID0gYXdhaXQgcHJvY2Vzc1JlbW90ZUluZm9zKHJlbW90ZXMsIHsKICAgIHRocm93SWZSZW1vdGVOb3RGb3VuZDogb3B0aW9ucy50aHJvd0lmUmVtb3RlTm90Rm91bmQsCiAgICBjYWNoZVRhZzogb3B0aW9ucy5jYWNoZVRhZwogIH0pOwogIGNvbnN0IGltcG9ydE1hcCA9IG1lcmdlSW1wb3J0TWFwcyhob3N0SW1wb3J0TWFwLCByZW1vdGVzSW1wb3J0TWFwKTsKICByZXR1cm4gaW1wb3J0TWFwOwp9CmFzeW5jIGZ1bmN0aW9uIGxvYWRGc01hbmlmZXN0KG1hbmlmZXN0VXJsKSB7CiAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzMi5yZWFkRmlsZShtYW5pZmVzdFVybCwgInV0Zi04Iik7CiAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKGNvbnRlbnQpOwogIHJldHVybiBtYW5pZmVzdDsKfQphc3luYyBmdW5jdGlvbiBsb2FkRnNGZWRlcmF0aW9uSW5mbyhyZWxCdW5kbGVQYXRoKSB7CiAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aDIuam9pbihyZWxCdW5kbGVQYXRoLCAicmVtb3RlRW50cnkuanNvbiIpOwogIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmczIucmVhZEZpbGUobWFuaWZlc3RQYXRoLCAidXRmLTgiKTsKICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY29udGVudCk7CiAgcmV0dXJuIG1hbmlmZXN0Owp9CmFzeW5jIGZ1bmN0aW9uIHdyaXRlSW1wb3J0TWFwKG1hcCkgewogIGF3YWl0IGZzMi53cml0ZUZpbGUoCiAgICBJTVBPUlRfTUFQX0ZJTEVfTkFNRSwKICAgIEpTT04uc3RyaW5naWZ5KG1hcCwgbnVsbCwgMiksCiAgICAidXRmLTgiCiAgKTsKfQphc3luYyBmdW5jdGlvbiB3cml0ZVJlc29sdmVyKCkgewogIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlc29sdmVyLCAiYmFzZTY0Iik7CiAgYXdhaXQgZnMyLndyaXRlRmlsZSgiZmVkZXJhdGlvbi1yZXNvbHZlci5tanMiLCBidWZmZXIsICJ1dGYtOCIpOwp9CgovLyBsaWJzL25hdGl2ZS1mZWRlcmF0aW9uLW5vZGUvc3JjL2xpYi91dGlscy9mc3RhcnQtYXJncy1wYXJzZXIudHMKaW1wb3J0ICogYXMgZnMzIGZyb20gIm5vZGU6ZnMiOwp2YXIgZGVmYXVsdEFyZ3MgPSB7CiAgZW50cnk6ICIuL3NlcnZlci5tanMiLAogIHJlbW90ZXNPck1hbmlmZXN0VXJsOiAiLi4vYnJvd3Nlci9mZWRlcmF0aW9uLm1hbmlmZXN0Lmpzb24iLAogIHJlbEJ1bmRsZVBhdGg6ICIuLi9icm93c2VyLyIKfTsKZnVuY3Rpb24gcGFyc2VGU3RhcnRBcmdzKCkgewogIGNvbnN0IGFyZ3MyID0gewogICAgZW50cnk6ICIiLAogICAgcmVtb3Rlc09yTWFuaWZlc3RVcmw6ICIiLAogICAgcmVsQnVuZGxlUGF0aDogIiIKICB9OwogIGxldCBrZXkgPSAiIjsKICBmb3IgKGxldCBpID0gMjsgaSA8IHByb2Nlc3MuYXJndi5sZW5ndGg7IGkrKykgewogICAgY29uc3QgY2FuZCA9IHByb2Nlc3MuYXJndltpXTsKICAgIGlmIChjYW5kLnN0YXJ0c1dpdGgoIi0tIikpIHsKICAgICAgY29uc3QgY2FuZEtleSA9IGNhbmQuc3Vic3RyaW5nKDIpOwogICAgICBpZiAoZGVmYXVsdEFyZ3NbY2FuZEtleV0pIHsKICAgICAgICBrZXkgPSBjYW5kS2V5OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYHN3aXRjaCAke2NhbmR9IG5vdCBzdXBwb3J0ZWQhYCk7CiAgICAgICAgZXhpdFdpdGhVc2FnZShkZWZhdWx0QXJncyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2V5KSB7CiAgICAgIGFyZ3MyW2tleV0gPSBjYW5kOwogICAgICBrZXkgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYHVucmVsYWRlZCB2YWx1ZSAke2NhbmR9IWApOwogICAgICBleGl0V2l0aFVzYWdlKGRlZmF1bHRBcmdzKTsKICAgIH0KICB9CiAgYXBwbHlEZWZhdWx0QXJncyhhcmdzMik7CiAgcmV0dXJuIGFyZ3MyOwp9CmZ1bmN0aW9uIGFwcGx5RGVmYXVsdEFyZ3MoYXJnczIpIHsKICBpZiAoYXJnczIucmVsQnVuZGxlUGF0aCAmJiAhYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwpIHsKICAgIGNvbnN0IGNhbmQgPSBkZWZhdWx0QXJncy5yZWxCdW5kbGVQYXRoICsgImZlZGVyYXRpb24ubWFuaWZlc3QuanNvbiI7CiAgICBpZiAoZnMzLmV4aXN0c1N5bmMoY2FuZCkpIHsKICAgICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBjYW5kOwogICAgfQogIH0KICBhcmdzMi5lbnRyeSA9IGFyZ3MyLmVudHJ5IHx8IGRlZmF1bHRBcmdzLmVudHJ5OwogIGFyZ3MyLnJlbEJ1bmRsZVBhdGggPSBhcmdzMi5yZWxCdW5kbGVQYXRoIHx8IGRlZmF1bHRBcmdzLnJlbEJ1bmRsZVBhdGg7CiAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSBhcmdzMi5yZW1vdGVzT3JNYW5pZmVzdFVybCB8fCBkZWZhdWx0QXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybDsKICBpZiAoIWZzMy5leGlzdHNTeW5jKGFyZ3MyLnJlbW90ZXNPck1hbmlmZXN0VXJsKSkgewogICAgYXJnczIucmVtb3Rlc09yTWFuaWZlc3RVcmwgPSB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIGV4aXRXaXRoVXNhZ2UoZGVmYXVsdEFyZ3MyKSB7CiAgbGV0IGFyZ3MyID0gIiI7CiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdEFyZ3MyKSB7CiAgICBhcmdzMiArPSBgWy0tJHtrZXl9ICR7ZGVmYXVsdEFyZ3MyW2tleV19XSBgOwogIH0KICBjb25zb2xlLmxvZygidXNhZ2U6IG5mc3RhcnQgIiArIGFyZ3MyKTsKICBwcm9jZXNzLmV4aXQoMSk7Cn0KCi8vIGxpYnMvbmF0aXZlLWZlZGVyYXRpb24tbm9kZS9zcmMvbGliL3V0aWxzL2ZzdGFydC50cwp2YXIgYXJncyA9IHBhcnNlRlN0YXJ0QXJncygpOwooYXN5bmMgKCkgPT4gewogIGF3YWl0IGluaXROb2RlRmVkZXJhdGlvbih7CiAgICAuLi5hcmdzLnJlbW90ZXNPck1hbmlmZXN0VXJsID8geyByZW1vdGVzT3JNYW5pZmVzdFVybDogYXJncy5yZW1vdGVzT3JNYW5pZmVzdFVybCB9IDoge30sCiAgICByZWxCdW5kbGVQYXRoOiBhcmdzLnJlbEJ1bmRsZVBhdGgKICB9KTsKICBhd2FpdCBpbXBvcnQoYXJncy5lbnRyeSk7Cn0pKCk7Cg==";
|
|
5
5
|
//# sourceMappingURL=fstart-as-data-url.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fstart-as-data-url.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/tools/fstart-as-data-url.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"fstart-as-data-url.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/tools/fstart-as-data-url.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,8x/BAA8x/B,CAAC"}
|
|
@@ -8,7 +8,6 @@ const build_1 = require("@softarc/native-federation/build");
|
|
|
8
8
|
const esbuild = tslib_1.__importStar(require("esbuild"));
|
|
9
9
|
const private_1 = require("@angular/build/private");
|
|
10
10
|
const create_compiler_options_1 = require("./create-compiler-options");
|
|
11
|
-
const tailwind_1 = require("@angular-devkit/build-angular/src/utils/tailwind");
|
|
12
11
|
const utils_1 = require("@angular-devkit/build-angular/src/utils");
|
|
13
12
|
const node_module_1 = require("node:module");
|
|
14
13
|
const fs = tslib_1.__importStar(require("fs"));
|
|
@@ -102,7 +101,11 @@ function runEsbuild(builderOptions_1, context_1, entryPoints_1, external_1, outd
|
|
|
102
101
|
const workspaceRoot = context.workspaceRoot;
|
|
103
102
|
const optimizationOptions = (0, utils_1.normalizeOptimization)(builderOptions.optimization);
|
|
104
103
|
const sourcemapOptions = (0, utils_1.normalizeSourceMaps)(builderOptions.sourceMap);
|
|
105
|
-
const
|
|
104
|
+
const searchDirectories = yield (0, private_1.generateSearchDirectories)([
|
|
105
|
+
projectRoot,
|
|
106
|
+
workspaceRoot,
|
|
107
|
+
]);
|
|
108
|
+
const tailwindConfigurationPath = (0, private_1.findTailwindConfiguration)(searchDirectories);
|
|
106
109
|
const fullProjectRoot = path.join(workspaceRoot, projectRoot);
|
|
107
110
|
const resolver = (0, node_module_1.createRequire)(fullProjectRoot + '/');
|
|
108
111
|
const tailwindConfiguration = tailwindConfigurationPath
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-esbuild-adapter.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/angular-esbuild-adapter.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"angular-esbuild-adapter.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/angular-esbuild-adapter.ts"],"names":[],"mappings":"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"}
|
package/src/utils/i18n.d.ts
CHANGED
|
@@ -4,8 +4,13 @@ export type WorkspaceConfig = {
|
|
|
4
4
|
i18n?: I18nConfig;
|
|
5
5
|
};
|
|
6
6
|
export type I18nConfig = {
|
|
7
|
-
sourceLocale: string;
|
|
7
|
+
sourceLocale: string | SourceLocaleObject;
|
|
8
8
|
locales: Record<string, string>;
|
|
9
9
|
};
|
|
10
|
+
export type SourceLocaleObject = {
|
|
11
|
+
code: string;
|
|
12
|
+
baseHref?: string;
|
|
13
|
+
subPath?: string;
|
|
14
|
+
};
|
|
10
15
|
export declare function getI18nConfig(context: BuilderContext): Promise<I18nConfig | undefined>;
|
|
11
16
|
export declare function translateFederationArtefacts(i18n: I18nConfig, localize: boolean | string[], outputPath: string, federationResult: FederationInfo): Promise<void>;
|
package/src/utils/i18n.js
CHANGED
|
@@ -30,7 +30,9 @@ function translateFederationArtefacts(i18n, localize, outputPath, federationResu
|
|
|
30
30
|
.map((value) => JSON.stringify(value))
|
|
31
31
|
.join(' ');
|
|
32
32
|
const targetLocales = locales.join(' ');
|
|
33
|
-
const sourceLocale = i18n.sourceLocale
|
|
33
|
+
const sourceLocale = typeof i18n.sourceLocale === 'string'
|
|
34
|
+
? i18n.sourceLocale
|
|
35
|
+
: i18n.sourceLocale.code;
|
|
34
36
|
const translationOutPath = path_1.default.join(outputPath, 'browser', '{{LOCALE}}');
|
|
35
37
|
const federationFiles = [
|
|
36
38
|
...federationResult.shared.map((s) => s.outFileName),
|
package/src/utils/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/i18n.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../../../libs/native-federation/src/utils/i18n.ts"],"names":[],"mappings":"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"}
|